* Remove constraints unnecessary since buster:
+ Build-Depends: Drop versioned constraint on bcftools, libhts-dev and
samtools.
+ * Drop outdated and unused tests
-- Andreas Tille <tille@debian.org> Tue, 07 Dec 2021 09:21:04 +0100
+++ /dev/null
-Author: Michael R. Crusoe <michael.crusoe@gmail.com>
-Description: sync with bcftools 1.10
-
-use devtools/import.py and the contents of the bcftools
-Debian package with its patches fully applied
-
---- python-pysam.orig/bcftools/LICENSE
-+++ python-pysam/bcftools/LICENSE
-@@ -723,3 +723,26 @@
-
- -----------------------------------------------------------------------------
-
-+LICENSE FOR VariantKey (https://github.com/Genomicsplc/variantkey)
-+
-+The MIT License
-+
-+Copyright (c) 2017-2018 GENOMICS plc
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+THE SOFTWARE.
---- python-pysam.orig/bcftools/bam2bcf.c
-+++ python-pysam/bcftools/bam2bcf.c
-@@ -125,6 +125,7 @@
- memset(bca->rev_mqs,0,sizeof(int)*bca->nqual);
- if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES);
- if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES);
-+ if ( call->SCR ) memset(call->SCR,0,sizeof(*call->SCR)*(call->n+1));
- }
-
- /*
-@@ -152,6 +153,7 @@
- memset(r->qsum,0,sizeof(float)*4);
- memset(r->anno,0,sizeof(double)*16);
- memset(r->p,0,sizeof(float)*25);
-+ r->SCR = 0;
-
- if (ref_base >= 0) {
- ref4 = seq_nt16_int[ref_base];
-@@ -199,6 +201,7 @@
- if (q > 63) q = 63;
- if (q < 4) q = 4; // MQ=0 reads count as BQ=4
- bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b;
-+ if ( bca->fmt_flag&(B2B_INFO_SCR|B2B_FMT_SCR) && PLP_HAS_SOFT_CLIP(p->cd.i) ) r->SCR++;
- // collect annotations
- if (b < 4)
- {
-@@ -225,8 +228,12 @@
- // collect for bias tests
- if ( baseQ > 59 ) baseQ = 59;
- if ( mapQ > 59 ) mapQ = 59;
-- int len, pos = get_position(p, &len);
-- int epos = (double)pos/(len+1) * bca->npos;
-+ int len, epos = 0;
-+ if ( bca->fmt_flag & (B2B_INFO_RPB|B2B_INFO_VDB) )
-+ {
-+ int pos = get_position(p, &len);
-+ epos = (double)pos/(len+1) * bca->npos;
-+ }
- int ibq = baseQ/60. * bca->nqual;
- int imq = mapQ/60. * bca->nqual;
- if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++;
-@@ -650,6 +657,14 @@
- call->DP4[4*i+3] = calls[i].anno[3];
- }
- }
-+ if ( call->SCR )
-+ {
-+ for (i=0; i<n; i++)
-+ {
-+ call->SCR[0] += calls[i].SCR;
-+ call->SCR[1+i] = calls[i].SCR;
-+ }
-+ }
- if ( call->ADF )
- {
- assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well
-@@ -702,19 +717,23 @@
- // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual);
- // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual);
-
-- call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos);
-+ if ( bca->fmt_flag & B2B_INFO_RPB )
-+ call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos);
- call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual);
- call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual);
- call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual);
-
- #if CDF_MWU_TESTS
-- call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos);
-+ // CDF version of MWU tests is not calculated by default
-+ if ( bca->fmt_flag & B2B_INFO_RPB )
-+ call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos);
- call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual);
- call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual);
- call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual);
- #endif
-
-- call->vdb = calc_vdb(bca->alt_pos, bca->npos);
-+ if ( bca->fmt_flag & B2B_INFO_VDB )
-+ call->vdb = calc_vdb(bca->alt_pos, bca->npos);
-
- return 0;
- }
-@@ -790,6 +809,8 @@
- if ( fmt_flag&B2B_INFO_DPR )
- bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele);
- }
-+ if ( fmt_flag&B2B_INFO_SCR )
-+ bcf_update_info_int32(hdr, rec, "SCR", bc->SCR, 1);
-
- float tmpf[16];
- for (i=0; i<16; i++) tmpf[i] = bc->anno[i];
-@@ -861,6 +882,8 @@
- if ( fmt_flag&B2B_FMT_DPR )
- bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele);
- }
-+ if ( fmt_flag&B2B_FMT_SCR )
-+ bcf_update_format_int32(hdr, rec, "SCR", bc->SCR+1, rec->n_sample);
-
- return 0;
- }
---- python-pysam.orig/bcftools/bam2bcf.c.pysam.c
-+++ python-pysam/bcftools/bam2bcf.c.pysam.c
-@@ -127,6 +127,7 @@
- memset(bca->rev_mqs,0,sizeof(int)*bca->nqual);
- if ( call->ADF ) memset(call->ADF,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES);
- if ( call->ADR ) memset(call->ADR,0,sizeof(int32_t)*(call->n+1)*B2B_MAX_ALLELES);
-+ if ( call->SCR ) memset(call->SCR,0,sizeof(*call->SCR)*(call->n+1));
- }
-
- /*
-@@ -154,6 +155,7 @@
- memset(r->qsum,0,sizeof(float)*4);
- memset(r->anno,0,sizeof(double)*16);
- memset(r->p,0,sizeof(float)*25);
-+ r->SCR = 0;
-
- if (ref_base >= 0) {
- ref4 = seq_nt16_int[ref_base];
-@@ -201,6 +203,7 @@
- if (q > 63) q = 63;
- if (q < 4) q = 4; // MQ=0 reads count as BQ=4
- bca->bases[n++] = q<<5 | (int)bam_is_rev(p->b)<<4 | b;
-+ if ( bca->fmt_flag&(B2B_INFO_SCR|B2B_FMT_SCR) && PLP_HAS_SOFT_CLIP(p->cd.i) ) r->SCR++;
- // collect annotations
- if (b < 4)
- {
-@@ -227,8 +230,12 @@
- // collect for bias tests
- if ( baseQ > 59 ) baseQ = 59;
- if ( mapQ > 59 ) mapQ = 59;
-- int len, pos = get_position(p, &len);
-- int epos = (double)pos/(len+1) * bca->npos;
-+ int len, epos = 0;
-+ if ( bca->fmt_flag & (B2B_INFO_RPB|B2B_INFO_VDB) )
-+ {
-+ int pos = get_position(p, &len);
-+ epos = (double)pos/(len+1) * bca->npos;
-+ }
- int ibq = baseQ/60. * bca->nqual;
- int imq = mapQ/60. * bca->nqual;
- if ( bam_is_rev(p->b) ) bca->rev_mqs[imq]++;
-@@ -652,6 +659,14 @@
- call->DP4[4*i+3] = calls[i].anno[3];
- }
- }
-+ if ( call->SCR )
-+ {
-+ for (i=0; i<n; i++)
-+ {
-+ call->SCR[0] += calls[i].SCR;
-+ call->SCR[1+i] = calls[i].SCR;
-+ }
-+ }
- if ( call->ADF )
- {
- assert( call->n_alleles<=B2B_MAX_ALLELES ); // this is always true for SNPs and so far for indels as well
-@@ -704,19 +719,23 @@
- // calc_chisq_bias("XMQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_mq, bca->alt_mq, bca->nqual);
- // calc_chisq_bias("XBQ", call->bcf_hdr->id[BCF_DT_CTG][call->tid].key, call->pos, bca->ref_bq, bca->alt_bq, bca->nqual);
-
-- call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos);
-+ if ( bca->fmt_flag & B2B_INFO_RPB )
-+ call->mwu_pos = calc_mwu_bias(bca->ref_pos, bca->alt_pos, bca->npos);
- call->mwu_mq = calc_mwu_bias(bca->ref_mq, bca->alt_mq, bca->nqual);
- call->mwu_bq = calc_mwu_bias(bca->ref_bq, bca->alt_bq, bca->nqual);
- call->mwu_mqs = calc_mwu_bias(bca->fwd_mqs, bca->rev_mqs, bca->nqual);
-
- #if CDF_MWU_TESTS
-- call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos);
-+ // CDF version of MWU tests is not calculated by default
-+ if ( bca->fmt_flag & B2B_INFO_RPB )
-+ call->mwu_pos_cdf = calc_mwu_bias_cdf(bca->ref_pos, bca->alt_pos, bca->npos);
- call->mwu_mq_cdf = calc_mwu_bias_cdf(bca->ref_mq, bca->alt_mq, bca->nqual);
- call->mwu_bq_cdf = calc_mwu_bias_cdf(bca->ref_bq, bca->alt_bq, bca->nqual);
- call->mwu_mqs_cdf = calc_mwu_bias_cdf(bca->fwd_mqs, bca->rev_mqs, bca->nqual);
- #endif
-
-- call->vdb = calc_vdb(bca->alt_pos, bca->npos);
-+ if ( bca->fmt_flag & B2B_INFO_VDB )
-+ call->vdb = calc_vdb(bca->alt_pos, bca->npos);
-
- return 0;
- }
-@@ -792,6 +811,8 @@
- if ( fmt_flag&B2B_INFO_DPR )
- bcf_update_info_int32(hdr, rec, "DPR", bc->ADF, rec->n_allele);
- }
-+ if ( fmt_flag&B2B_INFO_SCR )
-+ bcf_update_info_int32(hdr, rec, "SCR", bc->SCR, 1);
-
- float tmpf[16];
- for (i=0; i<16; i++) tmpf[i] = bc->anno[i];
-@@ -863,6 +884,8 @@
- if ( fmt_flag&B2B_FMT_DPR )
- bcf_update_format_int32(hdr, rec, "DPR", bc->ADF+B2B_MAX_ALLELES, rec->n_sample*rec->n_allele);
- }
-+ if ( fmt_flag&B2B_FMT_SCR )
-+ bcf_update_format_int32(hdr, rec, "SCR", bc->SCR+1, rec->n_sample);
-
- return 0;
- }
---- python-pysam.orig/bcftools/bam2bcf.h
-+++ python-pysam/bcftools/bam2bcf.h
-@@ -55,10 +55,18 @@
- #define B2B_INFO_AD (1<<9)
- #define B2B_INFO_ADF (1<<10)
- #define B2B_INFO_ADR (1<<11)
-+#define B2B_INFO_SCR (1<<12)
-+#define B2B_FMT_SCR (1<<13)
-+#define B2B_INFO_VDB (1<<14)
-+#define B2B_INFO_RPB (1<<15)
-
- #define B2B_MAX_ALLELES 5
-
-+#define PLP_HAS_SOFT_CLIP(i) ((i)&1)
-+#define PLP_SAMPLE_ID(i) ((i)>>1)
-+
- typedef struct __bcf_callaux_t {
-+ int fmt_flag;
- int capQ, min_baseQ;
- int openQ, extQ, tandemQ; // for indels
- uint32_t min_support, max_support; // for collecting indel candidates
-@@ -77,10 +85,11 @@
- void *rghash;
- } bcf_callaux_t;
-
-+// per-sample values
- typedef struct {
- uint32_t ori_depth;
- unsigned int mq0;
-- int32_t *ADF, *ADR;
-+ int32_t *ADF, *ADR, SCR;
- float qsum[4];
- // The fields are:
- // depth fwd .. ref (0) and non-ref (2)
-@@ -98,6 +107,7 @@
- float p[25]; // phred-scaled likelihood of each genotype
- } bcf_callret1_t;
-
-+// values for all samples
- typedef struct {
- int tid, pos;
- bcf_hdr_t *bcf_hdr;
-@@ -107,7 +117,7 @@
- int n_supp; // number of supporting non-reference reads
- double anno[16];
- unsigned int depth, ori_depth, mq0;
-- int32_t *PL, *DP4, *ADR, *ADF;
-+ int32_t *PL, *DP4, *ADR, *ADF, *SCR;
- uint8_t *fmt_arr;
- float vdb; // variant distance bias
- float mwu_pos, mwu_mq, mwu_bq, mwu_mqs;
---- python-pysam.orig/bcftools/bcftools.h
-+++ python-pysam/bcftools/bcftools.h
-@@ -39,7 +39,15 @@
- #define FT_STDIN (1<<3)
-
- char *bcftools_version(void);
-+
-+/// Report an error and exit -1
- void error(const char *format, ...) HTS_NORETURN HTS_FORMAT(HTS_PRINTF_FMT, 1, 2);
-+
-+/// Report an error and exit -1. If errno != 0, appends strerror(errno).
-+// Note: unlike error() above, the message should not end with "\n" as a
-+// newline will be added by the function.
-+void error_errno(const char *format, ...) HTS_NORETURN HTS_FORMAT(HTS_PRINTF_FMT, 1, 2);
-+
- void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd);
- const char *hts_bcf_wmode(int file_type);
-
---- python-pysam.orig/bcftools/call.h
-+++ python-pysam/bcftools/call.h
-@@ -49,12 +49,35 @@
- }
- family_t;
-
-+// For the single-sample and grouped -G calling
-+typedef struct
-+{
-+ float *qsum; // QS(quality sum) values
-+ int nqsum, dp;
-+ double fa,fb,fc,fa2,fb2,fc2,fab,fac,fbc;
-+}
-+grp1_t;
-+typedef struct
-+{
-+ grp1_t *grp;
-+ int ngrp;
-+ int *smpl2grp;
-+}
-+grp_t;
-+
-+// For the `-C alleles -i` constrained calling
-+typedef struct
-+{
-+ uint32_t n:31, used:1;
-+ char **allele;
-+}
-+tgt_als_t;
-+
- typedef struct _ccall_t ccall_t;
- typedef struct
- {
- // mcall only
-- float *qsum; // QS(sum) values
-- int nqsum, npdg;
-+ int npdg;
- int *als_map, nals_map; // mapping from full set of alleles to trimmed set of alleles (old -> new)
- int *pl_map, npl_map; // same as above for PLs, but reverse (new -> old)
- char **als; // array to hold the trimmed set of alleles to appear on output
-@@ -65,14 +88,19 @@
- uint16_t *trio[5][5]; // family type, second index: allele count (2-4, first two are unused)
- double *GLs;
- float *GPs; // FORMAT/GP: posterior probabilities
-- int32_t *GQs; // FORMAT/GQ: genotype qualities
-+ int32_t *GQs, *ADs; // FORMAT/GQ: genotype qualities; AD: allelic depth for -G
- int32_t *itmp; // temporary int array, used for new PLs with CALL_CONSTR_ALLELES
-- int n_itmp, nGPs;
-+ int n_itmp, nGPs, nADs;
- vcmp_t *vcmp;
- double trio_Pm_SNPs, trio_Pm_del, trio_Pm_ins; // P(mendelian) for trio calling, see mcall_call_trio_genotypes()
- int32_t *ugts, *cgts; // unconstraind and constrained GTs
- uint32_t output_tags;
- char *prior_AN, *prior_AC; // reference panel AF tags (AF=AC/AN)
-+ tgt_als_t *tgt_als; // for CALL_CONSTR_ALLELES
-+ char *sample_groups; // for single-sample or grouped calling with -G
-+ grp_t smpl_grp;
-+ float *qsum;
-+ int nqsum;
-
- // ccall only
- double indel_frac, min_perm_p, min_lrt;
---- /dev/null
-+++ python-pysam/bcftools/cols.c
-@@ -0,0 +1,109 @@
-+/*
-+ Copyright (C) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ DEALINGS IN THE SOFTWARE.
-+*/
-+
-+#include <string.h>
-+#include "cols.h"
-+
-+cols_t *cols_split(const char *line, cols_t *cols, char delim)
-+{
-+ if ( !cols ) cols = (cols_t*) calloc(1,sizeof(cols_t));
-+ if ( cols->rmme ) free(cols->rmme);
-+ cols->n = 0;
-+ cols->rmme = strdup(line);
-+ char *ss = cols->rmme;
-+ while (1)
-+ {
-+ char *se = ss;
-+ while ( *se && *se!=delim ) se++;
-+ char tmp = *se;
-+ *se = 0;
-+ cols->n++;
-+ if ( cols->n > cols->m )
-+ {
-+ cols->m += 10;
-+ cols->off = (char**) realloc(cols->off, sizeof(*cols->off)*cols->m);
-+ }
-+ cols->off[ cols->n - 1 ] = ss;
-+ if ( !tmp ) break;
-+ ss = se + 1;
-+ }
-+ return cols;
-+}
-+
-+void cols_append(cols_t *cols, char *str)
-+{
-+ if ( cols->rmme )
-+ {
-+ size_t str_len = strlen(str);
-+ size_t lst_len = strlen(cols->off[ cols->n - 1 ]);
-+ size_t tot_len = 2 + str_len + lst_len + (cols->off[ cols->n - 1 ] - cols->rmme);
-+
-+ cols_t *tmp_cols = (cols_t*)calloc(1,sizeof(cols_t));
-+ tmp_cols->rmme = (char*) calloc(tot_len,1);
-+ tmp_cols->off = (char**) calloc(cols->n+1,sizeof(*tmp_cols->off));
-+
-+ char *ptr = tmp_cols->rmme;
-+ int i;
-+ for (i=0; i<cols->n; i++)
-+ {
-+ size_t len = strlen(cols->off[i]);
-+ memcpy(ptr, cols->off[i], len);
-+ tmp_cols->off[i] = ptr;
-+ ptr += len + 1;
-+ }
-+ memcpy(ptr, str, str_len);
-+ tmp_cols->off[i] = ptr;
-+
-+ free(cols->off);
-+ free(cols->rmme);
-+ cols->rmme = tmp_cols->rmme;
-+ cols->off = tmp_cols->off;
-+ cols->n = cols->n+1;
-+ cols->m = cols->n;
-+ free(tmp_cols);
-+ return;
-+ }
-+ cols->n++;
-+ if ( cols->n > cols->m )
-+ {
-+ cols->m++;
-+ cols->off = (char**) realloc(cols->off,sizeof(*cols->off)*cols->m);
-+ }
-+ cols->off[cols->n-1] = str;
-+}
-+void cols_clear(cols_t *cols)
-+{
-+ if ( !cols ) return;
-+ free(cols->rmme);
-+ free(cols->off);
-+ cols->rmme = NULL;
-+ cols->off = NULL;
-+}
-+void cols_destroy(cols_t *cols)
-+{
-+ if ( !cols ) return;
-+ cols_clear(cols);
-+ free(cols);
-+}
-+
---- /dev/null
-+++ python-pysam/bcftools/cols.c.pysam.c
-@@ -0,0 +1,111 @@
-+#include "bcftools.pysam.h"
-+
-+/*
-+ Copyright (C) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ DEALINGS IN THE SOFTWARE.
-+*/
-+
-+#include <string.h>
-+#include "cols.h"
-+
-+cols_t *cols_split(const char *line, cols_t *cols, char delim)
-+{
-+ if ( !cols ) cols = (cols_t*) calloc(1,sizeof(cols_t));
-+ if ( cols->rmme ) free(cols->rmme);
-+ cols->n = 0;
-+ cols->rmme = strdup(line);
-+ char *ss = cols->rmme;
-+ while (1)
-+ {
-+ char *se = ss;
-+ while ( *se && *se!=delim ) se++;
-+ char tmp = *se;
-+ *se = 0;
-+ cols->n++;
-+ if ( cols->n > cols->m )
-+ {
-+ cols->m += 10;
-+ cols->off = (char**) realloc(cols->off, sizeof(*cols->off)*cols->m);
-+ }
-+ cols->off[ cols->n - 1 ] = ss;
-+ if ( !tmp ) break;
-+ ss = se + 1;
-+ }
-+ return cols;
-+}
-+
-+void cols_append(cols_t *cols, char *str)
-+{
-+ if ( cols->rmme )
-+ {
-+ size_t str_len = strlen(str);
-+ size_t lst_len = strlen(cols->off[ cols->n - 1 ]);
-+ size_t tot_len = 2 + str_len + lst_len + (cols->off[ cols->n - 1 ] - cols->rmme);
-+
-+ cols_t *tmp_cols = (cols_t*)calloc(1,sizeof(cols_t));
-+ tmp_cols->rmme = (char*) calloc(tot_len,1);
-+ tmp_cols->off = (char**) calloc(cols->n+1,sizeof(*tmp_cols->off));
-+
-+ char *ptr = tmp_cols->rmme;
-+ int i;
-+ for (i=0; i<cols->n; i++)
-+ {
-+ size_t len = strlen(cols->off[i]);
-+ memcpy(ptr, cols->off[i], len);
-+ tmp_cols->off[i] = ptr;
-+ ptr += len + 1;
-+ }
-+ memcpy(ptr, str, str_len);
-+ tmp_cols->off[i] = ptr;
-+
-+ free(cols->off);
-+ free(cols->rmme);
-+ cols->rmme = tmp_cols->rmme;
-+ cols->off = tmp_cols->off;
-+ cols->n = cols->n+1;
-+ cols->m = cols->n;
-+ free(tmp_cols);
-+ return;
-+ }
-+ cols->n++;
-+ if ( cols->n > cols->m )
-+ {
-+ cols->m++;
-+ cols->off = (char**) realloc(cols->off,sizeof(*cols->off)*cols->m);
-+ }
-+ cols->off[cols->n-1] = str;
-+}
-+void cols_clear(cols_t *cols)
-+{
-+ if ( !cols ) return;
-+ free(cols->rmme);
-+ free(cols->off);
-+ cols->rmme = NULL;
-+ cols->off = NULL;
-+}
-+void cols_destroy(cols_t *cols)
-+{
-+ if ( !cols ) return;
-+ cols_clear(cols);
-+ free(cols);
-+}
-+
---- /dev/null
-+++ python-pysam/bcftools/cols.h
-@@ -0,0 +1,51 @@
-+/*
-+ Copyright (C) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ DEALINGS IN THE SOFTWARE.
-+*/
-+
-+#ifndef __COLS_H__
-+#define __COLS_H__
-+
-+#include <stdlib.h>
-+
-+typedef struct
-+{
-+ int n,m;
-+ char **off, *rmme;
-+}
-+cols_t;
-+
-+/*
-+ cols_split() can be called repeatedly to split new strings, memory is allocated
-+ and deallocated automatically
-+*/
-+cols_t *cols_split(const char *line, cols_t *cols, char delim);
-+
-+/*
-+ Although cols_append() can be combined with cols_split(), it is much slower and
-+ the string must exist throughout the life of cols unless initialized with cols_split().
-+*/
-+void cols_append(cols_t *cols, char *str);
-+void cols_clear(cols_t *cols);
-+void cols_destroy(cols_t *cols);
-+
-+#endif
---- python-pysam.orig/bcftools/consensus.c
-+++ python-pysam/bcftools/consensus.c
-@@ -50,6 +50,7 @@
- #define PICK_ALT 2
- #define PICK_LONG 4
- #define PICK_SHORT 8
-+#define PICK_IUPAC 16
-
- typedef struct
- {
-@@ -76,11 +77,12 @@
- int fa_src_pos; // last genomic coordinate read from the input fasta (0-based)
- char prev_base; // this is only to validate the REF allele in the VCF - the modified fa_buf cannot be used for inserts following deletions, see 600#issuecomment-383186778
- int prev_base_pos; // the position of prev_base
-+ int prev_is_insert;
-
- rbuf_t vcf_rbuf;
- bcf1_t **vcf_buf;
- int nvcf_buf, rid;
-- char *chr;
-+ char *chr, *chr_prefix;
-
- regidx_t *mask;
- regitr_t *itr;
-@@ -98,7 +100,7 @@
- FILE *fp_out;
- FILE *fp_chain;
- char **argv;
-- int argc, output_iupac, haplotype, allele, isample;
-+ int argc, output_iupac, haplotype, allele, isample, napplied;
- char *fname, *ref_fname, *sample, *output_fname, *mask_fname, *chain_fname, missing_allele;
- }
- args_t;
-@@ -207,7 +209,7 @@
- {
- args->files = bcf_sr_init();
- args->files->require_index = 1;
-- if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to open %s: %s\n", args->fname, bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to read from %s: %s\n", !strcmp("-",args->fname)?"standard input":args->fname, bcf_sr_strerror(args->files->errnum));
- args->hdr = args->files->readers[0].header;
- args->isample = -1;
- if ( args->sample )
-@@ -299,7 +301,7 @@
- args->vcf_rbuf.n = 0;
- bcf_sr_seek(args->files,line,args->fa_ori_pos);
- if ( tmp_ptr ) *tmp_ptr = tmp;
-- fprintf(args->fp_out,">%s\n",line);
-+ fprintf(args->fp_out,">%s%s\n",args->chr_prefix?args->chr_prefix:"",line);
- if (args->chain_fname )
- {
- args->chain = init_chain(args->chain, args->fa_ori_pos);
-@@ -331,7 +333,7 @@
- {
- bcf1_t *rec = *rec_ptr;
- if ( args->vcf_rbuf.n >= args->vcf_rbuf.m )
-- error("FIXME: too many overlapping records near %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("FIXME: too many overlapping records near %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-
- // Insert the new record in the buffer. The line would be overwritten in
- // the next bcf_sr_next_line call, therefore we need to swap it with an
-@@ -395,9 +397,18 @@
- if ( !fmt ) return;
-
- if ( fmt->type!=BCF_BT_INT8 )
-- error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%d?\n",bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%"PRId64"?\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- uint8_t *ptr = fmt->p + fmt->size*args->isample;
-- if ( args->haplotype )
-+
-+ enum { use_hap, use_iupac, pick_one } action = use_hap;
-+ if ( args->allele==PICK_IUPAC )
-+ {
-+ if ( !bcf_gt_is_phased(ptr[0]) && !bcf_gt_is_phased(ptr[fmt->n-1]) ) action = use_iupac;
-+ }
-+ else if ( args->output_iupac ) action = use_iupac;
-+ else if ( !args->haplotype ) action = pick_one;
-+
-+ if ( action==use_hap )
- {
- if ( args->haplotype > fmt->n )
- {
-@@ -410,7 +421,7 @@
- {
- if ( !warned_haplotype )
- {
-- fprintf(stderr, "Can't apply %d-th haplotype at %s:%d. (This warning is printed only once.)\n", args->haplotype,bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(stderr, "Can't apply %d-th haplotype at %s:%"PRId64". (This warning is printed only once.)\n", args->haplotype,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned_haplotype = 1;
- }
- return;
-@@ -428,7 +439,7 @@
- ialt = bcf_gt_allele(ialt);
- }
- }
-- else if ( args->output_iupac )
-+ else if ( action==use_iupac )
- {
- ialt = ptr[0];
- if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end )
-@@ -456,7 +467,7 @@
-
- if ( ialt>=0 )
- {
-- if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- if ( ialt!=jalt && !rec->d.allele[ialt][1] && !rec->d.allele[jalt][1] ) // is this a het snp?
- {
- char ial = rec->d.allele[ialt][0];
-@@ -488,7 +499,7 @@
- {
- if ( ptr[i]==(uint8_t)bcf_int8_vector_end ) break;
- jalt = bcf_gt_allele(ptr[i]);
-- if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- if ( args->allele & (PICK_LONG|PICK_SHORT) )
- {
- int len = jalt==0 ? rec->rlen : strlen(rec->d.allele[jalt]);
-@@ -510,7 +521,7 @@
- }
- }
- if ( !ialt ) return; // ref allele
-- if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( args->output_iupac && !rec->d.allele[0][1] && !rec->d.allele[1][1] )
- {
-@@ -531,18 +542,29 @@
- ialt = 1;
- }
-
-- // Overlapping variant? Can be still OK iff this is an insertion
-- if ( rec->pos <= args->fa_frz_pos && (rec->pos!=args->fa_frz_pos || rec->d.allele[0][0]!=rec->d.allele[ialt][0]) )
-+ // Overlapping variant?
-+ if ( rec->pos <= args->fa_frz_pos )
- {
-- fprintf(stderr,"The site %s:%d overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-- return;
-+ // Can be still OK iff this is an insertion (and which does not follow another insertion, see #888).
-+ // This still may not be enough for more complicated cases with multiple duplicate positions
-+ // and other types in between. In such case let the user normalize the VCF and remove duplicates.
-+ int overlap = 0;
-+ if ( rec->pos < args->fa_frz_pos || !(bcf_get_variant_type(rec,ialt) & VCF_INDEL) ) overlap = 1;
-+ else if ( rec->d.var[ialt].n <= 0 || args->prev_is_insert ) overlap = 1;
-+
-+ if ( overlap )
-+ {
-+ fprintf(stderr,"The site %s:%"PRId64" overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ return;
-+ }
-+
- }
-
- int len_diff = 0, alen = 0;
- int idx = rec->pos - args->fa_ori_pos + args->fa_mod_off;
- if ( idx<0 )
- {
-- fprintf(stderr,"Warning: ignoring overlapping variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Warning: ignoring overlapping variant starting at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- return;
- }
- if ( rec->rlen > args->fa_buf.l - idx )
-@@ -552,17 +574,17 @@
- if ( alen > rec->rlen )
- {
- rec->d.allele[ialt][rec->rlen] = 0;
-- fprintf(stderr,"Warning: trimming variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Warning: trimming variant starting at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( idx>=args->fa_buf.l )
-- error("FIXME: %s:%d .. idx=%d, ori_pos=%d, len=%"PRIu64", off=%d\n",bcf_seqname(args->hdr,rec),rec->pos+1,idx,args->fa_ori_pos,(uint64_t)args->fa_buf.l,args->fa_mod_off);
-+ error("FIXME: %s:%"PRId64" .. idx=%d, ori_pos=%d, len=%"PRIu64", off=%d\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,idx,args->fa_ori_pos,(uint64_t)args->fa_buf.l,args->fa_mod_off);
-
- // sanity check the reference base
- if ( rec->d.allele[ialt][0]=='<' )
- {
- if ( strcasecmp(rec->d.allele[ialt], "<DEL>") )
-- error("Symbolic alleles other than <DEL> are currently not supported: %s at %s:%d\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("Symbolic alleles other than <DEL> are currently not supported: %s at %s:%"PRId64"\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- assert( rec->d.allele[0][1]==0 ); // todo: for now expecting strlen(REF) = 1
- len_diff = 1-rec->rlen;
- rec->d.allele[ialt] = rec->d.allele[0]; // according to VCF spec, REF must precede the event
-@@ -570,7 +592,7 @@
- }
- else if ( strncasecmp(rec->d.allele[0],args->fa_buf.s+idx,rec->rlen) )
- {
-- // This is hacky, handle a special case: if insert follows a deletion (AAC>A, C>CAA),
-+ // This is hacky, handle a special case: if SNP or an insert follows a deletion (AAC>A, C>CAA),
- // the reference base in fa_buf is lost and the check fails. We do not keep a buffer
- // with the original sequence as it should not be necessary, we should encounter max
- // one base overlap
-@@ -591,11 +613,11 @@
- args->fa_buf.s[idx+rec->rlen] = 0;
- }
- error(
-- "The fasta sequence does not match the REF allele at %s:%d:\n"
-- " .vcf: [%s]\n"
-+ "The fasta sequence does not match the REF allele at %s:%"PRId64":\n"
-+ " .vcf: [%s] <- (REF)\n"
- " .vcf: [%s] <- (ALT)\n"
- " .fa: [%s]%c%s\n",
-- bcf_seqname(args->hdr,rec),rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx,
-+ bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx,
- tmp?tmp:' ',tmp?args->fa_buf.s+idx+rec->rlen+1:""
- );
- }
-@@ -618,19 +640,31 @@
- // deletion or same size event
- for (i=0; i<alen; i++)
- args->fa_buf.s[idx+i] = rec->d.allele[ialt][i];
-+
- if ( len_diff )
-- {
-- args->prev_base = rec->d.allele[0][rec->rlen - 1];
-- args->prev_base_pos = rec->pos + rec->rlen - 1;
- memmove(args->fa_buf.s+idx+alen,args->fa_buf.s+idx+rec->rlen,args->fa_buf.l-idx-rec->rlen);
-- }
-+
-+ args->prev_base = rec->d.allele[0][rec->rlen - 1];
-+ args->prev_base_pos = rec->pos + rec->rlen - 1;
-+ args->prev_is_insert = 0;
- }
- else
- {
-+ args->prev_is_insert = 1;
-+ args->prev_base_pos = rec->pos;
-+
- // insertion
- ks_resize(&args->fa_buf, args->fa_buf.l + len_diff);
- memmove(args->fa_buf.s + idx + rec->rlen + len_diff, args->fa_buf.s + idx + rec->rlen, args->fa_buf.l - idx - rec->rlen);
-- for (i=0; i<alen; i++)
-+
-+ // This can get tricky, make sure the bases unchanged by the insertion do not overwrite preceeding variants.
-+ // For example, here we want to get TAA:
-+ // POS REF ALT
-+ // 1 C T
-+ // 1 C CAA
-+ int ibeg = 0;
-+ while ( ibeg<alen && rec->d.allele[0][ibeg]==rec->d.allele[ialt][ibeg] && rec->pos + ibeg <= args->prev_base_pos ) ibeg++;
-+ for (i=ibeg; i<alen; i++)
- args->fa_buf.s[idx+i] = rec->d.allele[ialt][i];
- }
- if (args->chain && len_diff != 0)
-@@ -650,6 +684,7 @@
- args->fa_buf.l += len_diff;
- args->fa_mod_off += len_diff;
- args->fa_frz_pos = rec->pos + rec->rlen - 1;
-+ args->napplied++;
- }
-
-
-@@ -755,6 +790,7 @@
- flush_fa_buffer(args, 0);
- bgzf_close(fasta);
- free(str.s);
-+ fprintf(stderr,"Applied %d variants\n", args->napplied);
- }
-
- static void usage(args_t *args)
-@@ -772,17 +808,19 @@
- fprintf(stderr, " -f, --fasta-ref <file> reference sequence in fasta format\n");
- fprintf(stderr, " -H, --haplotype <which> choose which allele to use from the FORMAT/GT field, note\n");
- fprintf(stderr, " the codes are case-insensitive:\n");
-- fprintf(stderr, " 1: first allele from GT\n");
-- fprintf(stderr, " 2: second allele\n");
-+ fprintf(stderr, " 1: first allele from GT, regardless of phasing\n");
-+ fprintf(stderr, " 2: second allele from GT, regardless of phasing\n");
- fprintf(stderr, " R: REF allele in het genotypes\n");
- fprintf(stderr, " A: ALT allele\n");
- fprintf(stderr, " LR,LA: longer allele and REF/ALT if equal length\n");
- fprintf(stderr, " SR,SA: shorter allele and REF/ALT if equal length\n");
-+ fprintf(stderr, " 1pIu,2pIu: first/second allele for phased and IUPAC code for unphased GTs\n");
- fprintf(stderr, " -i, --include <expr> select sites for which the expression is true (see man page for details)\n");
- fprintf(stderr, " -I, --iupac-codes output variants in the form of IUPAC ambiguity codes\n");
- fprintf(stderr, " -m, --mask <file> replace regions with N\n");
- fprintf(stderr, " -M, --missing <char> output <char> instead of skipping the missing genotypes\n");
- fprintf(stderr, " -o, --output <file> write output to a file [standard output]\n");
-+ fprintf(stderr, " -p, --prefix <string> prefix to add to output sequence names\n");
- fprintf(stderr, " -s, --sample <name> apply variants of the given sample\n");
- fprintf(stderr, "Examples:\n");
- fprintf(stderr, " # Get the consensus for one region. The fasta header lines are then expected\n");
-@@ -809,13 +847,15 @@
- {"mask",1,0,'m'},
- {"missing",1,0,'M'},
- {"chain",1,0,'c'},
-+ {"prefix",required_argument,0,'p'},
- {0,0,0,0}
- };
- int c;
-- while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:M:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:M:p:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-+ case 'p': args->chr_prefix = optarg; break;
- case 's': args->sample = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 'I': args->output_iupac = 1; break;
-@@ -837,10 +877,14 @@
- else if ( !strcasecmp(optarg,"LA") ) args->allele |= PICK_LONG|PICK_ALT;
- else if ( !strcasecmp(optarg,"SR") ) args->allele |= PICK_SHORT|PICK_REF;
- else if ( !strcasecmp(optarg,"SA") ) args->allele |= PICK_SHORT|PICK_ALT;
-+ else if ( !strcasecmp(optarg,"1pIu") ) args->allele |= PICK_IUPAC, args->haplotype = 1;
-+ else if ( !strcasecmp(optarg,"2pIu") ) args->allele |= PICK_IUPAC, args->haplotype = 2;
- else
- {
-- args->haplotype = optarg[0] - '0';
-- if ( args->haplotype <=0 ) error("Expected positive integer with --haplotype\n");
-+ char *tmp;
-+ args->haplotype = strtol(optarg, &tmp, 10);
-+ if ( tmp==optarg || *tmp ) error("Error: Could not parse --haplotype %s, expected numeric argument\n", optarg);
-+ if ( args->haplotype <=0 ) error("Error: Expected positive integer with --haplotype\n");
- }
- break;
- default: usage(args); break;
---- python-pysam.orig/bcftools/consensus.c.pysam.c
-+++ python-pysam/bcftools/consensus.c.pysam.c
-@@ -52,6 +52,7 @@
- #define PICK_ALT 2
- #define PICK_LONG 4
- #define PICK_SHORT 8
-+#define PICK_IUPAC 16
-
- typedef struct
- {
-@@ -78,11 +79,12 @@
- int fa_src_pos; // last genomic coordinate read from the input fasta (0-based)
- char prev_base; // this is only to validate the REF allele in the VCF - the modified fa_buf cannot be used for inserts following deletions, see 600#issuecomment-383186778
- int prev_base_pos; // the position of prev_base
-+ int prev_is_insert;
-
- rbuf_t vcf_rbuf;
- bcf1_t **vcf_buf;
- int nvcf_buf, rid;
-- char *chr;
-+ char *chr, *chr_prefix;
-
- regidx_t *mask;
- regitr_t *itr;
-@@ -100,7 +102,7 @@
- FILE *fp_out;
- FILE *fp_chain;
- char **argv;
-- int argc, output_iupac, haplotype, allele, isample;
-+ int argc, output_iupac, haplotype, allele, isample, napplied;
- char *fname, *ref_fname, *sample, *output_fname, *mask_fname, *chain_fname, missing_allele;
- }
- args_t;
-@@ -209,7 +211,7 @@
- {
- args->files = bcf_sr_init();
- args->files->require_index = 1;
-- if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to open %s: %s\n", args->fname, bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files,args->fname) ) error("Failed to read from %s: %s\n", !strcmp("-",args->fname)?"standard input":args->fname, bcf_sr_strerror(args->files->errnum));
- args->hdr = args->files->readers[0].header;
- args->isample = -1;
- if ( args->sample )
-@@ -301,7 +303,7 @@
- args->vcf_rbuf.n = 0;
- bcf_sr_seek(args->files,line,args->fa_ori_pos);
- if ( tmp_ptr ) *tmp_ptr = tmp;
-- fprintf(args->fp_out,">%s\n",line);
-+ fprintf(args->fp_out,">%s%s\n",args->chr_prefix?args->chr_prefix:"",line);
- if (args->chain_fname )
- {
- args->chain = init_chain(args->chain, args->fa_ori_pos);
-@@ -333,7 +335,7 @@
- {
- bcf1_t *rec = *rec_ptr;
- if ( args->vcf_rbuf.n >= args->vcf_rbuf.m )
-- error("FIXME: too many overlapping records near %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("FIXME: too many overlapping records near %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-
- // Insert the new record in the buffer. The line would be overwritten in
- // the next bcf_sr_next_line call, therefore we need to swap it with an
-@@ -397,9 +399,18 @@
- if ( !fmt ) return;
-
- if ( fmt->type!=BCF_BT_INT8 )
-- error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%d?\n",bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("Todo: GT field represented with BCF_BT_INT8, too many alleles at %s:%"PRId64"?\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- uint8_t *ptr = fmt->p + fmt->size*args->isample;
-- if ( args->haplotype )
-+
-+ enum { use_hap, use_iupac, pick_one } action = use_hap;
-+ if ( args->allele==PICK_IUPAC )
-+ {
-+ if ( !bcf_gt_is_phased(ptr[0]) && !bcf_gt_is_phased(ptr[fmt->n-1]) ) action = use_iupac;
-+ }
-+ else if ( args->output_iupac ) action = use_iupac;
-+ else if ( !args->haplotype ) action = pick_one;
-+
-+ if ( action==use_hap )
- {
- if ( args->haplotype > fmt->n )
- {
-@@ -412,7 +423,7 @@
- {
- if ( !warned_haplotype )
- {
-- fprintf(bcftools_stderr, "Can't apply %d-th haplotype at %s:%d. (This warning is printed only once.)\n", args->haplotype,bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr, "Can't apply %d-th haplotype at %s:%"PRId64". (This warning is printed only once.)\n", args->haplotype,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned_haplotype = 1;
- }
- return;
-@@ -430,7 +441,7 @@
- ialt = bcf_gt_allele(ialt);
- }
- }
-- else if ( args->output_iupac )
-+ else if ( action==use_iupac )
- {
- ialt = ptr[0];
- if ( bcf_gt_is_missing(ialt) || ialt==bcf_int32_vector_end )
-@@ -458,7 +469,7 @@
-
- if ( ialt>=0 )
- {
-- if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= ialt || rec->n_allele <= jalt ) error("Invalid VCF, too few ALT alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- if ( ialt!=jalt && !rec->d.allele[ialt][1] && !rec->d.allele[jalt][1] ) // is this a het snp?
- {
- char ial = rec->d.allele[ialt][0];
-@@ -490,7 +501,7 @@
- {
- if ( ptr[i]==(uint8_t)bcf_int8_vector_end ) break;
- jalt = bcf_gt_allele(ptr[i]);
-- if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= jalt ) error("Broken VCF, too few alts at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- if ( args->allele & (PICK_LONG|PICK_SHORT) )
- {
- int len = jalt==0 ? rec->rlen : strlen(rec->d.allele[jalt]);
-@@ -512,7 +523,7 @@
- }
- }
- if ( !ialt ) return; // ref allele
-- if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ if ( rec->n_allele <= ialt ) error("Broken VCF, too few alts at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( args->output_iupac && !rec->d.allele[0][1] && !rec->d.allele[1][1] )
- {
-@@ -533,18 +544,29 @@
- ialt = 1;
- }
-
-- // Overlapping variant? Can be still OK iff this is an insertion
-- if ( rec->pos <= args->fa_frz_pos && (rec->pos!=args->fa_frz_pos || rec->d.allele[0][0]!=rec->d.allele[ialt][0]) )
-+ // Overlapping variant?
-+ if ( rec->pos <= args->fa_frz_pos )
- {
-- fprintf(bcftools_stderr,"The site %s:%d overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-- return;
-+ // Can be still OK iff this is an insertion (and which does not follow another insertion, see #888).
-+ // This still may not be enough for more complicated cases with multiple duplicate positions
-+ // and other types in between. In such case let the user normalize the VCF and remove duplicates.
-+ int overlap = 0;
-+ if ( rec->pos < args->fa_frz_pos || !(bcf_get_variant_type(rec,ialt) & VCF_INDEL) ) overlap = 1;
-+ else if ( rec->d.var[ialt].n <= 0 || args->prev_is_insert ) overlap = 1;
-+
-+ if ( overlap )
-+ {
-+ fprintf(bcftools_stderr,"The site %s:%"PRId64" overlaps with another variant, skipping...\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ return;
-+ }
-+
- }
-
- int len_diff = 0, alen = 0;
- int idx = rec->pos - args->fa_ori_pos + args->fa_mod_off;
- if ( idx<0 )
- {
-- fprintf(bcftools_stderr,"Warning: ignoring overlapping variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Warning: ignoring overlapping variant starting at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- return;
- }
- if ( rec->rlen > args->fa_buf.l - idx )
-@@ -554,17 +576,17 @@
- if ( alen > rec->rlen )
- {
- rec->d.allele[ialt][rec->rlen] = 0;
-- fprintf(bcftools_stderr,"Warning: trimming variant starting at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Warning: trimming variant starting at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( idx>=args->fa_buf.l )
-- error("FIXME: %s:%d .. idx=%d, ori_pos=%d, len=%"PRIu64", off=%d\n",bcf_seqname(args->hdr,rec),rec->pos+1,idx,args->fa_ori_pos,(uint64_t)args->fa_buf.l,args->fa_mod_off);
-+ error("FIXME: %s:%"PRId64" .. idx=%d, ori_pos=%d, len=%"PRIu64", off=%d\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,idx,args->fa_ori_pos,(uint64_t)args->fa_buf.l,args->fa_mod_off);
-
- // sanity check the reference base
- if ( rec->d.allele[ialt][0]=='<' )
- {
- if ( strcasecmp(rec->d.allele[ialt], "<DEL>") )
-- error("Symbolic alleles other than <DEL> are currently not supported: %s at %s:%d\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("Symbolic alleles other than <DEL> are currently not supported: %s at %s:%"PRId64"\n",rec->d.allele[ialt],bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- assert( rec->d.allele[0][1]==0 ); // todo: for now expecting strlen(REF) = 1
- len_diff = 1-rec->rlen;
- rec->d.allele[ialt] = rec->d.allele[0]; // according to VCF spec, REF must precede the event
-@@ -572,7 +594,7 @@
- }
- else if ( strncasecmp(rec->d.allele[0],args->fa_buf.s+idx,rec->rlen) )
- {
-- // This is hacky, handle a special case: if insert follows a deletion (AAC>A, C>CAA),
-+ // This is hacky, handle a special case: if SNP or an insert follows a deletion (AAC>A, C>CAA),
- // the reference base in fa_buf is lost and the check fails. We do not keep a buffer
- // with the original sequence as it should not be necessary, we should encounter max
- // one base overlap
-@@ -593,11 +615,11 @@
- args->fa_buf.s[idx+rec->rlen] = 0;
- }
- error(
-- "The fasta sequence does not match the REF allele at %s:%d:\n"
-- " .vcf: [%s]\n"
-+ "The fasta sequence does not match the REF allele at %s:%"PRId64":\n"
-+ " .vcf: [%s] <- (REF)\n"
- " .vcf: [%s] <- (ALT)\n"
- " .fa: [%s]%c%s\n",
-- bcf_seqname(args->hdr,rec),rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx,
-+ bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1, rec->d.allele[0], rec->d.allele[ialt], args->fa_buf.s+idx,
- tmp?tmp:' ',tmp?args->fa_buf.s+idx+rec->rlen+1:""
- );
- }
-@@ -620,19 +642,31 @@
- // deletion or same size event
- for (i=0; i<alen; i++)
- args->fa_buf.s[idx+i] = rec->d.allele[ialt][i];
-+
- if ( len_diff )
-- {
-- args->prev_base = rec->d.allele[0][rec->rlen - 1];
-- args->prev_base_pos = rec->pos + rec->rlen - 1;
- memmove(args->fa_buf.s+idx+alen,args->fa_buf.s+idx+rec->rlen,args->fa_buf.l-idx-rec->rlen);
-- }
-+
-+ args->prev_base = rec->d.allele[0][rec->rlen - 1];
-+ args->prev_base_pos = rec->pos + rec->rlen - 1;
-+ args->prev_is_insert = 0;
- }
- else
- {
-+ args->prev_is_insert = 1;
-+ args->prev_base_pos = rec->pos;
-+
- // insertion
- ks_resize(&args->fa_buf, args->fa_buf.l + len_diff);
- memmove(args->fa_buf.s + idx + rec->rlen + len_diff, args->fa_buf.s + idx + rec->rlen, args->fa_buf.l - idx - rec->rlen);
-- for (i=0; i<alen; i++)
-+
-+ // This can get tricky, make sure the bases unchanged by the insertion do not overwrite preceeding variants.
-+ // For example, here we want to get TAA:
-+ // POS REF ALT
-+ // 1 C T
-+ // 1 C CAA
-+ int ibeg = 0;
-+ while ( ibeg<alen && rec->d.allele[0][ibeg]==rec->d.allele[ialt][ibeg] && rec->pos + ibeg <= args->prev_base_pos ) ibeg++;
-+ for (i=ibeg; i<alen; i++)
- args->fa_buf.s[idx+i] = rec->d.allele[ialt][i];
- }
- if (args->chain && len_diff != 0)
-@@ -652,6 +686,7 @@
- args->fa_buf.l += len_diff;
- args->fa_mod_off += len_diff;
- args->fa_frz_pos = rec->pos + rec->rlen - 1;
-+ args->napplied++;
- }
-
-
-@@ -757,6 +792,7 @@
- flush_fa_buffer(args, 0);
- bgzf_close(fasta);
- free(str.s);
-+ fprintf(bcftools_stderr,"Applied %d variants\n", args->napplied);
- }
-
- static void usage(args_t *args)
-@@ -774,17 +810,19 @@
- fprintf(bcftools_stderr, " -f, --fasta-ref <file> reference sequence in fasta format\n");
- fprintf(bcftools_stderr, " -H, --haplotype <which> choose which allele to use from the FORMAT/GT field, note\n");
- fprintf(bcftools_stderr, " the codes are case-insensitive:\n");
-- fprintf(bcftools_stderr, " 1: first allele from GT\n");
-- fprintf(bcftools_stderr, " 2: second allele\n");
-+ fprintf(bcftools_stderr, " 1: first allele from GT, regardless of phasing\n");
-+ fprintf(bcftools_stderr, " 2: second allele from GT, regardless of phasing\n");
- fprintf(bcftools_stderr, " R: REF allele in het genotypes\n");
- fprintf(bcftools_stderr, " A: ALT allele\n");
- fprintf(bcftools_stderr, " LR,LA: longer allele and REF/ALT if equal length\n");
- fprintf(bcftools_stderr, " SR,SA: shorter allele and REF/ALT if equal length\n");
-+ fprintf(bcftools_stderr, " 1pIu,2pIu: first/second allele for phased and IUPAC code for unphased GTs\n");
- fprintf(bcftools_stderr, " -i, --include <expr> select sites for which the expression is true (see man page for details)\n");
- fprintf(bcftools_stderr, " -I, --iupac-codes output variants in the form of IUPAC ambiguity codes\n");
- fprintf(bcftools_stderr, " -m, --mask <file> replace regions with N\n");
- fprintf(bcftools_stderr, " -M, --missing <char> output <char> instead of skipping the missing genotypes\n");
- fprintf(bcftools_stderr, " -o, --output <file> write output to a file [standard output]\n");
-+ fprintf(bcftools_stderr, " -p, --prefix <string> prefix to add to output sequence names\n");
- fprintf(bcftools_stderr, " -s, --sample <name> apply variants of the given sample\n");
- fprintf(bcftools_stderr, "Examples:\n");
- fprintf(bcftools_stderr, " # Get the consensus for one region. The fasta header lines are then expected\n");
-@@ -811,13 +849,15 @@
- {"mask",1,0,'m'},
- {"missing",1,0,'M'},
- {"chain",1,0,'c'},
-+ {"prefix",required_argument,0,'p'},
- {0,0,0,0}
- };
- int c;
-- while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:M:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h?s:1Ii:e:H:f:o:m:c:M:p:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-+ case 'p': args->chr_prefix = optarg; break;
- case 's': args->sample = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 'I': args->output_iupac = 1; break;
-@@ -839,10 +879,14 @@
- else if ( !strcasecmp(optarg,"LA") ) args->allele |= PICK_LONG|PICK_ALT;
- else if ( !strcasecmp(optarg,"SR") ) args->allele |= PICK_SHORT|PICK_REF;
- else if ( !strcasecmp(optarg,"SA") ) args->allele |= PICK_SHORT|PICK_ALT;
-+ else if ( !strcasecmp(optarg,"1pIu") ) args->allele |= PICK_IUPAC, args->haplotype = 1;
-+ else if ( !strcasecmp(optarg,"2pIu") ) args->allele |= PICK_IUPAC, args->haplotype = 2;
- else
- {
-- args->haplotype = optarg[0] - '0';
-- if ( args->haplotype <=0 ) error("Expected positive integer with --haplotype\n");
-+ char *tmp;
-+ args->haplotype = strtol(optarg, &tmp, 10);
-+ if ( tmp==optarg || *tmp ) error("Error: Could not parse --haplotype %s, expected numeric argument\n", optarg);
-+ if ( args->haplotype <=0 ) error("Error: Expected positive integer with --haplotype\n");
- }
- break;
- default: usage(args); break;
---- python-pysam.orig/bcftools/convert.c
-+++ python-pysam/bcftools/convert.c
-@@ -30,12 +30,15 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#define __STDC_FORMAT_MACROS
- #include <inttypes.h>
- #include <math.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/kfunc.h>
- #include "bcftools.h"
-+#include "variantkey.h"
- #include "convert.h"
-
- #define T_CHROM 1
-@@ -67,6 +70,9 @@
- #define T_END 27
- #define T_POS0 28
- #define T_END0 29
-+#define T_RSX 30 // RSID HEX
-+#define T_VKX 31 // VARIANTKEY HEX
-+#define T_PBINOM 32
-
- typedef struct _fmt_t
- {
-@@ -196,13 +202,44 @@
- }
- static void process_info(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
-+ int i;
-+ if ( !fmt->key ) // the whole INFO column
-+ {
-+ int first = 1;
-+ for (i=0; i<line->n_info; i++)
-+ {
-+ bcf_info_t *inf = &line->d.info[i];
-+ if ( !inf->vptr ) continue;
-+ if ( !first ) kputc(';', str);
-+ first = 0;
-+ if ( inf->key >= convert->header->n[BCF_DT_ID] ) continue;
-+ kputs(convert->header->id[BCF_DT_ID][inf->key].key, str);
-+ if ( inf->len <= 0 ) continue;
-+ kputc('=', str);
-+ if ( inf->len == 1 )
-+ {
-+ switch (inf->type)
-+ {
-+ case BCF_BT_INT8: if ( inf->v1.i==bcf_int8_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_INT16: if ( inf->v1.i==bcf_int16_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_INT32: if ( inf->v1.i==bcf_int32_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_FLOAT: if ( bcf_float_is_missing(inf->v1.f) ) kputc('.', str); else kputd(inf->v1.f, str); break;
-+ case BCF_BT_CHAR: kputc(inf->v1.i, str); break;
-+ default: error("Unexpected type %d", inf->type); break;
-+ }
-+ }
-+ else bcf_fmt_array(str, inf->len, inf->type, inf->vptr);
-+ }
-+ if ( first ) kputc('.', str);
-+ return;
-+ }
-+
- if ( fmt->id<0 )
- {
- kputc('.', str);
- return;
- }
-
-- int i;
- for (i=0; i<line->n_info; i++)
- if ( line->d.info[i].key == fmt->id ) break;
-
-@@ -276,6 +313,50 @@
-
- fmt->ready = 1;
- }
-+static void process_complete_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ if ( convert->nsamples )
-+ {
-+ int i,j;
-+ if ( line->n_fmt)
-+ {
-+ int gt_i = -1;
-+ bcf_fmt_t *fmt = line->d.fmt;
-+ int first = 1;
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ {
-+ if ( !fmt[i].p || fmt[i].id<0 ) continue;
-+ if ( !first ) kputc(':', str);
-+ first = 0;
-+ kputs(convert->header->id[BCF_DT_ID][fmt[i].id].key, str);
-+ if ( strcmp(convert->header->id[BCF_DT_ID][fmt[i].id].key, "GT") == 0) gt_i = i;
-+ }
-+ if ( first ) kputc('.', str);
-+ for (j=0; j<convert->nsamples; j++)
-+ {
-+ kputc('\t', str);
-+ first = 1;
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ {
-+ bcf_fmt_t *f = &fmt[i];
-+ if ( !f->p ) continue;
-+ if ( !first ) kputc(':', str);
-+ first = 0;
-+ if (gt_i == i)
-+ bcf_format_gt(f,convert->samples[j],str);
-+ else
-+ bcf_fmt_array(str, f->n, f->type, f->p + convert->samples[j] * f->size);
-+ }
-+ if ( first ) kputc('.', str);
-+ }
-+ }
-+ else
-+ for (j=0; j<=line->n_sample; j++)
-+ kputs("\t.", str);
-+ }
-+ else
-+ kputc('.',str);
-+}
- static void process_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
- if ( !fmt->ready )
-@@ -555,6 +636,7 @@
- if ( line_type & VCF_INDEL ) { if (i) kputc(',',str); kputs("INDEL", str); i++; }
- if ( line_type & VCF_OTHER ) { if (i) kputc(',',str); kputs("OTHER", str); i++; }
- if ( line_type & VCF_BND ) { if (i) kputc(',',str); kputs("BND", str); i++; }
-+ if ( line_type & VCF_OVERLAP ) { if (i) kputc(',',str); kputs("OVERLAP", str); i++; }
- }
- static void process_line(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
-@@ -590,7 +672,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing GT tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing GT tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -641,7 +723,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing PL tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing PL tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -690,7 +772,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing GP tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing GP tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -702,7 +784,7 @@
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
- if ( ptr[j]==bcf_int32_missing ) { ptr[j]=0; continue; }
-- if ( ptr[j]<0 || ptr[j]>1 ) error("[%s:%d:%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),line->pos+1,ptr[j]);
-+ if ( ptr[j]<0 || ptr[j]>1 ) error("[%s:%"PRId64":%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),(int64_t) line->pos+1,ptr[j]);
- sum+=ptr[j];
- }
- if ( j==line->n_allele )
-@@ -745,24 +827,24 @@
-
- int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
- if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT);
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<line->n_fmt; i++)
- if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; }
- if ( !fmt_gt )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99
- if ( line->n_allele > 100 )
-- error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Too many alleles (%d) at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( ks_resize(str, str->l+convert->nsamples*8) != 0 )
-- error("Could not alloc %"PRIu64" bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-+ error("Could not alloc %" PRIu64 " bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-
- if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid
-- error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, too many alleles (%d) or redundant BCF representation at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( fmt_gt->n!=1 && fmt_gt->n!=2 )
-- error("Uh, ploidy of %d not supported, see %s:%d\n", fmt_gt->n, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, ploidy of %d not supported, see %s:%"PRId64"\n", fmt_gt->n, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n;
- for (i=0; i<convert->nsamples; i++)
-@@ -899,22 +981,22 @@
-
- int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
- if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT);
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<line->n_fmt; i++)
- if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; }
- if ( !fmt_gt )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99
- if ( line->n_allele > 100 )
-- error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Too many alleles (%d) at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( ks_resize(str, str->l+convert->nsamples*8) != 0 )
-- error("Could not alloc %"PRIu64" bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-+ error("Could not alloc %" PRIu64 " bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-
- if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid
-- error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, too many alleles (%d) or redundant BCF representation at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n;
- for (i=0; i<convert->nsamples; i++)
-@@ -1020,6 +1102,91 @@
- str->s[--str->l] = 0; // delete the last space
- }
-
-+static void process_rsid_hex(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ char *ptr = line->d.id;
-+ ptr += 2; // remove 'rs'
-+ ksprintf(str, "%08" PRIx32 "", (uint32_t)strtoul(ptr, NULL, 10));
-+}
-+
-+static void process_variantkey_hex(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ uint64_t vk = variantkey(
-+ convert->header->id[BCF_DT_CTG][line->rid].key,
-+ strlen(convert->header->id[BCF_DT_CTG][line->rid].key),
-+ line->pos,
-+ line->d.allele[0],
-+ strlen(line->d.allele[0]),
-+ line->d.allele[1],
-+ strlen(line->d.allele[1]));
-+ ksprintf(str, "%016" PRIx64 "", vk);
-+}
-+
-+static void process_pbinom(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ int i;
-+ if ( !fmt->ready )
-+ {
-+ fmt->fmt = NULL; // AD
-+ fmt->usr = NULL; // GT
-+
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ if ( line->d.fmt[i].id==fmt->id ) { fmt->fmt = &line->d.fmt[i]; break; }
-+
-+ // Check that the first field is GT
-+ int gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
-+ if ( !bcf_hdr_idinfo_exists(convert->header, BCF_HL_FMT, fmt->id) ) error("Error: FORMAT/GT is not defined in the header\n");
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ if ( line->d.fmt[i].id==gt_id ) { fmt->usr = &line->d.fmt[i]; break; } // it should always be first according to VCF spec, but...
-+
-+ if ( fmt->usr && line->d.fmt[i].type!=BCF_BT_INT8 ) // skip sites with many alleles
-+ fmt->usr = NULL;
-+
-+ fmt->ready = 1;
-+ }
-+ bcf_fmt_t *gt_fmt = (bcf_fmt_t*) fmt->usr;
-+ if ( !fmt->fmt || !gt_fmt || gt_fmt->n!=2 ) goto invalid;
-+
-+ int n[2] = {0,0};
-+ int8_t *gt = (int8_t*)(gt_fmt->p + isample*gt_fmt->size);
-+ for (i=0; i<2; i++)
-+ {
-+ if ( bcf_gt_is_missing(gt[i]) || gt[i] == bcf_int8_vector_end ) goto invalid;
-+ int al = bcf_gt_allele(gt[i]);
-+ if ( al > line->n_allele || al >= fmt->fmt->n ) goto invalid;
-+
-+ #define BRANCH(type_t, missing, vector_end) { \
-+ type_t val = ((type_t *) fmt->fmt->p)[al + isample*fmt->fmt->n]; \
-+ if ( val==missing || val==vector_end ) goto invalid; \
-+ else n[i] = val; \
-+ }
-+ switch (fmt->fmt->type)
-+ {
-+ case BCF_BT_INT8: BRANCH(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: goto invalid; break;
-+ }
-+ #undef BRANCH
-+ }
-+
-+ if ( n[0]==n[1] ) kputc(n[0]==0 ? '.':'0', str);
-+ else
-+ {
-+ double pval = n[0] < n[1] ? kf_betai(n[1], n[0] + 1, 0.5) : kf_betai(n[0], n[1] + 1, 0.5);
-+ pval *= 2;
-+ assert( pval-1 < 1e-10 );
-+ if ( pval>=1 ) pval = 0; // this can happen, machine precision error, eg. kf_betai(1,0,0.5)
-+ else
-+ pval = -4.34294481903*log(pval);
-+ kputd(pval, str);
-+ }
-+ return;
-+
-+invalid:
-+ kputc('.', str);
-+}
-+
- static fmt_t *register_tag(convert_t *convert, int type, char *key, int is_gtf)
- {
- convert->nfmt++;
-@@ -1054,11 +1221,14 @@
- else if ( !strcmp("QUAL",key) ) { fmt->type = T_QUAL; }
- else if ( !strcmp("FILTER",key) ) { fmt->type = T_FILTER; }
- else if ( !strcmp("_CHROM_POS_ID",key) ) { fmt->type = T_CHROM_POS_ID; }
-- else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) )
-- {
-- fmt->type = T_INFO;
-- fprintf(stderr,"Warning: Assuming INFO/%s\n", key);
-- }
-+ else if ( !strcmp("RSX",key) ) { fmt->type = T_RSX; }
-+ else if ( !strcmp("VKX",key) ) { fmt->type = T_VKX; }
-+ else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) ) { fmt->type = T_INFO; }
-+ }
-+ if ( fmt->type==T_PBINOM )
-+ {
-+ fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, fmt->key);
-+ if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT, fmt->id) ) error("No such FORMAT tag defined in the header: %s\n", fmt->key);
- }
- }
-
-@@ -1072,15 +1242,15 @@
- case T_CHROM: fmt->handler = &process_chrom; break;
- case T_POS: fmt->handler = &process_pos; break;
- case T_POS0: fmt->handler = &process_pos0; break;
-- case T_END: fmt->handler = &process_end; break;
-- case T_END0: fmt->handler = &process_end0; break;
-+ case T_END: fmt->handler = &process_end; convert->max_unpack |= BCF_UN_INFO; break;
-+ case T_END0: fmt->handler = &process_end0; convert->max_unpack |= BCF_UN_INFO; break;
- case T_ID: fmt->handler = &process_id; break;
- case T_REF: fmt->handler = &process_ref; break;
- case T_ALT: fmt->handler = &process_alt; break;
- case T_QUAL: fmt->handler = &process_qual; break;
- case T_FILTER: fmt->handler = &process_filter; convert->max_unpack |= BCF_UN_FLT; break;
- case T_INFO: fmt->handler = &process_info; convert->max_unpack |= BCF_UN_INFO; break;
-- case T_FORMAT: fmt->handler = &process_format; convert->max_unpack |= BCF_UN_FMT; break;
-+ case T_FORMAT: fmt->handler = fmt->key ? &process_format : &process_complete_format; convert->max_unpack |= BCF_UN_FMT; break;
- case T_SAMPLE: fmt->handler = &process_sample; break;
- case T_SEP: fmt->handler = &process_sep; break;
- case T_IS_TS: fmt->handler = &process_is_ts; break;
-@@ -1093,6 +1263,9 @@
- case T_GT_TO_HAP2: fmt->handler = &process_gt_to_hap2; convert->max_unpack |= BCF_UN_FMT; break;
- case T_TBCSQ: fmt->handler = &process_tbcsq; fmt->destroy = &destroy_tbcsq; convert->max_unpack |= BCF_UN_FMT; break;
- case T_LINE: fmt->handler = &process_line; convert->max_unpack |= BCF_UN_FMT; break;
-+ case T_RSX: fmt->handler = &process_rsid_hex; break;
-+ case T_VKX: fmt->handler = &process_variantkey_hex; break;
-+ case T_PBINOM: fmt->handler = &process_pbinom; convert->max_unpack |= BCF_UN_FMT; break;
- default: error("TODO: handler for type %d\n", fmt->type);
- }
- if ( key && fmt->type==T_INFO )
-@@ -1144,7 +1317,14 @@
- else if ( !strcmp(str.s, "IUPACGT") ) register_tag(convert, T_IUPAC_GT, "GT", is_gtf);
- else if ( !strcmp(str.s, "INFO") )
- {
-- if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str);
-+ if ( *q!='/' )
-+ {
-+ int id = bcf_hdr_id2int(convert->header, BCF_DT_ID, str.s);
-+ if ( bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) )
-+ error("Could not parse format string \"%s\". Did you mean %%INFO/%s?\n", convert->format_str,str.s);
-+ else
-+ error("Could not parse format string: %s\n", convert->format_str);
-+ }
- p = ++q;
- str.l = 0;
- while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-@@ -1153,6 +1333,17 @@
- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
- fmt->subscript = parse_subscript(&q);
- }
-+ else if ( !strcmp(str.s,"PBINOM") )
-+ {
-+ if ( *q!='(' ) error("Could not parse the expression: %s\n", convert->format_str);
-+ p = ++q;
-+ str.l = 0;
-+ while ( *q && *q!=')' ) q++;
-+ if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-+ kputsn(p, q-p, &str);
-+ register_tag(convert, T_PBINOM, str.s, is_gtf);
-+ q++;
-+ }
- else
- {
- fmt_t *fmt = register_tag(convert, T_FORMAT, str.s, is_gtf);
-@@ -1187,17 +1378,26 @@
- else if ( !strcmp(str.s, "_GP_TO_PROB3") ) register_tag(convert, T_GP_TO_PROB3, str.s, is_gtf);
- else if ( !strcmp(str.s, "_GT_TO_HAP") ) register_tag(convert, T_GT_TO_HAP, str.s, is_gtf);
- else if ( !strcmp(str.s, "_GT_TO_HAP2") ) register_tag(convert, T_GT_TO_HAP2, str.s, is_gtf);
-+ else if ( !strcmp(str.s, "RSX") ) register_tag(convert, T_RSX, str.s, is_gtf);
-+ else if ( !strcmp(str.s, "VKX") ) register_tag(convert, T_VKX, str.s, is_gtf);
-+ else if ( !strcmp(str.s,"pbinom") ) error("Error: pbinom() is currently supported only with FORMAT tags. (todo)\n");
- else if ( !strcmp(str.s, "INFO") )
- {
-- if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str);
-- p = ++q;
-- str.l = 0;
-- while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-- if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-- kputsn(p, q-p, &str);
-- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-- fmt->subscript = parse_subscript(&q);
-+ if ( *q=='/' )
-+ {
-+ p = ++q;
-+ str.l = 0;
-+ while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-+ if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-+ kputsn(p, q-p, &str);
-+ fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-+ fmt->subscript = parse_subscript(&q);
-+ }
-+ else
-+ register_tag(convert, T_INFO, NULL, is_gtf); // the whole INFO
- }
-+ else if ( !strcmp(str.s, "FORMAT") )
-+ register_tag(convert, T_FORMAT, NULL, 0);
- else
- {
- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-@@ -1336,7 +1536,15 @@
- int convert_line(convert_t *convert, bcf1_t *line, kstring_t *str)
- {
- if ( !convert->allow_undef_tags && convert->undef_info_tag )
-- error("Error: no such tag defined in the VCF header: INFO/%s. FORMAT fields must be in square brackets, e.g. \"[ %s]\"\n", convert->undef_info_tag,convert->undef_info_tag);
-+ {
-+ kstring_t msg = {0,0,0};
-+ ksprintf(&msg,"Error: no such tag defined in the VCF header: INFO/%s", convert->undef_info_tag);
-+
-+ int hdr_id = bcf_hdr_id2int(convert->header,BCF_DT_ID,convert->undef_info_tag);
-+ if ( hdr_id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,hdr_id) )
-+ ksprintf(&msg,". FORMAT fields must be enclosed in square brackets, e.g. \"[ %%%s]\"", convert->undef_info_tag);
-+ error("%s\n", msg.s);
-+ }
-
- int l_ori = str->l;
- bcf_unpack(line, convert->max_unpack);
-@@ -1357,7 +1565,7 @@
- for (js=0; js<convert->nsamples; js++)
- {
- // Skip samples when filtering was requested
-- if ( *convert->subset_samples && !(*convert->subset_samples)[js] ) continue;
-+ if ( convert->subset_samples && *convert->subset_samples && !(*convert->subset_samples)[js] ) continue;
-
- // Here comes a hack designed for TBCSQ. When running on large files,
- // such as 1000GP, there are too many empty fields in the output and
---- python-pysam.orig/bcftools/convert.c.pysam.c
-+++ python-pysam/bcftools/convert.c.pysam.c
-@@ -32,12 +32,15 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#define __STDC_FORMAT_MACROS
- #include <inttypes.h>
- #include <math.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/kfunc.h>
- #include "bcftools.h"
-+#include "variantkey.h"
- #include "convert.h"
-
- #define T_CHROM 1
-@@ -69,6 +72,9 @@
- #define T_END 27
- #define T_POS0 28
- #define T_END0 29
-+#define T_RSX 30 // RSID HEX
-+#define T_VKX 31 // VARIANTKEY HEX
-+#define T_PBINOM 32
-
- typedef struct _fmt_t
- {
-@@ -198,13 +204,44 @@
- }
- static void process_info(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
-+ int i;
-+ if ( !fmt->key ) // the whole INFO column
-+ {
-+ int first = 1;
-+ for (i=0; i<line->n_info; i++)
-+ {
-+ bcf_info_t *inf = &line->d.info[i];
-+ if ( !inf->vptr ) continue;
-+ if ( !first ) kputc(';', str);
-+ first = 0;
-+ if ( inf->key >= convert->header->n[BCF_DT_ID] ) continue;
-+ kputs(convert->header->id[BCF_DT_ID][inf->key].key, str);
-+ if ( inf->len <= 0 ) continue;
-+ kputc('=', str);
-+ if ( inf->len == 1 )
-+ {
-+ switch (inf->type)
-+ {
-+ case BCF_BT_INT8: if ( inf->v1.i==bcf_int8_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_INT16: if ( inf->v1.i==bcf_int16_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_INT32: if ( inf->v1.i==bcf_int32_missing ) kputc('.', str); else kputw(inf->v1.i, str); break;
-+ case BCF_BT_FLOAT: if ( bcf_float_is_missing(inf->v1.f) ) kputc('.', str); else kputd(inf->v1.f, str); break;
-+ case BCF_BT_CHAR: kputc(inf->v1.i, str); break;
-+ default: error("Unexpected type %d", inf->type); break;
-+ }
-+ }
-+ else bcf_fmt_array(str, inf->len, inf->type, inf->vptr);
-+ }
-+ if ( first ) kputc('.', str);
-+ return;
-+ }
-+
- if ( fmt->id<0 )
- {
- kputc('.', str);
- return;
- }
-
-- int i;
- for (i=0; i<line->n_info; i++)
- if ( line->d.info[i].key == fmt->id ) break;
-
-@@ -278,6 +315,50 @@
-
- fmt->ready = 1;
- }
-+static void process_complete_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ if ( convert->nsamples )
-+ {
-+ int i,j;
-+ if ( line->n_fmt)
-+ {
-+ int gt_i = -1;
-+ bcf_fmt_t *fmt = line->d.fmt;
-+ int first = 1;
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ {
-+ if ( !fmt[i].p || fmt[i].id<0 ) continue;
-+ if ( !first ) kputc(':', str);
-+ first = 0;
-+ kputs(convert->header->id[BCF_DT_ID][fmt[i].id].key, str);
-+ if ( strcmp(convert->header->id[BCF_DT_ID][fmt[i].id].key, "GT") == 0) gt_i = i;
-+ }
-+ if ( first ) kputc('.', str);
-+ for (j=0; j<convert->nsamples; j++)
-+ {
-+ kputc('\t', str);
-+ first = 1;
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ {
-+ bcf_fmt_t *f = &fmt[i];
-+ if ( !f->p ) continue;
-+ if ( !first ) kputc(':', str);
-+ first = 0;
-+ if (gt_i == i)
-+ bcf_format_gt(f,convert->samples[j],str);
-+ else
-+ bcf_fmt_array(str, f->n, f->type, f->p + convert->samples[j] * f->size);
-+ }
-+ if ( first ) kputc('.', str);
-+ }
-+ }
-+ else
-+ for (j=0; j<=line->n_sample; j++)
-+ kputs("\t.", str);
-+ }
-+ else
-+ kputc('.',str);
-+}
- static void process_format(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
- if ( !fmt->ready )
-@@ -557,6 +638,7 @@
- if ( line_type & VCF_INDEL ) { if (i) kputc(',',str); kputs("INDEL", str); i++; }
- if ( line_type & VCF_OTHER ) { if (i) kputc(',',str); kputs("OTHER", str); i++; }
- if ( line_type & VCF_BND ) { if (i) kputc(',',str); kputs("BND", str); i++; }
-+ if ( line_type & VCF_OVERLAP ) { if (i) kputc(',',str); kputs("OVERLAP", str); i++; }
- }
- static void process_line(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
- {
-@@ -592,7 +674,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing GT tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing GT tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -643,7 +725,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing PL tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing PL tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -692,7 +774,7 @@
- // for (i=0; i<convert->nsamples; i++) kputs(" 0.33 0.33 0.33", str);
- // return;
-
-- error("Error parsing GP tag at %s:%d\n", bcf_seqname(convert->header,line),line->pos+1);
-+ error("Error parsing GP tag at %s:%"PRId64"\n", bcf_seqname(convert->header,line),(int64_t) line->pos+1);
- }
-
- n /= convert->nsamples;
-@@ -704,7 +786,7 @@
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
- if ( ptr[j]==bcf_int32_missing ) { ptr[j]=0; continue; }
-- if ( ptr[j]<0 || ptr[j]>1 ) error("[%s:%d:%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),line->pos+1,ptr[j]);
-+ if ( ptr[j]<0 || ptr[j]>1 ) error("[%s:%"PRId64":%f] GP value outside range [0,1]; bcftools convert expects the VCF4.3+ spec for the GP field encoding genotype posterior probabilities", bcf_seqname(convert->header,line),(int64_t) line->pos+1,ptr[j]);
- sum+=ptr[j];
- }
- if ( j==line->n_allele )
-@@ -747,24 +829,24 @@
-
- int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
- if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT);
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<line->n_fmt; i++)
- if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; }
- if ( !fmt_gt )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99
- if ( line->n_allele > 100 )
-- error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Too many alleles (%d) at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( ks_resize(str, str->l+convert->nsamples*8) != 0 )
-- error("Could not alloc %"PRIu64" bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-+ error("Could not alloc %" PRIu64 " bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-
- if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid
-- error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, too many alleles (%d) or redundant BCF representation at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( fmt_gt->n!=1 && fmt_gt->n!=2 )
-- error("Uh, ploidy of %d not supported, see %s:%d\n", fmt_gt->n, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, ploidy of %d not supported, see %s:%"PRId64"\n", fmt_gt->n, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n;
- for (i=0; i<convert->nsamples; i++)
-@@ -901,22 +983,22 @@
-
- int i, gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
- if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,gt_id) )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( !(line->unpacked & BCF_UN_FMT) ) bcf_unpack(line, BCF_UN_FMT);
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<line->n_fmt; i++)
- if ( line->d.fmt[i].id==gt_id ) { fmt_gt = &line->d.fmt[i]; break; }
- if ( !fmt_gt )
-- error("FORMAT/GT tag not present at %s:%d\n", bcf_seqname(convert->header, line), line->pos+1);
-+ error("FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- // Alloc all memory in advance to avoid kput routines. The biggest allowed allele index is 99
- if ( line->n_allele > 100 )
-- error("Too many alleles (%d) at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Too many alleles (%d) at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
- if ( ks_resize(str, str->l+convert->nsamples*8) != 0 )
-- error("Could not alloc %"PRIu64" bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-+ error("Could not alloc %" PRIu64 " bytes\n", (uint64_t)(str->l + convert->nsamples*8));
-
- if ( fmt_gt->type!=BCF_BT_INT8 ) // todo: use BRANCH_INT if the VCF is valid
-- error("Uh, too many alleles (%d) or redundant BCF representation at %s:%d\n", line->n_allele, bcf_seqname(convert->header, line), line->pos+1);
-+ error("Uh, too many alleles (%d) or redundant BCF representation at %s:%"PRId64"\n", line->n_allele, bcf_seqname(convert->header, line),(int64_t) line->pos+1);
-
- int8_t *ptr = ((int8_t*) fmt_gt->p) - fmt_gt->n;
- for (i=0; i<convert->nsamples; i++)
-@@ -1022,6 +1104,91 @@
- str->s[--str->l] = 0; // delete the last space
- }
-
-+static void process_rsid_hex(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ char *ptr = line->d.id;
-+ ptr += 2; // remove 'rs'
-+ ksprintf(str, "%08" PRIx32 "", (uint32_t)strtoul(ptr, NULL, 10));
-+}
-+
-+static void process_variantkey_hex(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ uint64_t vk = variantkey(
-+ convert->header->id[BCF_DT_CTG][line->rid].key,
-+ strlen(convert->header->id[BCF_DT_CTG][line->rid].key),
-+ line->pos,
-+ line->d.allele[0],
-+ strlen(line->d.allele[0]),
-+ line->d.allele[1],
-+ strlen(line->d.allele[1]));
-+ ksprintf(str, "%016" PRIx64 "", vk);
-+}
-+
-+static void process_pbinom(convert_t *convert, bcf1_t *line, fmt_t *fmt, int isample, kstring_t *str)
-+{
-+ int i;
-+ if ( !fmt->ready )
-+ {
-+ fmt->fmt = NULL; // AD
-+ fmt->usr = NULL; // GT
-+
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ if ( line->d.fmt[i].id==fmt->id ) { fmt->fmt = &line->d.fmt[i]; break; }
-+
-+ // Check that the first field is GT
-+ int gt_id = bcf_hdr_id2int(convert->header, BCF_DT_ID, "GT");
-+ if ( !bcf_hdr_idinfo_exists(convert->header, BCF_HL_FMT, fmt->id) ) error("Error: FORMAT/GT is not defined in the header\n");
-+ for (i=0; i<(int)line->n_fmt; i++)
-+ if ( line->d.fmt[i].id==gt_id ) { fmt->usr = &line->d.fmt[i]; break; } // it should always be first according to VCF spec, but...
-+
-+ if ( fmt->usr && line->d.fmt[i].type!=BCF_BT_INT8 ) // skip sites with many alleles
-+ fmt->usr = NULL;
-+
-+ fmt->ready = 1;
-+ }
-+ bcf_fmt_t *gt_fmt = (bcf_fmt_t*) fmt->usr;
-+ if ( !fmt->fmt || !gt_fmt || gt_fmt->n!=2 ) goto invalid;
-+
-+ int n[2] = {0,0};
-+ int8_t *gt = (int8_t*)(gt_fmt->p + isample*gt_fmt->size);
-+ for (i=0; i<2; i++)
-+ {
-+ if ( bcf_gt_is_missing(gt[i]) || gt[i] == bcf_int8_vector_end ) goto invalid;
-+ int al = bcf_gt_allele(gt[i]);
-+ if ( al > line->n_allele || al >= fmt->fmt->n ) goto invalid;
-+
-+ #define BRANCH(type_t, missing, vector_end) { \
-+ type_t val = ((type_t *) fmt->fmt->p)[al + isample*fmt->fmt->n]; \
-+ if ( val==missing || val==vector_end ) goto invalid; \
-+ else n[i] = val; \
-+ }
-+ switch (fmt->fmt->type)
-+ {
-+ case BCF_BT_INT8: BRANCH(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: goto invalid; break;
-+ }
-+ #undef BRANCH
-+ }
-+
-+ if ( n[0]==n[1] ) kputc(n[0]==0 ? '.':'0', str);
-+ else
-+ {
-+ double pval = n[0] < n[1] ? kf_betai(n[1], n[0] + 1, 0.5) : kf_betai(n[0], n[1] + 1, 0.5);
-+ pval *= 2;
-+ assert( pval-1 < 1e-10 );
-+ if ( pval>=1 ) pval = 0; // this can happen, machine precision error, eg. kf_betai(1,0,0.5)
-+ else
-+ pval = -4.34294481903*log(pval);
-+ kputd(pval, str);
-+ }
-+ return;
-+
-+invalid:
-+ kputc('.', str);
-+}
-+
- static fmt_t *register_tag(convert_t *convert, int type, char *key, int is_gtf)
- {
- convert->nfmt++;
-@@ -1056,11 +1223,14 @@
- else if ( !strcmp("QUAL",key) ) { fmt->type = T_QUAL; }
- else if ( !strcmp("FILTER",key) ) { fmt->type = T_FILTER; }
- else if ( !strcmp("_CHROM_POS_ID",key) ) { fmt->type = T_CHROM_POS_ID; }
-- else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) )
-- {
-- fmt->type = T_INFO;
-- fprintf(bcftools_stderr,"Warning: Assuming INFO/%s\n", key);
-- }
-+ else if ( !strcmp("RSX",key) ) { fmt->type = T_RSX; }
-+ else if ( !strcmp("VKX",key) ) { fmt->type = T_VKX; }
-+ else if ( id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) ) { fmt->type = T_INFO; }
-+ }
-+ if ( fmt->type==T_PBINOM )
-+ {
-+ fmt->id = bcf_hdr_id2int(convert->header, BCF_DT_ID, fmt->key);
-+ if ( !bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT, fmt->id) ) error("No such FORMAT tag defined in the header: %s\n", fmt->key);
- }
- }
-
-@@ -1074,15 +1244,15 @@
- case T_CHROM: fmt->handler = &process_chrom; break;
- case T_POS: fmt->handler = &process_pos; break;
- case T_POS0: fmt->handler = &process_pos0; break;
-- case T_END: fmt->handler = &process_end; break;
-- case T_END0: fmt->handler = &process_end0; break;
-+ case T_END: fmt->handler = &process_end; convert->max_unpack |= BCF_UN_INFO; break;
-+ case T_END0: fmt->handler = &process_end0; convert->max_unpack |= BCF_UN_INFO; break;
- case T_ID: fmt->handler = &process_id; break;
- case T_REF: fmt->handler = &process_ref; break;
- case T_ALT: fmt->handler = &process_alt; break;
- case T_QUAL: fmt->handler = &process_qual; break;
- case T_FILTER: fmt->handler = &process_filter; convert->max_unpack |= BCF_UN_FLT; break;
- case T_INFO: fmt->handler = &process_info; convert->max_unpack |= BCF_UN_INFO; break;
-- case T_FORMAT: fmt->handler = &process_format; convert->max_unpack |= BCF_UN_FMT; break;
-+ case T_FORMAT: fmt->handler = fmt->key ? &process_format : &process_complete_format; convert->max_unpack |= BCF_UN_FMT; break;
- case T_SAMPLE: fmt->handler = &process_sample; break;
- case T_SEP: fmt->handler = &process_sep; break;
- case T_IS_TS: fmt->handler = &process_is_ts; break;
-@@ -1095,6 +1265,9 @@
- case T_GT_TO_HAP2: fmt->handler = &process_gt_to_hap2; convert->max_unpack |= BCF_UN_FMT; break;
- case T_TBCSQ: fmt->handler = &process_tbcsq; fmt->destroy = &destroy_tbcsq; convert->max_unpack |= BCF_UN_FMT; break;
- case T_LINE: fmt->handler = &process_line; convert->max_unpack |= BCF_UN_FMT; break;
-+ case T_RSX: fmt->handler = &process_rsid_hex; break;
-+ case T_VKX: fmt->handler = &process_variantkey_hex; break;
-+ case T_PBINOM: fmt->handler = &process_pbinom; convert->max_unpack |= BCF_UN_FMT; break;
- default: error("TODO: handler for type %d\n", fmt->type);
- }
- if ( key && fmt->type==T_INFO )
-@@ -1146,7 +1319,14 @@
- else if ( !strcmp(str.s, "IUPACGT") ) register_tag(convert, T_IUPAC_GT, "GT", is_gtf);
- else if ( !strcmp(str.s, "INFO") )
- {
-- if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str);
-+ if ( *q!='/' )
-+ {
-+ int id = bcf_hdr_id2int(convert->header, BCF_DT_ID, str.s);
-+ if ( bcf_hdr_idinfo_exists(convert->header,BCF_HL_INFO,id) )
-+ error("Could not parse format string \"%s\". Did you mean %%INFO/%s?\n", convert->format_str,str.s);
-+ else
-+ error("Could not parse format string: %s\n", convert->format_str);
-+ }
- p = ++q;
- str.l = 0;
- while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-@@ -1155,6 +1335,17 @@
- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
- fmt->subscript = parse_subscript(&q);
- }
-+ else if ( !strcmp(str.s,"PBINOM") )
-+ {
-+ if ( *q!='(' ) error("Could not parse the expression: %s\n", convert->format_str);
-+ p = ++q;
-+ str.l = 0;
-+ while ( *q && *q!=')' ) q++;
-+ if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-+ kputsn(p, q-p, &str);
-+ register_tag(convert, T_PBINOM, str.s, is_gtf);
-+ q++;
-+ }
- else
- {
- fmt_t *fmt = register_tag(convert, T_FORMAT, str.s, is_gtf);
-@@ -1189,17 +1380,26 @@
- else if ( !strcmp(str.s, "_GP_TO_PROB3") ) register_tag(convert, T_GP_TO_PROB3, str.s, is_gtf);
- else if ( !strcmp(str.s, "_GT_TO_HAP") ) register_tag(convert, T_GT_TO_HAP, str.s, is_gtf);
- else if ( !strcmp(str.s, "_GT_TO_HAP2") ) register_tag(convert, T_GT_TO_HAP2, str.s, is_gtf);
-+ else if ( !strcmp(str.s, "RSX") ) register_tag(convert, T_RSX, str.s, is_gtf);
-+ else if ( !strcmp(str.s, "VKX") ) register_tag(convert, T_VKX, str.s, is_gtf);
-+ else if ( !strcmp(str.s,"pbinom") ) error("Error: pbinom() is currently supported only with FORMAT tags. (todo)\n");
- else if ( !strcmp(str.s, "INFO") )
- {
-- if ( *q!='/' ) error("Could not parse format string: %s\n", convert->format_str);
-- p = ++q;
-- str.l = 0;
-- while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-- if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-- kputsn(p, q-p, &str);
-- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-- fmt->subscript = parse_subscript(&q);
-+ if ( *q=='/' )
-+ {
-+ p = ++q;
-+ str.l = 0;
-+ while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-+ if ( q-p==0 ) error("Could not parse format string: %s\n", convert->format_str);
-+ kputsn(p, q-p, &str);
-+ fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-+ fmt->subscript = parse_subscript(&q);
-+ }
-+ else
-+ register_tag(convert, T_INFO, NULL, is_gtf); // the whole INFO
- }
-+ else if ( !strcmp(str.s, "FORMAT") )
-+ register_tag(convert, T_FORMAT, NULL, 0);
- else
- {
- fmt_t *fmt = register_tag(convert, T_INFO, str.s, is_gtf);
-@@ -1338,7 +1538,15 @@
- int convert_line(convert_t *convert, bcf1_t *line, kstring_t *str)
- {
- if ( !convert->allow_undef_tags && convert->undef_info_tag )
-- error("Error: no such tag defined in the VCF header: INFO/%s. FORMAT fields must be in square brackets, e.g. \"[ %s]\"\n", convert->undef_info_tag,convert->undef_info_tag);
-+ {
-+ kstring_t msg = {0,0,0};
-+ ksprintf(&msg,"Error: no such tag defined in the VCF header: INFO/%s", convert->undef_info_tag);
-+
-+ int hdr_id = bcf_hdr_id2int(convert->header,BCF_DT_ID,convert->undef_info_tag);
-+ if ( hdr_id>=0 && bcf_hdr_idinfo_exists(convert->header,BCF_HL_FMT,hdr_id) )
-+ ksprintf(&msg,". FORMAT fields must be enclosed in square brackets, e.g. \"[ %%%s]\"", convert->undef_info_tag);
-+ error("%s\n", msg.s);
-+ }
-
- int l_ori = str->l;
- bcf_unpack(line, convert->max_unpack);
-@@ -1359,7 +1567,7 @@
- for (js=0; js<convert->nsamples; js++)
- {
- // Skip samples when filtering was requested
-- if ( *convert->subset_samples && !(*convert->subset_samples)[js] ) continue;
-+ if ( convert->subset_samples && *convert->subset_samples && !(*convert->subset_samples)[js] ) continue;
-
- // Here comes a hack designed for TBCSQ. When running on large files,
- // such as 1000GP, there are too many empty fields in the output and
---- python-pysam.orig/bcftools/csq.c
-+++ python-pysam/bcftools/csq.c
-@@ -1,3 +1,6 @@
-+//$bt csq -f $ref -g $gff -p r -Ou -o /dev/null /lustre/scratch116/vr/projects/g1k/phase3/release/ALL.chr4.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
-+
-+
- /* The MIT License
-
- Copyright (c) 2016-2018 Genome Research Ltd.
-@@ -25,6 +28,7 @@
- */
- /*
- Things that would be nice to have
-+ - dynamic N_REF_PAD
- - for stop-lost events (also in frameshifts) report the number of truncated aa's
- - memory could be greatly reduced by indexing gff (but it is quite compact already)
- - deletions that go beyond transcript boundaries are not checked at sequence level
-@@ -95,6 +99,7 @@
- splice_region_variant .. change within 1-3 bases of the exon or 3-8 bases of the intron
- synonymous_variant .. DNA sequence variant resulting in no amino acid change
- stop_retained_variant .. different stop codon
-+ start_retained_variant .. start codon retained by indel realignment
- non_coding_variant .. variant in non-coding sequence, such as RNA gene
- 5_prime_UTR_variant
- 3_prime_UTR_variant
-@@ -133,6 +138,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
-@@ -142,7 +148,6 @@
- #include <htslib/faidx.h>
- #include <errno.h>
- #include <unistd.h>
--#include <stdint.h>
- #include <ctype.h>
- #include "bcftools.h"
- #include "filter.h"
-@@ -208,13 +213,15 @@
- #define CSQ_UPSTREAM_STOP (1<<19) // adds * in front of the csq string
- #define CSQ_INCOMPLETE_CDS (1<<20) // to remove START/STOP in incomplete CDS, see ENSG00000173376/synon.vcf
- #define CSQ_CODING_SEQUENCE (1<<21) // cannot tell exactly what it is, but it does affect the coding sequence
-+#define CSQ_ELONGATION (1<<22) // symbolic insertion
-+#define CSQ_START_RETAINED (1<<23)
-
- // Haplotype-aware consequences, printed in one vcf record only, the rest has a reference @12345
- #define CSQ_COMPOUND (CSQ_SYNONYMOUS_VARIANT|CSQ_MISSENSE_VARIANT|CSQ_STOP_LOST|CSQ_STOP_GAINED| \
- CSQ_INFRAME_DELETION|CSQ_INFRAME_INSERTION|CSQ_FRAMESHIFT_VARIANT| \
- CSQ_START_LOST|CSQ_STOP_RETAINED|CSQ_INFRAME_ALTERING|CSQ_INCOMPLETE_CDS| \
-- CSQ_UPSTREAM_STOP)
--#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST)
-+ CSQ_UPSTREAM_STOP|CSQ_START_RETAINED)
-+#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST|CSQ_START_RETAINED)
-
- #define CSQ_PRN_STRAND(csq) ((csq)&CSQ_COMPOUND && !((csq)&(CSQ_SPLICE_ACCEPTOR|CSQ_SPLICE_DONOR|CSQ_SPLICE_REGION)))
- #define CSQ_PRN_TSCRIPT (~(CSQ_INTRON|CSQ_NON_CODING))
-@@ -244,7 +251,9 @@
- "inframe_altering",
- NULL,
- NULL,
-- "coding_sequence"
-+ "coding_sequence",
-+ "feature_elongation",
-+ "start_retained"
- };
-
-
-@@ -339,7 +348,7 @@
- typedef struct
- {
- char *name; // human readable name, e.g. ORF45
-- uint8_t iseq;
-+ uint32_t iseq;
- }
- gf_gene_t;
- typedef struct
-@@ -392,7 +401,8 @@
- {
- bcf1_t *line;
- uint32_t *smpl; // bitmask of sample consequences with first/second haplotype interleaved
-- uint32_t nfmt:4, nvcsq:28, mvcsq;
-+ uint32_t nfmt:4, // the bitmask size (the number of integers per sample)
-+ nvcsq:28, mvcsq;
- vcsq_t *vcsq; // there can be multiple consequences for a single VCF record
- }
- vrec_t;
-@@ -408,6 +418,7 @@
- {
- vrec_t **vrec; // buffer of VCF lines with the same position
- int n, m;
-+ uint32_t keep_until; // the maximum transcript end position
- };
- KHASH_MAP_INIT_INT(pos2vbuf, vbuf_t*)
-
-@@ -580,9 +591,10 @@
- char *outdir, **argv, *fa_fname, *gff_fname, *output_fname;
- char *bcsq_tag;
- int argc, output_type;
-- int phase, quiet, local_csq;
-+ int phase, verbosity, local_csq, record_cmd_line;
- int ncsq_max, nfmt_bcsq; // maximum number of csq per site that can be accessed from FORMAT/BCSQ
- int ncsq_small_warned;
-+ int brief_predictions;
-
- int rid; // current chromosome
- tr_heap_t *active_tr; // heap of active transcripts for quick flushing
-@@ -596,6 +608,7 @@
- int ncsq_buf, mcsq_buf;
- id_tbl_t tscript_ids; // mapping between transcript id (eg. Zm00001d027245_T001) and a numeric idx
- int force; // force run under various conditions. Currently only to skip out-of-phase transcripts
-+ int n_threads; // extra compression/decompression threads
-
- faidx_t *fai;
- kstring_t str, str2;
-@@ -671,7 +684,7 @@
- aux->seq[aux->nseq] = strdup(chr_beg);
- iseq = khash_str2int_inc(aux->seq2int, aux->seq[aux->nseq]);
- aux->nseq++;
-- assert( aux->nseq < 256 ); // see gf_gene_t.iseq
-+ assert( aux->nseq < 1<<29 ); // see gf_gene_t.iseq and ftr_t.iseq
- }
- chr_end[1] = c;
- return iseq;
-@@ -886,7 +899,7 @@
- int biotype = gff_parse_biotype(ss);
- if ( biotype <= 0 )
- {
-- if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(stderr,"ignored transcript: %s\n",line);
-+ if ( !gff_ignored_biotype(args, ss) && args->verbosity > 0 ) fprintf(stderr,"ignored transcript: %s\n",line);
- return;
- }
-
-@@ -912,7 +925,7 @@
- int biotype = gff_parse_biotype(ss);
- if ( biotype <= 0 )
- {
-- if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(stderr,"ignored gene: %s\n",line);
-+ if ( !gff_ignored_biotype(args, ss) && args->verbosity > 0 ) fprintf(stderr,"ignored gene: %s\n",line);
- return;
- }
-
-@@ -978,7 +991,7 @@
- if ( !ss ) return -1; // no ID, ignore the line
- if ( !strncmp("chromosome",ss+3,10) ) return -1;
- if ( !strncmp("supercontig",ss+3,11) ) return -1;
-- if ( args->quiet<2 ) fprintf(stderr,"ignored: %s\n", line);
-+ if ( args->verbosity > 0 ) fprintf(stderr,"ignored: %s\n", line);
- return -1;
- }
-
-@@ -1000,7 +1013,7 @@
- // 7. column: strand
- if ( *ss == '+' ) ftr->strand = STRAND_FWD;
- else if ( *ss == '-' ) ftr->strand = STRAND_REV;
-- else { if ( args->quiet<2 ) fprintf(stderr,"Skipping unknown strand: %c\n", *ss); return -1; }
-+ else { if ( args->verbosity > 0 ) fprintf(stderr,"Skipping unknown strand: %c\n", *ss); return -1; }
- ss += 2;
-
- // 8. column: phase (codon offset)
-@@ -1008,7 +1021,7 @@
- else if ( *ss == '1' ) ftr->phase = 1;
- else if ( *ss == '2' ) ftr->phase = 2;
- else if ( *ss == '.' ) ftr->phase = 0; // exons do not have phase
-- else { if ( args->quiet<2 ) fprintf(stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; }
-+ else { if ( args->verbosity > 0 ) fprintf(stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; }
- ss += 2;
-
- // substring search for "Parent=transcript:ENST00000437963"
-@@ -1122,7 +1135,7 @@
- {
- if ( args->force )
- {
-- if ( args->quiet < 2 )
-+ if ( args->verbosity > 0 )
- fprintf(stderr,"Warning: GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len);
- tscript_ok = 0;
- break;
-@@ -1160,7 +1173,7 @@
- {
- if ( args->force )
- {
-- if ( args->quiet < 2 )
-+ if ( args->verbosity > 0 )
- fprintf(stderr,"Warning: GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len);
- tscript_ok = 0;
- break;
-@@ -1293,7 +1306,7 @@
- }
- tscript_init_cds(args);
-
-- if ( !args->quiet )
-+ if ( args->verbosity > 0 )
- {
- fprintf(stderr,"Indexed %d transcripts, %d exons, %d CDSs, %d UTRs\n",
- regidx_nregs(args->idx_tscript),
-@@ -1309,14 +1322,16 @@
- free(aux->seq);
- gff_id_destroy(&aux->gene_ids);
-
-- if ( args->quiet<2 && khash_str2int_size(aux->ignored_biotypes) )
-+ if ( args->verbosity > 0 && khash_str2int_size(aux->ignored_biotypes) )
- {
- khash_t(str2int) *ign = (khash_t(str2int)*)aux->ignored_biotypes;
- fprintf(stderr,"Ignored the following biotypes:\n");
- for (i = kh_begin(ign); i < kh_end(ign); i++)
- {
- if ( !kh_exist(ign,i)) continue;
-- fprintf(stderr,"\t%dx\t.. %s\n", kh_value(ign,i), kh_key(ign,i));
-+ const char *biotype = kh_key(ign,i);
-+ if ( !strcmp(biotype,"TCE") ) biotype = "TCE (\"To be Experimentally Confirmed\")";
-+ fprintf(stderr,"\t%dx\t.. %s\n", kh_value(ign,i), biotype);
- }
- }
- khash_str2int_destroy_free(aux->ignored_biotypes);
-@@ -1326,7 +1341,7 @@
- {
- args->nfmt_bcsq = 1 + (args->ncsq_max - 1) / 32;
-
-- if ( !args->quiet ) fprintf(stderr,"Parsing %s ...\n", args->gff_fname);
-+ if ( args->verbosity > 0 ) fprintf(stderr,"Parsing %s ...\n", args->gff_fname);
- init_gff(args);
-
- args->rid = -1;
-@@ -1349,7 +1364,8 @@
- if ( args->output_type==FT_TAB_TEXT )
- {
- // significant speedup for plain VCFs
-- bcf_hdr_set_samples(args->hdr,NULL,0);
-+ if (bcf_hdr_set_samples(args->hdr,NULL,0) < 0)
-+ error_errno("[%s] Couldn't build sample filter", __func__);
- }
- args->phase = PHASE_DROP_GT;
- }
-@@ -1360,7 +1376,7 @@
- if ( args->output_type==FT_TAB_TEXT )
- {
- args->out = args->output_fname ? fopen(args->output_fname,"w") : stdout;
-- if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname,strerror(errno));
-+ if ( !args->out ) error("Failed to write to %s: %s\n", !strcmp("-",args->output_fname)?"standard output":args->output_fname,strerror(errno));
-
- fprintf(args->out,"# This file was produced by: bcftools +csq(%s+htslib-%s)\n", bcftools_version(),hts_version());
- fprintf(args->out,"# The command line was:\tbcftools +%s", args->argv[0]);
-@@ -1380,14 +1396,16 @@
- else
- {
- args->out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno));
-- bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq");
-- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=.,Type=String,Description=\"%s consequence annotation from BCFtools/csq. Format: '[*]consequence|gene|transcript|biotype[|strand|amino_acid_change|dna_change]' or, for consequences of variants split across multiple sites, a pointer to the record storing the consequences '@position'. '*' prefix indicates a consequence downstream from a stop \">",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware");
-+ if ( args->out_fh == NULL ) error("[%s] Error: cannot write to %s: %s\n", __func__,args->output_fname? args->output_fname : "standard output", strerror(errno));
-+ if ( args->n_threads > 0)
-+ hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->sr->p);
-+ if ( args->record_cmd_line ) bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq");
-+ bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=.,Type=String,Description=\"%s consequence annotation from BCFtools/csq, see http://samtools.github.io/bcftools/howtos/csq-calling.html for details. Format: Consequence|gene|transcript|biotype|strand|amino_acid_change|dna_change\">",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware");
- if ( args->hdr_nsmpl )
- bcf_hdr_printf(args->hdr,"##FORMAT=<ID=%s,Number=.,Type=Integer,Description=\"Bitmask of indexes to INFO/BCSQ, with interleaved first/second haplotype. Use \\\"bcftools query -f'[%%CHROM\\t%%POS\\t%%SAMPLE\\t%%TBCSQ\\n]'\\\" to translate.\">",args->bcsq_tag);
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
- }
-- if ( !args->quiet ) fprintf(stderr,"Calling...\n");
-+ if ( args->verbosity > 0 ) fprintf(stderr,"Calling...\n");
- }
-
- void destroy_data(args_t *args)
-@@ -1487,6 +1505,7 @@
- splice->vcf.pos = rec->pos;
- splice->vcf.rlen = rec->rlen;
- splice->vcf.ref = rec->d.allele[0];
-+ splice->csq = 0;
- }
- static inline void splice_build_hap(splice_t *splice, uint32_t beg, int len)
- {
-@@ -1594,7 +1613,7 @@
- #endif
- }
- void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec);
--static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid)
-+static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid, uint32_t type)
- {
- while ( regitr_overlap(itr) )
- {
-@@ -1604,7 +1623,7 @@
- csq_t csq;
- memset(&csq, 0, sizeof(csq_t));
- csq.pos = rec->pos;
-- csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3;
-+ csq.type.type = (utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3) | type;
- csq.type.biotype = tr->type;
- csq.type.strand = tr->strand;
- csq.type.trid = tr->id;
-@@ -1658,7 +1677,7 @@
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg+1,splice->ref_beg+1, itr) ) // adjacent utr
- {
-- ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- if ( ret!=0 )
- {
- regitr_destroy(itr);
-@@ -1696,7 +1715,7 @@
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_end-1,splice->ref_end-1, itr) ) // adjacent utr
- {
-- ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- if ( ret!=0 )
- {
- regitr_destroy(itr);
-@@ -1763,14 +1782,105 @@
- return SPLICE_INSIDE;
- }
-
-+int shifted_del_synonymous(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
-+{
-+ static int small_ref_padding_warned = 0;
-+ tscript_t *tr = splice->tr;
-+
-+ // We know the VCF record overlaps the exon, but does it overlap the start codon?
-+ if ( tr->strand==STRAND_REV && splice->vcf.pos + splice->vcf.rlen + 2 <= ex_end ) return 0;
-+ if ( tr->strand==STRAND_FWD && splice->vcf.pos >= ex_beg + 3 ) return 0;
-+
-+#if XDBG
-+ fprintf(stderr,"shifted_del_synonymous: %d-%d %s\n",ex_beg,ex_end, tr->strand==STRAND_FWD?"fwd":"rev");
-+ fprintf(stderr," %d .. %s > %s\n",splice->vcf.pos+1,splice->vcf.ref,splice->vcf.alt);
-+#endif
-+
-+ // is there enough ref sequence for the extension? All coordinates are 0-based
-+ int ref_len = strlen(splice->vcf.ref);
-+ int alt_len = strlen(splice->vcf.alt);
-+ assert( ref_len > alt_len );
-+ int ndel = ref_len - alt_len;
-+
-+ if ( tr->strand==STRAND_REV )
-+ {
-+ int32_t vcf_ref_end = splice->vcf.pos + ref_len - 1; // end pos of the VCF REF allele
-+ int32_t tr_ref_end = splice->tr->end + N_REF_PAD; // the end pos of accessible cached ref seq
-+ if ( vcf_ref_end + ndel > tr_ref_end )
-+ {
-+ if ( !small_ref_padding_warned )
-+ {
-+ fprintf(stderr,"Warning: Could not verify synonymous start/stop at %s:%d due to small N_REF_PAD. (Improve me?)\n",bcf_seqname(args->hdr,splice->vcf.rec),splice->vcf.pos+1);
-+ small_ref_padding_warned = 1;
-+ }
-+ return 0;
-+ }
-+
-+ char *ptr_vcf = splice->vcf.ref + alt_len; // the first deleted base in the VCF REF allele
-+ char *ptr_ref = splice->tr->ref + N_REF_PAD + (vcf_ref_end + 1 - splice->tr->beg); // the first ref base after the ndel bases deleted
-+#if XDBG
-+ fprintf(stderr,"vcf: %s\nref: %s\n",ptr_vcf,ptr_ref);
-+#endif
-+ int i = 0;
-+ while ( ptr_vcf[i] && ptr_vcf[i]==ptr_ref[i] ) i++;
-+ if ( ptr_vcf[i] ) return 0; // the deleted sequence cannot be replaced
-+ }
-+ else
-+ {
-+ // STRAND_FWD
-+ int32_t vcf_block_beg = splice->vcf.pos + ref_len - 2*ndel; // the position of the first base of the ref block that could potentially replace the deletion
-+ if ( vcf_block_beg < 0 ) return 0;
-+
-+#if XDBG
-+ fprintf(stderr,"vcf_block_beg: %d\n",vcf_block_beg+1);
-+#endif
-+
-+ if ( N_REF_PAD + vcf_block_beg < ex_beg )
-+ {
-+ if ( !small_ref_padding_warned )
-+ {
-+ fprintf(stderr,"Warning: Could not verify synonymous start/stop at %s:%d due to small N_REF_PAD. (Improve me?)\n",bcf_seqname(args->hdr,splice->vcf.rec),splice->vcf.pos+1);
-+ small_ref_padding_warned = 1;
-+ }
-+ return 0;
-+ }
-+
-+ char *ptr_vcf = splice->vcf.ref + alt_len; // the first deleted base in the VCF REF allele
-+ char *ptr_ref = splice->tr->ref + N_REF_PAD + vcf_block_beg - splice->tr->beg; // the replacement ref block
-+#if XDBG
-+ fprintf(stderr,"vcf: %s\nref: %s\n",ptr_vcf,ptr_ref);
-+#endif
-+
-+ int i = 0;
-+ while ( ptr_vcf[i] && ptr_vcf[i]==ptr_ref[i] ) i++;
-+ if ( ptr_vcf[i] ) return 0; // the deleted sequence cannot be replaced
-+ }
-+
-+ return 1;
-+}
-+
- static inline int splice_csq_del(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
- {
-+ if ( splice->check_start )
-+ {
-+ // check for synonymous start
-+ // test/csq/ENST00000375992/incorrect-synon-del-not-start-lost.txt
-+ // test/csq/ENST00000368801.2/start-lost.txt
-+ // test/csq/ENST00000318249.2/synonymous-start-lost.txt
-+ int is_synonymous = shifted_del_synonymous(args, splice, ex_beg, ex_end);
-+ if ( is_synonymous )
-+ {
-+ splice->csq |= CSQ_START_RETAINED;
-+ return SPLICE_OVERLAP;
-+ }
-+ }
-+
- // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG
- splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; // 1b before the deleted base
- splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; // the last deleted base
-
- #if XDBG
--fprintf(stderr,"del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end);
-+fprintf(stderr,"splice_csq_del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end);
- #endif
-
- if ( splice->ref_beg + 1 < ex_beg ) // the part before the exon; ref_beg is off by -1
-@@ -1783,7 +1893,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1839,7 +1949,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1874,7 +1984,6 @@
- csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq);
- return SPLICE_OUTSIDE;
- }
--
- if ( splice->ref_beg < ex_beg + 2 ) // ref_beg is off by -1
- {
- if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION;
-@@ -1929,7 +2038,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1959,7 +2068,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -2008,7 +2117,6 @@
- }
- static inline int splice_csq(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
- {
-- splice->csq = 0;
- splice->vcf.alen = strlen(splice->vcf.alt);
-
- int rlen1 = splice->vcf.rlen - 1, alen1 = splice->vcf.alen - 1, i = 0;
-@@ -2038,6 +2146,7 @@
- return 0;
- }
-
-+
- // return value: 0 added, 1 overlapping variant, 2 silent discard (intronic,alt=ref)
- int hap_init(args_t *args, hap_node_t *parent, hap_node_t *child, gf_cds_t *cds, bcf1_t *rec, int ial)
- {
-@@ -2070,7 +2179,7 @@
- if ( child->icds!=tr->ncds-1 ) splice.check_region_end = 1;
-
- #if XDBG
--fprintf(stderr,"\n%d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop);
-+fprintf(stderr,"\nhap_init: %d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop);
- #endif
- int ret = splice_csq(args, &splice, cds->beg, cds->beg + cds->len - 1);
- #if XDBG
-@@ -2078,7 +2187,7 @@
- #endif
-
- if ( ret==SPLICE_VAR_REF ) return 2; // not a variant, eg REF=CA ALT=CA
-- if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP ) // not a coding csq
-+ if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP || splice.csq==CSQ_START_LOST ) // not a coding csq
- {
- free(splice.kref.s);
- free(splice.kalt.s);
-@@ -2136,6 +2245,8 @@
- if ( len < 0 ) // overlapping variants
- {
- free(str.s);
-+ free(splice.kref.s);
-+ free(splice.kalt.s);
- return 1;
- }
- kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str);
-@@ -2173,6 +2284,7 @@
- if ( !child->csq ) child->csq |= CSQ_CODING_SEQUENCE; // hack, specifically for ENST00000390520/deletion-overlap.vcf
- }
-
-+
- free(splice.kref.s);
- free(splice.kalt.s);
- return 0;
-@@ -2206,7 +2318,7 @@
- void cds_translate(kstring_t *_ref, kstring_t *_seq, uint32_t sbeg, uint32_t rbeg, uint32_t rend, int strand, kstring_t *tseq, int fill)
- {
- #if XDBG
--fprintf(stderr,"translate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l);
-+fprintf(stderr,"\ntranslate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l);
- #endif
- char tmp[3], *codon, *end;
- int i, len, npad;
-@@ -2306,7 +2418,7 @@
- #if DBG>1
- fprintf(stderr," npad: %d\n",npad);
- #endif
--if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(stderr,"sbeg=%d seq.l=%d seq.m=%d\n",sbeg,(int)seq.l,(int)seq.m);
-+ if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(stderr,"sbeg=%d seq.l=%d seq.m=%d npad=%d\n",sbeg,(int)seq.l,(int)seq.m,npad);
- assert( npad>=0 && sbeg+seq.l+npad<=seq.m ); // todo: first codon on the rev strand
-
- if ( npad==2 )
-@@ -2327,8 +2439,8 @@
- for (; i>=0 && end>seq.s; i--) tmp[i] = *(--end);
- #if DBG>1
- fprintf(stderr,"\t i=%d\n", i);
-- if(i==1)fprintf(stderr,"[0] %c\n",tmp[2]);
-- if(i==0)fprintf(stderr,"[0] %c%c\n",tmp[1],tmp[2]);
-+ if(i==1)fprintf(stderr,"[0] %c\n",tmp[2]);
-+ if(i==0)fprintf(stderr,"[0] %c%c\n",tmp[1],tmp[2]);
- #endif
- if ( i==-1 )
- {
-@@ -2569,12 +2681,25 @@
- kputs(csq->vstr.s, str);
- }
-
-+void kprint_aa_prediction(args_t *args, int beg, kstring_t *aa, kstring_t *str)
-+{
-+ if ( !args->brief_predictions )
-+ kputs(aa->s, str);
-+ else
-+ {
-+ int len = aa->l;
-+ if ( aa->s[len-1]=='*' ) len--;
-+ kputc(aa->s[0], str);
-+ kputs("..", str);
-+ kputw(beg+len, str);
-+ }
-+}
-+
- void hap_add_csq(args_t *args, hap_t *hap, hap_node_t *node, int tlen, int ibeg, int iend, int dlen, int indel)
- {
- int i;
- tscript_t *tr = hap->tr;
- int ref_node = tr->strand==STRAND_FWD ? ibeg : iend;
--
- int icsq = node->ncsq_list++;
- hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list);
- csq_t *csq = &node->csq_list[icsq];
-@@ -2678,12 +2803,12 @@
- int aa_sbeg = tr->strand==STRAND_FWD ? node2sbeg(ibeg)/3+1 : (tlen - node2send(iend))/3+1;
- kputc_('|', &str);
- kputw(aa_rbeg, &str);
-- kputs(hap->tref.s, &str);
-+ kprint_aa_prediction(args,aa_rbeg,&hap->tref,&str);
- if ( !(csq->type.type & CSQ_SYNONYMOUS_VARIANT) )
- {
- kputc_('>', &str);
- kputw(aa_sbeg, &str);
-- kputs(hap->tseq.s, &str);
-+ kprint_aa_prediction(args,aa_sbeg,&hap->tseq,&str);
- }
- kputc_('|', &str);
-
-@@ -2961,18 +3086,15 @@
- int icsq = 2*csq->idx + ihap;
- if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT
- {
-- int print_warning = 1;
-- if ( args->quiet )
-+ if ( args->verbosity && (!args->ncsq_small_warned || args->verbosity > 1) )
- {
-- if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0;
-+ fprintf(stderr,
-+ "Warning: Too many consequences for sample %s at %s:%"PRId64", keeping the first %d and skipping the rest.\n",
-+ args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),(int64_t) vrec->line->pos+1,csq->idx);
-+ if ( !args->ncsq_small_warned )
-+ fprintf(stderr," The limit can be increased by setting the --ncsq parameter. This warning is printed only once.\n");
- args->ncsq_small_warned = 1;
- }
-- if ( print_warning )
-- {
-- fprintf(stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n",
-- args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1);
-- if ( args->quiet ) fprintf(stderr,"(This warning is printed only once)\n");
-- }
- break;
- }
- if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32;
-@@ -2984,12 +3106,10 @@
- {
- int i,j;
- tr_heap_t *heap = args->active_tr;
--
- while ( heap->ndat && heap->dat[0]->end<=pos )
- {
- tscript_t *tr = heap->dat[0];
- khp_delete(trhp, heap);
--
- args->hap->tr = tr;
- if ( tr->root && tr->root->nchild ) // normal, non-localized calling
- {
-@@ -3028,7 +3148,7 @@
-
- #define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; }
-
--void vbuf_push(args_t *args, bcf1_t **rec_ptr)
-+vbuf_t *vbuf_push(args_t *args, bcf1_t **rec_ptr)
- {
- int i;
-
-@@ -3044,6 +3164,7 @@
- i = rbuf_append(&args->vcf_rbuf);
- if ( !args->vcf_buf[i] ) args->vcf_buf[i] = (vbuf_t*) calloc(1,sizeof(vbuf_t));
- args->vcf_buf[i]->n = 0;
-+ args->vcf_buf[i]->keep_until = 0;
- }
- vbuf_t *vbuf = args->vcf_buf[i];
- vbuf->n++;
-@@ -3063,16 +3184,29 @@
- int ret;
- khint_t k = kh_put(pos2vbuf, args->pos2vbuf, (int)rec->pos, &ret);
- kh_val(args->pos2vbuf,k) = vbuf;
-+
-+ return vbuf;
- }
-
--void vbuf_flush(args_t *args)
-+void vbuf_flush(args_t *args, uint32_t pos)
- {
-- if ( args->active_tr->ndat ) return; // cannot output buffered VCF lines (args.vbuf) until all active transcripts are gone
--
- int i,j;
-- while ( (i=rbuf_shift(&args->vcf_rbuf))>=0 )
-+ while ( args->vcf_rbuf.n )
- {
-- vbuf_t *vbuf = args->vcf_buf[i];
-+ vbuf_t *vbuf;
-+ if ( !args->local_csq && args->active_tr->ndat )
-+ {
-+ // check if the first active transcript starts beyond the first buffered VCF record,
-+ // cannot output buffered VCF lines (args.vbuf) until the active transcripts are gone
-+ vbuf = args->vcf_buf[ args->vcf_rbuf.f ];
-+ if ( vbuf->keep_until > pos ) break;
-+ assert( vbuf->n );
-+ }
-+
-+ i = rbuf_shift(&args->vcf_rbuf);
-+ assert( i>=0 );
-+ vbuf = args->vcf_buf[i];
-+ int pos = vbuf->n ? vbuf->vrec[0]->line->pos : -1;
- for (i=0; i<vbuf->n; i++)
- {
- vrec_t *vrec = vbuf->vrec[i];
-@@ -3083,7 +3217,10 @@
- }
- if ( !vrec->nvcsq )
- {
-- bcf_write(args->out_fh, args->hdr, vrec->line);
-+ if ( bcf_write(args->out_fh, args->hdr, vrec->line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
-+ int save_pos = vrec->line->pos;
-+ bcf_empty(vrec->line);
-+ vrec->line->pos = save_pos; // this is necessary for compound variants
- continue;
- }
-
-@@ -3098,19 +3235,24 @@
- if ( args->hdr_nsmpl )
- {
- if ( vrec->nfmt < args->nfmt_bcsq )
-- for (j=1; j<args->hdr_nsmpl; j++) memcpy(vrec->smpl+j*vrec->nfmt, vrec->smpl+j*args->nfmt_bcsq, vrec->nfmt*sizeof(*vrec->smpl));
-+ for (j=1; j<args->hdr_nsmpl; j++)
-+ memmove(&vrec->smpl[j*vrec->nfmt], &vrec->smpl[j*args->nfmt_bcsq], vrec->nfmt*sizeof(*vrec->smpl));
- bcf_update_format_int32(args->hdr, vrec->line, args->bcsq_tag, vrec->smpl, args->hdr_nsmpl*vrec->nfmt);
- }
- vrec->nvcsq = 0;
-- bcf_write(args->out_fh, args->hdr, vrec->line);
-+ if ( bcf_write(args->out_fh, args->hdr, vrec->line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
-+ int save_pos = vrec->line->pos;
-+ bcf_empty(vrec->line);
-+ vrec->line->pos = save_pos;
- }
-- if ( vbuf->n )
-+ if ( pos!=-1 )
- {
-- khint_t k = kh_get(pos2vbuf, args->pos2vbuf, vbuf->vrec[0]->line->pos);
-+ khint_t k = kh_get(pos2vbuf, args->pos2vbuf, pos);
- if ( k != kh_end(args->pos2vbuf) ) kh_del(pos2vbuf, args->pos2vbuf, k);
- }
- vbuf->n = 0;
- }
-+ if ( args->active_tr->ndat ) return;
-
- for (i=0; i<args->nrm_tr; i++)
- {
-@@ -3137,10 +3279,12 @@
- int pad_end = len - (tr->end - tr->beg + 1 + pad_beg);
- if ( pad_beg + pad_end != 2*N_REF_PAD )
- {
-- char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD);
-+ char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD + 1);
- for (i=0; i < N_REF_PAD - pad_beg; i++) ref[i] = 'N';
- memcpy(ref+i, tr->ref, len);
-+ len += i;
- for (i=0; i < N_REF_PAD - pad_end; i++) ref[i+len] = 'N';
-+ ref[i+len] = 0;
- free(tr->ref);
- tr->ref = ref;
- }
-@@ -3148,15 +3292,19 @@
-
- static void sanity_check_ref(args_t *args, tscript_t *tr, bcf1_t *rec)
- {
-- char *ref = tr->ref + (rec->pos + N_REF_PAD >= tr->beg ? rec->pos - tr->beg + N_REF_PAD : 0);
-- char *vcf = rec->d.allele[0] + (rec->pos + N_REF_PAD >= tr->beg ? 0 : tr->beg - N_REF_PAD - rec->pos);
-- assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) );
-- while ( *ref && *vcf )
-- {
-- if ( *ref!=*vcf && toupper(*ref)!=toupper(*vcf) )
-- error("Error: the fasta reference does not match the VCF REF allele at %s:%d .. %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,rec->d.allele[0]);
-- ref++;
-- vcf++;
-+ int vbeg = 0;
-+ int rbeg = rec->pos - tr->beg + N_REF_PAD;
-+ if ( rbeg < 0 ) { vbeg += abs(rbeg); rbeg = 0; }
-+ char *ref = tr->ref + rbeg;
-+ char *vcf = rec->d.allele[0] + vbeg;
-+ assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) && ref - tr->ref < tr->end - tr->beg + 2*N_REF_PAD );
-+ int i = 0;
-+ while ( ref[i] && vcf[i] )
-+ {
-+ if ( ref[i]!=vcf[i] && toupper(ref[i])!=toupper(vcf[i]) )
-+ error("Error: the fasta reference does not match the VCF REF allele at %s:%"PRId64" .. fasta=%c vcf=%c\n",
-+ bcf_seqname(args->hdr,rec),(int64_t) rec->pos+vbeg+1,ref[i],vcf[i]);
-+ i++;
- }
- }
-
-@@ -3195,6 +3343,7 @@
-
- for (i=1; i<rec->n_allele; i++)
- {
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- if ( hap_init(args, &root, &node, cds, rec, i)!=0 ) continue;
-
- csq_t csq;
-@@ -3294,12 +3443,12 @@
- int aa_sbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD + node.dlen - node.sbeg - alen)/3+1;
- kputc_('|', &str);
- kputw(aa_rbeg, &str);
-- kputs(tref->s, &str);
-+ kprint_aa_prediction(args,aa_rbeg,tref,&str);
- if ( !(csq_type & CSQ_SYNONYMOUS_VARIANT) )
- {
- kputc_('>', &str);
- kputw(aa_sbeg, &str);
-- kputs(tseq->s, &str);
-+ kprint_aa_prediction(args,aa_sbeg,tseq,&str);
- }
- kputc_('|', &str);
- kputw(rec->pos+1, &str);
-@@ -3330,8 +3479,10 @@
- return ret;
- }
-
--int test_cds(args_t *args, bcf1_t *rec)
-+int test_cds(args_t *args, bcf1_t *rec, vbuf_t *vbuf)
- {
-+ static int overlaps_warned = 0, multiploid_warned = 0;
-+
- int i, ret = 0, hap_ret;
- const char *chr = bcf_seqname(args->hdr,rec);
- // note that the off-by-one extension of rlen is deliberate to account for insertions
-@@ -3341,6 +3492,7 @@
- gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*);
- tscript_t *tr = cds->tr;
- if ( !GF_is_coding(tr->type) ) continue;
-+ if ( vbuf->keep_until < tr->end ) vbuf->keep_until = tr->end;
- ret = 1;
- if ( !tr->root )
- {
-@@ -3370,10 +3522,17 @@
- // overlapping or intron variant, cannot apply
- if ( hap_ret==1 )
- {
-- if ( !args->quiet )
-- fprintf(stderr,"Warning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( args->verbosity && (!overlaps_warned || args->verbosity > 1) )
-+ {
-+ fprintf(stderr,
-+ "Warning: Skipping overlapping variants at %s:%"PRId64"\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( !overlaps_warned )
-+ fprintf(stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ overlaps_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%"PRId64"\t%s>%s\n", chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
- }
- else ret = 1; // prevent reporting as intron in test_tscript
- hap_destroy(child);
-@@ -3409,10 +3568,17 @@
- ngts /= bcf_hdr_nsamples(args->hdr);
- if ( ngts!=1 && ngts!=2 )
- {
-- if ( !args->quiet )
-- fprintf(stderr,"Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( args->verbosity && (!multiploid_warned || args->verbosity > 1) )
-+ {
-+ fprintf(stderr,
-+ "Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%"PRId64"\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( !multiploid_warned )
-+ fprintf(stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ multiploid_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%"PRId64"\t%s>%s\n", chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
- continue;
- }
- for (ismpl=0; ismpl<args->smpl->n; ismpl++)
-@@ -3429,7 +3595,7 @@
- if ( !bcf_gt_is_phased(gt[0]) && !bcf_gt_is_phased(gt[1]) )
- {
- if ( args->phase==PHASE_REQUIRE )
-- error("Unphased heterozygous genotype at %s:%d, sample %s. See the --phase option.\n", chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]);
-+ error("Unphased heterozygous genotype at %s:%"PRId64", sample %s. See the --phase option.\n", chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]);
- if ( args->phase==PHASE_SKIP )
- continue;
- if ( args->phase==PHASE_NON_REF )
-@@ -3468,12 +3634,18 @@
- // overlapping or intron variant, cannot apply
- if ( hap_ret==1 )
- {
-- if ( !args->quiet )
-- fprintf(stderr,"Warning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n",
-- chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ if ( args->verbosity && (!overlaps_warned || args->verbosity > 1) )
-+ {
-+ fprintf(stderr,
-+ "Warning: Skipping overlapping variants at %s:%"PRId64", sample %s\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ if ( !overlaps_warned )
-+ fprintf(stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ overlaps_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n",
-- chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%"PRId64", sample %s\t%s>%s\n",
-+ chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
- }
- hap_destroy(child);
- continue;
-@@ -3559,19 +3731,15 @@
- if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT
- {
- int ismpl = args->smpl->idx[i];
-- int print_warning = 1;
-- if ( args->quiet )
-+ if ( args->verbosity && (!args->ncsq_small_warned || args->verbosity > 1) )
- {
-- if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0;
-+ fprintf(stderr,
-+ "Warning: Too many consequences for sample %s at %s:%"PRId64", keeping the first %d and skipping the rest.\n",
-+ args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),(int64_t) vrec->line->pos+1,icsq+1);
-+ if ( !args->ncsq_small_warned )
-+ fprintf(stderr," The limit can be increased by setting the --ncsq parameter. This warning is printed only once.\n");
- args->ncsq_small_warned = 1;
- }
-- if ( print_warning )
-- {
-- fprintf(stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n",
-- args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1);
-- if ( args->quiet ) fprintf(stderr,"(This warning is printed only once)\n");
-- }
-- break;
- }
- if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32;
- vrec->smpl[i*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32);
-@@ -3594,8 +3762,9 @@
- tscript_t *tr = splice.tr = utr->tr;
- for (i=1; i<rec->n_allele; i++)
- {
-- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- int splice_ret = splice_csq(args, &splice, utr->beg, utr->end);
- if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue;
- csq_t csq;
-@@ -3637,6 +3806,7 @@
- {
- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- splice_csq(args, &splice, exon->beg, exon->end);
- if ( splice.csq ) ret = 1;
- }
-@@ -3659,8 +3829,9 @@
- tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*);
- for (i=1; i<rec->n_allele; i++)
- {
-- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- int splice_ret = splice_csq(args, &splice, tr->beg, tr->end);
- if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF
- csq_t csq;
-@@ -3680,22 +3851,151 @@
- return ret;
- }
-
--void process(args_t *args, bcf1_t **rec_ptr)
-+void test_symbolic_alt(args_t *args, bcf1_t *rec)
-+{
-+ static int warned = 0;
-+ if ( args->verbosity && (!warned && args->verbosity > 0) )
-+ {
-+ fprintf(stderr,"Warning: The support for symbolic ALT insertions is experimental.\n");
-+ warned = 1;
-+ }
-+
-+ const char *chr = bcf_seqname(args->hdr,rec);
-+
-+ // only insertions atm
-+ int beg = rec->pos + 1;
-+ int end = beg;
-+ int csq_class = CSQ_ELONGATION;
-+
-+ int hit = 0;
-+ if ( regidx_overlap(args->idx_cds,chr,beg,end, args->itr) )
-+ {
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*);
-+ tscript_t *tr = cds->tr;
-+ csq.type.type = (GF_is_coding(tr->type) ? CSQ_CODING_SEQUENCE : CSQ_NON_CODING) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ hit = 1;
-+ }
-+ }
-+ if ( regidx_overlap(args->idx_utr,chr,beg,end, args->itr) )
-+ {
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ gf_utr_t *utr = regitr_payload(args->itr, gf_utr_t*);
-+ tscript_t *tr = utr->tr;
-+ csq.type.type = (utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ hit = 1;
-+ }
-+ }
-+ if ( regidx_overlap(args->idx_exon,chr,beg,end, args->itr) )
-+ {
-+ splice_t splice;
-+ splice_init(&splice, rec);
-+ splice.check_acceptor = splice.check_donor = 1;
-+
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ gf_exon_t *exon = regitr_payload(args->itr, gf_exon_t*);
-+ splice.tr = exon->tr;
-+ if ( !splice.tr->ncds ) continue; // not a coding transcript, no interest in splice sites
-+ splice.check_region_beg = splice.tr->beg==exon->beg ? 0 : 1;
-+ splice.check_region_end = splice.tr->end==exon->end ? 0 : 1;
-+ splice.vcf.alt = rec->d.allele[1];
-+ splice.csq = csq_class;
-+ splice_csq(args, &splice, exon->beg, exon->end);
-+ if ( splice.csq ) hit = 1;
-+ }
-+ }
-+ if ( !hit && regidx_overlap(args->idx_tscript,chr,beg,end, args->itr) )
-+ {
-+ splice_t splice;
-+ splice_init(&splice, rec);
-+
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*);
-+ splice.vcf.alt = rec->d.allele[1];
-+ splice.csq = csq_class;
-+ int splice_ret = splice_csq(args, &splice, tr->beg, tr->end);
-+ if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF
-+ csq.type.type = (GF_is_coding(tr->type) ? CSQ_INTRON : CSQ_NON_CODING) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ }
-+ }
-+}
-+
-+void debug_print_buffers(args_t *args, int pos)
-+{
-+ int i,j;
-+ fprintf(stderr,"debug_print_buffers at %d\n", pos);
-+ fprintf(stderr,"vbufs:\n");
-+ for (i=0; i<args->vcf_rbuf.n; i++)
-+ {
-+ int k = rbuf_kth(&args->vcf_rbuf, i);
-+ vbuf_t *vbuf = args->vcf_buf[k];
-+
-+ fprintf(stderr,"\tvbuf %d:\n", i);
-+ for (j=0; j<vbuf->n; j++)
-+ {
-+ vrec_t *vrec = vbuf->vrec[j];
-+ fprintf(stderr,"\t\t%"PRId64" .. nvcsq=%d\n", (int64_t) vrec->line->pos+1, vrec->nvcsq);
-+ }
-+ }
-+ fprintf(stderr,"pos2vbuf:");
-+ khint_t k;
-+ for (k = 0; k < kh_end(args->pos2vbuf); ++k)
-+ if (kh_exist(args->pos2vbuf, k)) fprintf(stderr," %d",1+(int)kh_key(args->pos2vbuf, k));
-+ fprintf(stderr,"\n");
-+ fprintf(stderr,"active_tr: %d\n", args->active_tr->ndat);
-+}
-+
-+static void process(args_t *args, bcf1_t **rec_ptr)
- {
- if ( !rec_ptr )
- {
- hap_flush(args, REGIDX_MAX);
-- vbuf_flush(args);
-+ vbuf_flush(args, REGIDX_MAX);
- return;
- }
-
- bcf1_t *rec = *rec_ptr;
-+ static int32_t prev_rid = -1, prev_pos = -1;
-+ if ( prev_rid!=rec->rid ) { prev_rid = rec->rid; prev_pos = rec->pos; }
-+ if ( prev_pos > rec->pos )
-+ error("Error: The file is not sorted, %s:%d comes before %s:%"PRId64"\n",bcf_seqname(args->hdr,rec),prev_pos+1,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-
- int call_csq = 1;
-- if ( !rec->n_allele ) call_csq = 0; // no alternate allele
-- else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*') ) call_csq = 0; // gVCF, no alt allele
-- else if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][0]!='*') call_csq = 0; // a symbolic allele, not ready for CNVs etc
-- else if ( args->filter )
-+ if ( rec->n_allele < 2 ) call_csq = 0; // no alternate allele
-+ else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='*' || rec->d.allele[1][1]=='*') ) call_csq = 0; // gVCF, not an alt allele
-+ else if ( rec->d.allele[1][0]=='<' )
-+ {
-+ if ( strncmp("<INS",rec->d.allele[1], 4) ) call_csq = 0; // only <INS[:.*]> is supported at the moment
-+ }
-+ if ( call_csq && args->filter )
- {
- call_csq = filter_test(args->filter, rec, NULL);
- if ( args->filter_logic==FLT_EXCLUDE ) call_csq = call_csq ? 0 : 1;
-@@ -3704,25 +4004,34 @@
- {
- if ( !args->out_fh ) return; // not a VCF output
- vbuf_push(args, rec_ptr);
-- vbuf_flush(args);
-+ hap_flush(args, rec->pos-1);
-+ vbuf_flush(args, rec->pos-1);
- return;
- }
-
- if ( args->rid != rec->rid )
- {
- hap_flush(args, REGIDX_MAX);
-- vbuf_flush(args);
-+ vbuf_flush(args, REGIDX_MAX);
- }
- args->rid = rec->rid;
-- vbuf_push(args, rec_ptr);
-+ vbuf_t *vbuf = vbuf_push(args, rec_ptr);
-
-- int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec);
-- hit += test_utr(args, rec);
-- hit += test_splice(args, rec);
-- if ( !hit ) test_tscript(args, rec);
-+ if ( rec->d.allele[1][0]!='<' )
-+ {
-+ int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec, vbuf);
-+ hit += test_utr(args, rec);
-+ hit += test_splice(args, rec);
-+ if ( !hit ) test_tscript(args, rec);
-+ }
-+ else
-+ test_symbolic_alt(args, rec);
-
-- hap_flush(args, rec->pos-1);
-- vbuf_flush(args);
-+ if ( rec->pos > 0 )
-+ {
-+ hap_flush(args, rec->pos-1);
-+ vbuf_flush(args, rec->pos-1);
-+ }
-
- return;
- }
-@@ -3739,6 +4048,7 @@
- " -g, --gff-annot <file> gff3 annotation file\n"
- "\n"
- "CSQ options:\n"
-+ " -b, --brief-predictions annotate with abbreviated protein-changing predictions\n"
- " -c, --custom-tag <string> use this tag instead of the default BCSQ\n"
- " -l, --local-csq localized predictions, consider only one VCF record at a time\n"
- " -n, --ncsq <int> maximum number of consequences to consider per site [16]\n"
-@@ -3752,16 +4062,18 @@
- " -e, --exclude <expr> exclude sites for which the expression is true\n"
- " --force run even if some sanity checks fail\n"
- " -i, --include <expr> select sites for which the expression is true\n"
-+ " --no-version do not append version and command line to the header\n"
- " -o, --output <file> write output to a file [standard output]\n"
- " -O, --output-type <b|u|z|v|t> b: compressed BCF, u: uncompressed BCF, z: compressed VCF\n"
- " v: uncompressed VCF, t: plain tab-delimited text output [v]\n"
-- " -q, --quiet suppress warning messages. Can be given two times for even less messages\n"
- " -r, --regions <region> restrict to comma-separated list of regions\n"
- " -R, --regions-file <file> restrict to regions listed in a file\n"
- " -s, --samples <-|list> samples to include or \"-\" to apply all variants and ignore samples\n"
- " -S, --samples-file <file> samples to include\n"
- " -t, --targets <region> similar to -r but streams rather than index-jumps\n"
- " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n"
-+ " --threads <int> use multithreading with <int> worker threads [0]\n"
-+ " -v, --verbose <int> verbosity level 0-2 [1]\n"
- "\n"
- "Example:\n"
- " bcftools csq -f hs37d5.fa -g Homo_sapiens.GRCh37.82.gff3.gz in.vcf\n"
-@@ -3779,12 +4091,16 @@
- args->output_type = FT_VCF;
- args->bcsq_tag = "BCSQ";
- args->ncsq_max = 2*16;
-+ args->verbosity = 1;
-+ args->record_cmd_line = 1;
-
- static struct option loptions[] =
- {
- {"force",0,0,1},
-+ {"threads",required_argument,NULL,2},
- {"help",0,0,'h'},
- {"ncsq",1,0,'n'},
-+ {"brief-predictions",0,0,'b'},
- {"custom-tag",1,0,'c'},
- {"local-csq",0,0,'l'},
- {"gff-annot",1,0,'g'},
-@@ -3795,24 +4111,36 @@
- {"output-type",1,NULL,'O'},
- {"phase",1,0,'p'},
- {"quiet",0,0,'q'},
-+ {"verbose",1,0,'v'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
- {"samples",1,0,'s'},
- {"samples-file",1,0,'S'},
- {"targets",1,0,'t'},
- {"targets-file",1,0,'T'},
-+ {"no-version",no_argument,NULL,3},
- {0,0,0,0}
- };
- int c, targets_is_file = 0, regions_is_file = 0;
-- char *targets_list = NULL, *regions_list = NULL;
-- while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:",loptions,NULL)) >= 0)
-+ char *targets_list = NULL, *regions_list = NULL, *tmp;
-+ while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:bv:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 1 : args->force = 1; break;
-+ case 2 :
-+ args->n_threads = strtol(optarg,&tmp,10);
-+ if ( *tmp ) error("Could not parse argument: --threads %s\n", optarg);
-+ break;
-+ case 3 : args->record_cmd_line = 0; break;
-+ case 'b': args->brief_predictions = 1; break;
- case 'l': args->local_csq = 1; break;
- case 'c': args->bcsq_tag = optarg; break;
-- case 'q': args->quiet++; break;
-+ case 'q': error("Error: the -q option has been deprecated, use -v, --verbose instead.\n"); break;
-+ case 'v':
-+ args->verbosity = atoi(optarg);
-+ if ( args->verbosity<0 || args->verbosity>2 ) error("Error: expected integer 0-2 with -v, --verbose\n");
-+ break;
- case 'p':
- switch (optarg[0])
- {
-@@ -3869,8 +4197,9 @@
- error("Failed to read the targets: %s\n", targets_list);
- if ( regions_list && bcf_sr_set_regions(args->sr, regions_list, regions_is_file)<0 )
- error("Failed to read the regions: %s\n", regions_list);
-+ if ( bcf_sr_set_threads(args->sr, args->n_threads)<0 ) error("Failed to create %d extra threads\n", args->n_threads);
- if ( !bcf_sr_add_reader(args->sr, fname) )
-- error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->sr->errnum));
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
-
- init_data(args);
-@@ -3883,7 +4212,6 @@
- destroy_data(args);
- bcf_sr_destroy(args->sr);
- free(args);
--
- return 0;
- }
-
---- python-pysam.orig/bcftools/csq.c.pysam.c
-+++ python-pysam/bcftools/csq.c.pysam.c
-@@ -1,5 +1,8 @@
- #include "bcftools.pysam.h"
-
-+//$bt csq -f $ref -g $gff -p r -Ou -o /dev/null /lustre/scratch116/vr/projects/g1k/phase3/release/ALL.chr4.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
-+
-+
- /* The MIT License
-
- Copyright (c) 2016-2018 Genome Research Ltd.
-@@ -27,6 +30,7 @@
- */
- /*
- Things that would be nice to have
-+ - dynamic N_REF_PAD
- - for stop-lost events (also in frameshifts) report the number of truncated aa's
- - memory could be greatly reduced by indexing gff (but it is quite compact already)
- - deletions that go beyond transcript boundaries are not checked at sequence level
-@@ -97,6 +101,7 @@
- splice_region_variant .. change within 1-3 bases of the exon or 3-8 bases of the intron
- synonymous_variant .. DNA sequence variant resulting in no amino acid change
- stop_retained_variant .. different stop codon
-+ start_retained_variant .. start codon retained by indel realignment
- non_coding_variant .. variant in non-coding sequence, such as RNA gene
- 5_prime_UTR_variant
- 3_prime_UTR_variant
-@@ -135,6 +140,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
-@@ -144,7 +150,6 @@
- #include <htslib/faidx.h>
- #include <errno.h>
- #include <unistd.h>
--#include <stdint.h>
- #include <ctype.h>
- #include "bcftools.h"
- #include "filter.h"
-@@ -210,13 +215,15 @@
- #define CSQ_UPSTREAM_STOP (1<<19) // adds * in front of the csq string
- #define CSQ_INCOMPLETE_CDS (1<<20) // to remove START/STOP in incomplete CDS, see ENSG00000173376/synon.vcf
- #define CSQ_CODING_SEQUENCE (1<<21) // cannot tell exactly what it is, but it does affect the coding sequence
-+#define CSQ_ELONGATION (1<<22) // symbolic insertion
-+#define CSQ_START_RETAINED (1<<23)
-
- // Haplotype-aware consequences, printed in one vcf record only, the rest has a reference @12345
- #define CSQ_COMPOUND (CSQ_SYNONYMOUS_VARIANT|CSQ_MISSENSE_VARIANT|CSQ_STOP_LOST|CSQ_STOP_GAINED| \
- CSQ_INFRAME_DELETION|CSQ_INFRAME_INSERTION|CSQ_FRAMESHIFT_VARIANT| \
- CSQ_START_LOST|CSQ_STOP_RETAINED|CSQ_INFRAME_ALTERING|CSQ_INCOMPLETE_CDS| \
-- CSQ_UPSTREAM_STOP)
--#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST)
-+ CSQ_UPSTREAM_STOP|CSQ_START_RETAINED)
-+#define CSQ_START_STOP (CSQ_STOP_LOST|CSQ_STOP_GAINED|CSQ_STOP_RETAINED|CSQ_START_LOST|CSQ_START_RETAINED)
-
- #define CSQ_PRN_STRAND(csq) ((csq)&CSQ_COMPOUND && !((csq)&(CSQ_SPLICE_ACCEPTOR|CSQ_SPLICE_DONOR|CSQ_SPLICE_REGION)))
- #define CSQ_PRN_TSCRIPT (~(CSQ_INTRON|CSQ_NON_CODING))
-@@ -246,7 +253,9 @@
- "inframe_altering",
- NULL,
- NULL,
-- "coding_sequence"
-+ "coding_sequence",
-+ "feature_elongation",
-+ "start_retained"
- };
-
-
-@@ -341,7 +350,7 @@
- typedef struct
- {
- char *name; // human readable name, e.g. ORF45
-- uint8_t iseq;
-+ uint32_t iseq;
- }
- gf_gene_t;
- typedef struct
-@@ -394,7 +403,8 @@
- {
- bcf1_t *line;
- uint32_t *smpl; // bitmask of sample consequences with first/second haplotype interleaved
-- uint32_t nfmt:4, nvcsq:28, mvcsq;
-+ uint32_t nfmt:4, // the bitmask size (the number of integers per sample)
-+ nvcsq:28, mvcsq;
- vcsq_t *vcsq; // there can be multiple consequences for a single VCF record
- }
- vrec_t;
-@@ -410,6 +420,7 @@
- {
- vrec_t **vrec; // buffer of VCF lines with the same position
- int n, m;
-+ uint32_t keep_until; // the maximum transcript end position
- };
- KHASH_MAP_INIT_INT(pos2vbuf, vbuf_t*)
-
-@@ -582,9 +593,10 @@
- char *outdir, **argv, *fa_fname, *gff_fname, *output_fname;
- char *bcsq_tag;
- int argc, output_type;
-- int phase, quiet, local_csq;
-+ int phase, verbosity, local_csq, record_cmd_line;
- int ncsq_max, nfmt_bcsq; // maximum number of csq per site that can be accessed from FORMAT/BCSQ
- int ncsq_small_warned;
-+ int brief_predictions;
-
- int rid; // current chromosome
- tr_heap_t *active_tr; // heap of active transcripts for quick flushing
-@@ -598,6 +610,7 @@
- int ncsq_buf, mcsq_buf;
- id_tbl_t tscript_ids; // mapping between transcript id (eg. Zm00001d027245_T001) and a numeric idx
- int force; // force run under various conditions. Currently only to skip out-of-phase transcripts
-+ int n_threads; // extra compression/decompression threads
-
- faidx_t *fai;
- kstring_t str, str2;
-@@ -673,7 +686,7 @@
- aux->seq[aux->nseq] = strdup(chr_beg);
- iseq = khash_str2int_inc(aux->seq2int, aux->seq[aux->nseq]);
- aux->nseq++;
-- assert( aux->nseq < 256 ); // see gf_gene_t.iseq
-+ assert( aux->nseq < 1<<29 ); // see gf_gene_t.iseq and ftr_t.iseq
- }
- chr_end[1] = c;
- return iseq;
-@@ -888,7 +901,7 @@
- int biotype = gff_parse_biotype(ss);
- if ( biotype <= 0 )
- {
-- if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(bcftools_stderr,"ignored transcript: %s\n",line);
-+ if ( !gff_ignored_biotype(args, ss) && args->verbosity > 0 ) fprintf(bcftools_stderr,"ignored transcript: %s\n",line);
- return;
- }
-
-@@ -914,7 +927,7 @@
- int biotype = gff_parse_biotype(ss);
- if ( biotype <= 0 )
- {
-- if ( !gff_ignored_biotype(args, ss) && args->quiet<2 ) fprintf(bcftools_stderr,"ignored gene: %s\n",line);
-+ if ( !gff_ignored_biotype(args, ss) && args->verbosity > 0 ) fprintf(bcftools_stderr,"ignored gene: %s\n",line);
- return;
- }
-
-@@ -980,7 +993,7 @@
- if ( !ss ) return -1; // no ID, ignore the line
- if ( !strncmp("chromosome",ss+3,10) ) return -1;
- if ( !strncmp("supercontig",ss+3,11) ) return -1;
-- if ( args->quiet<2 ) fprintf(bcftools_stderr,"ignored: %s\n", line);
-+ if ( args->verbosity > 0 ) fprintf(bcftools_stderr,"ignored: %s\n", line);
- return -1;
- }
-
-@@ -1002,7 +1015,7 @@
- // 7. column: strand
- if ( *ss == '+' ) ftr->strand = STRAND_FWD;
- else if ( *ss == '-' ) ftr->strand = STRAND_REV;
-- else { if ( args->quiet<2 ) fprintf(bcftools_stderr,"Skipping unknown strand: %c\n", *ss); return -1; }
-+ else { if ( args->verbosity > 0 ) fprintf(bcftools_stderr,"Skipping unknown strand: %c\n", *ss); return -1; }
- ss += 2;
-
- // 8. column: phase (codon offset)
-@@ -1010,7 +1023,7 @@
- else if ( *ss == '1' ) ftr->phase = 1;
- else if ( *ss == '2' ) ftr->phase = 2;
- else if ( *ss == '.' ) ftr->phase = 0; // exons do not have phase
-- else { if ( args->quiet<2 ) fprintf(bcftools_stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; }
-+ else { if ( args->verbosity > 0 ) fprintf(bcftools_stderr,"Skipping unknown phase: %c, %s\n", *ss, line); return -1; }
- ss += 2;
-
- // substring search for "Parent=transcript:ENST00000437963"
-@@ -1124,7 +1137,7 @@
- {
- if ( args->force )
- {
-- if ( args->quiet < 2 )
-+ if ( args->verbosity > 0 )
- fprintf(bcftools_stderr,"Warning: GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len);
- tscript_ok = 0;
- break;
-@@ -1162,7 +1175,7 @@
- {
- if ( args->force )
- {
-- if ( args->quiet < 2 )
-+ if ( args->verbosity > 0 )
- fprintf(bcftools_stderr,"Warning: GFF3 assumption failed for transcript %s, CDS=%d: phase!=len%%3 (phase=%d, len=%d)\n",args->tscript_ids.str[tr->id],tr->cds[i]->beg+1,phase,len);
- tscript_ok = 0;
- break;
-@@ -1295,7 +1308,7 @@
- }
- tscript_init_cds(args);
-
-- if ( !args->quiet )
-+ if ( args->verbosity > 0 )
- {
- fprintf(bcftools_stderr,"Indexed %d transcripts, %d exons, %d CDSs, %d UTRs\n",
- regidx_nregs(args->idx_tscript),
-@@ -1311,14 +1324,16 @@
- free(aux->seq);
- gff_id_destroy(&aux->gene_ids);
-
-- if ( args->quiet<2 && khash_str2int_size(aux->ignored_biotypes) )
-+ if ( args->verbosity > 0 && khash_str2int_size(aux->ignored_biotypes) )
- {
- khash_t(str2int) *ign = (khash_t(str2int)*)aux->ignored_biotypes;
- fprintf(bcftools_stderr,"Ignored the following biotypes:\n");
- for (i = kh_begin(ign); i < kh_end(ign); i++)
- {
- if ( !kh_exist(ign,i)) continue;
-- fprintf(bcftools_stderr,"\t%dx\t.. %s\n", kh_value(ign,i), kh_key(ign,i));
-+ const char *biotype = kh_key(ign,i);
-+ if ( !strcmp(biotype,"TCE") ) biotype = "TCE (\"To be Experimentally Confirmed\")";
-+ fprintf(bcftools_stderr,"\t%dx\t.. %s\n", kh_value(ign,i), biotype);
- }
- }
- khash_str2int_destroy_free(aux->ignored_biotypes);
-@@ -1328,7 +1343,7 @@
- {
- args->nfmt_bcsq = 1 + (args->ncsq_max - 1) / 32;
-
-- if ( !args->quiet ) fprintf(bcftools_stderr,"Parsing %s ...\n", args->gff_fname);
-+ if ( args->verbosity > 0 ) fprintf(bcftools_stderr,"Parsing %s ...\n", args->gff_fname);
- init_gff(args);
-
- args->rid = -1;
-@@ -1351,7 +1366,8 @@
- if ( args->output_type==FT_TAB_TEXT )
- {
- // significant speedup for plain VCFs
-- bcf_hdr_set_samples(args->hdr,NULL,0);
-+ if (bcf_hdr_set_samples(args->hdr,NULL,0) < 0)
-+ error_errno("[%s] Couldn't build sample filter", __func__);
- }
- args->phase = PHASE_DROP_GT;
- }
-@@ -1362,7 +1378,7 @@
- if ( args->output_type==FT_TAB_TEXT )
- {
- args->out = args->output_fname ? fopen(args->output_fname,"w") : bcftools_stdout;
-- if ( !args->out ) error("Failed to open %s: %s\n", args->output_fname,strerror(errno));
-+ if ( !args->out ) error("Failed to write to %s: %s\n", !strcmp("-",args->output_fname)?"standard output":args->output_fname,strerror(errno));
-
- fprintf(args->out,"# This file was produced by: bcftools +csq(%s+htslib-%s)\n", bcftools_version(),hts_version());
- fprintf(args->out,"# The command line was:\tbcftools +%s", args->argv[0]);
-@@ -1382,14 +1398,16 @@
- else
- {
- args->out_fh = hts_open(args->output_fname? args->output_fname : "-",hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno));
-- bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq");
-- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=.,Type=String,Description=\"%s consequence annotation from BCFtools/csq. Format: '[*]consequence|gene|transcript|biotype[|strand|amino_acid_change|dna_change]' or, for consequences of variants split across multiple sites, a pointer to the record storing the consequences '@position'. '*' prefix indicates a consequence downstream from a stop \">",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware");
-+ if ( args->out_fh == NULL ) error("[%s] Error: cannot write to %s: %s\n", __func__,args->output_fname? args->output_fname : "standard output", strerror(errno));
-+ if ( args->n_threads > 0)
-+ hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->sr->p);
-+ if ( args->record_cmd_line ) bcf_hdr_append_version(args->hdr,args->argc,args->argv,"bcftools/csq");
-+ bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=.,Type=String,Description=\"%s consequence annotation from BCFtools/csq, see http://samtools.github.io/bcftools/howtos/csq-calling.html for details. Format: Consequence|gene|transcript|biotype|strand|amino_acid_change|dna_change\">",args->bcsq_tag, args->local_csq ? "Local" : "Haplotype-aware");
- if ( args->hdr_nsmpl )
- bcf_hdr_printf(args->hdr,"##FORMAT=<ID=%s,Number=.,Type=Integer,Description=\"Bitmask of indexes to INFO/BCSQ, with interleaved first/second haplotype. Use \\\"bcftools query -f'[%%CHROM\\t%%POS\\t%%SAMPLE\\t%%TBCSQ\\n]'\\\" to translate.\">",args->bcsq_tag);
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
- }
-- if ( !args->quiet ) fprintf(bcftools_stderr,"Calling...\n");
-+ if ( args->verbosity > 0 ) fprintf(bcftools_stderr,"Calling...\n");
- }
-
- void destroy_data(args_t *args)
-@@ -1489,6 +1507,7 @@
- splice->vcf.pos = rec->pos;
- splice->vcf.rlen = rec->rlen;
- splice->vcf.ref = rec->d.allele[0];
-+ splice->csq = 0;
- }
- static inline void splice_build_hap(splice_t *splice, uint32_t beg, int len)
- {
-@@ -1596,7 +1615,7 @@
- #endif
- }
- void csq_stage(args_t *args, csq_t *csq, bcf1_t *rec);
--static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid)
-+static inline int csq_stage_utr(args_t *args, regitr_t *itr, bcf1_t *rec, uint32_t trid, uint32_t type)
- {
- while ( regitr_overlap(itr) )
- {
-@@ -1606,7 +1625,7 @@
- csq_t csq;
- memset(&csq, 0, sizeof(csq_t));
- csq.pos = rec->pos;
-- csq.type.type = utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3;
-+ csq.type.type = (utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3) | type;
- csq.type.biotype = tr->type;
- csq.type.strand = tr->strand;
- csq.type.trid = tr->id;
-@@ -1660,7 +1679,7 @@
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg+1,splice->ref_beg+1, itr) ) // adjacent utr
- {
-- ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- if ( ret!=0 )
- {
- regitr_destroy(itr);
-@@ -1698,7 +1717,7 @@
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_end-1,splice->ref_end-1, itr) ) // adjacent utr
- {
-- ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ ret = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- if ( ret!=0 )
- {
- regitr_destroy(itr);
-@@ -1765,14 +1784,105 @@
- return SPLICE_INSIDE;
- }
-
-+int shifted_del_synonymous(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
-+{
-+ static int small_ref_padding_warned = 0;
-+ tscript_t *tr = splice->tr;
-+
-+ // We know the VCF record overlaps the exon, but does it overlap the start codon?
-+ if ( tr->strand==STRAND_REV && splice->vcf.pos + splice->vcf.rlen + 2 <= ex_end ) return 0;
-+ if ( tr->strand==STRAND_FWD && splice->vcf.pos >= ex_beg + 3 ) return 0;
-+
-+#if XDBG
-+ fprintf(bcftools_stderr,"shifted_del_synonymous: %d-%d %s\n",ex_beg,ex_end, tr->strand==STRAND_FWD?"fwd":"rev");
-+ fprintf(bcftools_stderr," %d .. %s > %s\n",splice->vcf.pos+1,splice->vcf.ref,splice->vcf.alt);
-+#endif
-+
-+ // is there enough ref sequence for the extension? All coordinates are 0-based
-+ int ref_len = strlen(splice->vcf.ref);
-+ int alt_len = strlen(splice->vcf.alt);
-+ assert( ref_len > alt_len );
-+ int ndel = ref_len - alt_len;
-+
-+ if ( tr->strand==STRAND_REV )
-+ {
-+ int32_t vcf_ref_end = splice->vcf.pos + ref_len - 1; // end pos of the VCF REF allele
-+ int32_t tr_ref_end = splice->tr->end + N_REF_PAD; // the end pos of accessible cached ref seq
-+ if ( vcf_ref_end + ndel > tr_ref_end )
-+ {
-+ if ( !small_ref_padding_warned )
-+ {
-+ fprintf(bcftools_stderr,"Warning: Could not verify synonymous start/stop at %s:%d due to small N_REF_PAD. (Improve me?)\n",bcf_seqname(args->hdr,splice->vcf.rec),splice->vcf.pos+1);
-+ small_ref_padding_warned = 1;
-+ }
-+ return 0;
-+ }
-+
-+ char *ptr_vcf = splice->vcf.ref + alt_len; // the first deleted base in the VCF REF allele
-+ char *ptr_ref = splice->tr->ref + N_REF_PAD + (vcf_ref_end + 1 - splice->tr->beg); // the first ref base after the ndel bases deleted
-+#if XDBG
-+ fprintf(bcftools_stderr,"vcf: %s\nref: %s\n",ptr_vcf,ptr_ref);
-+#endif
-+ int i = 0;
-+ while ( ptr_vcf[i] && ptr_vcf[i]==ptr_ref[i] ) i++;
-+ if ( ptr_vcf[i] ) return 0; // the deleted sequence cannot be replaced
-+ }
-+ else
-+ {
-+ // STRAND_FWD
-+ int32_t vcf_block_beg = splice->vcf.pos + ref_len - 2*ndel; // the position of the first base of the ref block that could potentially replace the deletion
-+ if ( vcf_block_beg < 0 ) return 0;
-+
-+#if XDBG
-+ fprintf(bcftools_stderr,"vcf_block_beg: %d\n",vcf_block_beg+1);
-+#endif
-+
-+ if ( N_REF_PAD + vcf_block_beg < ex_beg )
-+ {
-+ if ( !small_ref_padding_warned )
-+ {
-+ fprintf(bcftools_stderr,"Warning: Could not verify synonymous start/stop at %s:%d due to small N_REF_PAD. (Improve me?)\n",bcf_seqname(args->hdr,splice->vcf.rec),splice->vcf.pos+1);
-+ small_ref_padding_warned = 1;
-+ }
-+ return 0;
-+ }
-+
-+ char *ptr_vcf = splice->vcf.ref + alt_len; // the first deleted base in the VCF REF allele
-+ char *ptr_ref = splice->tr->ref + N_REF_PAD + vcf_block_beg - splice->tr->beg; // the replacement ref block
-+#if XDBG
-+ fprintf(bcftools_stderr,"vcf: %s\nref: %s\n",ptr_vcf,ptr_ref);
-+#endif
-+
-+ int i = 0;
-+ while ( ptr_vcf[i] && ptr_vcf[i]==ptr_ref[i] ) i++;
-+ if ( ptr_vcf[i] ) return 0; // the deleted sequence cannot be replaced
-+ }
-+
-+ return 1;
-+}
-+
- static inline int splice_csq_del(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
- {
-+ if ( splice->check_start )
-+ {
-+ // check for synonymous start
-+ // test/csq/ENST00000375992/incorrect-synon-del-not-start-lost.txt
-+ // test/csq/ENST00000368801.2/start-lost.txt
-+ // test/csq/ENST00000318249.2/synonymous-start-lost.txt
-+ int is_synonymous = shifted_del_synonymous(args, splice, ex_beg, ex_end);
-+ if ( is_synonymous )
-+ {
-+ splice->csq |= CSQ_START_RETAINED;
-+ return SPLICE_OVERLAP;
-+ }
-+ }
-+
- // coordinates that matter for consequences, eg AC>ACG trimmed to C>CG
- splice->ref_beg = splice->vcf.pos + splice->tbeg - 1; // 1b before the deleted base
- splice->ref_end = splice->vcf.pos + splice->vcf.rlen - splice->tend - 1; // the last deleted base
-
- #if XDBG
--fprintf(bcftools_stderr,"del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end);
-+fprintf(bcftools_stderr,"splice_csq_del: %s>%s .. ex=%d,%d beg,end=%d,%d tbeg,tend=%d,%d check_utr=%d start,stop,beg,end=%d,%d,%d,%d\n", splice->vcf.ref,splice->vcf.alt,ex_beg,ex_end,splice->ref_beg,splice->ref_end,splice->tbeg,splice->tend,splice->check_utr,splice->check_start,splice->check_stop,splice->check_region_beg,splice->check_region_end);
- #endif
-
- if ( splice->ref_beg + 1 < ex_beg ) // the part before the exon; ref_beg is off by -1
-@@ -1785,7 +1895,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1841,7 +1951,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1876,7 +1986,6 @@
- csq_stage_splice(args, splice->vcf.rec, splice->tr, splice->csq);
- return SPLICE_OUTSIDE;
- }
--
- if ( splice->ref_beg < ex_beg + 2 ) // ref_beg is off by -1
- {
- if ( splice->check_region_beg ) splice->csq |= CSQ_SPLICE_REGION;
-@@ -1931,7 +2040,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,splice->ref_beg,ex_beg-1, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -1961,7 +2070,7 @@
- regitr_t *itr = regitr_init(NULL);
- const char *chr = bcf_seqname(args->hdr,splice->vcf.rec);
- if ( regidx_overlap(args->idx_utr,chr,ex_end+1,splice->ref_end, itr) ) // adjacent utr
-- csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id);
-+ csq = csq_stage_utr(args, itr, splice->vcf.rec, splice->tr->id, splice->csq);
- regitr_destroy(itr);
- }
- if ( !csq )
-@@ -2010,7 +2119,6 @@
- }
- static inline int splice_csq(args_t *args, splice_t *splice, uint32_t ex_beg, uint32_t ex_end)
- {
-- splice->csq = 0;
- splice->vcf.alen = strlen(splice->vcf.alt);
-
- int rlen1 = splice->vcf.rlen - 1, alen1 = splice->vcf.alen - 1, i = 0;
-@@ -2040,6 +2148,7 @@
- return 0;
- }
-
-+
- // return value: 0 added, 1 overlapping variant, 2 silent discard (intronic,alt=ref)
- int hap_init(args_t *args, hap_node_t *parent, hap_node_t *child, gf_cds_t *cds, bcf1_t *rec, int ial)
- {
-@@ -2072,7 +2181,7 @@
- if ( child->icds!=tr->ncds-1 ) splice.check_region_end = 1;
-
- #if XDBG
--fprintf(bcftools_stderr,"\n%d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop);
-+fprintf(bcftools_stderr,"\nhap_init: %d [%s][%s] check start:%d,stop:%d\n",splice.vcf.pos+1,splice.vcf.ref,splice.vcf.alt,splice.check_start,splice.check_stop);
- #endif
- int ret = splice_csq(args, &splice, cds->beg, cds->beg + cds->len - 1);
- #if XDBG
-@@ -2080,7 +2189,7 @@
- #endif
-
- if ( ret==SPLICE_VAR_REF ) return 2; // not a variant, eg REF=CA ALT=CA
-- if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP ) // not a coding csq
-+ if ( ret==SPLICE_OUTSIDE || ret==SPLICE_OVERLAP || splice.csq==CSQ_START_LOST ) // not a coding csq
- {
- free(splice.kref.s);
- free(splice.kalt.s);
-@@ -2138,6 +2247,8 @@
- if ( len < 0 ) // overlapping variants
- {
- free(str.s);
-+ free(splice.kref.s);
-+ free(splice.kalt.s);
- return 1;
- }
- kputsn_(tr->ref + N_REF_PAD + parent->rbeg + parent->rlen - tr->beg, len, &str);
-@@ -2175,6 +2286,7 @@
- if ( !child->csq ) child->csq |= CSQ_CODING_SEQUENCE; // hack, specifically for ENST00000390520/deletion-overlap.vcf
- }
-
-+
- free(splice.kref.s);
- free(splice.kalt.s);
- return 0;
-@@ -2208,7 +2320,7 @@
- void cds_translate(kstring_t *_ref, kstring_t *_seq, uint32_t sbeg, uint32_t rbeg, uint32_t rend, int strand, kstring_t *tseq, int fill)
- {
- #if XDBG
--fprintf(bcftools_stderr,"translate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l);
-+fprintf(bcftools_stderr,"\ntranslate: %d %d %d fill=%d seq.l=%d\n",sbeg,rbeg,rend,fill,(int)_seq->l);
- #endif
- char tmp[3], *codon, *end;
- int i, len, npad;
-@@ -2308,7 +2420,7 @@
- #if DBG>1
- fprintf(bcftools_stderr," npad: %d\n",npad);
- #endif
--if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(bcftools_stderr,"sbeg=%d seq.l=%d seq.m=%d\n",sbeg,(int)seq.l,(int)seq.m);
-+ if ( !(npad>=0 && sbeg+seq.l+npad<=seq.m) ) fprintf(bcftools_stderr,"sbeg=%d seq.l=%d seq.m=%d npad=%d\n",sbeg,(int)seq.l,(int)seq.m,npad);
- assert( npad>=0 && sbeg+seq.l+npad<=seq.m ); // todo: first codon on the rev strand
-
- if ( npad==2 )
-@@ -2329,8 +2441,8 @@
- for (; i>=0 && end>seq.s; i--) tmp[i] = *(--end);
- #if DBG>1
- fprintf(bcftools_stderr,"\t i=%d\n", i);
-- if(i==1)fprintf(bcftools_stderr,"[0] %c\n",tmp[2]);
-- if(i==0)fprintf(bcftools_stderr,"[0] %c%c\n",tmp[1],tmp[2]);
-+ if(i==1)fprintf(bcftools_stderr,"[0] %c\n",tmp[2]);
-+ if(i==0)fprintf(bcftools_stderr,"[0] %c%c\n",tmp[1],tmp[2]);
- #endif
- if ( i==-1 )
- {
-@@ -2571,12 +2683,25 @@
- kputs(csq->vstr.s, str);
- }
-
-+void kprint_aa_prediction(args_t *args, int beg, kstring_t *aa, kstring_t *str)
-+{
-+ if ( !args->brief_predictions )
-+ kputs(aa->s, str);
-+ else
-+ {
-+ int len = aa->l;
-+ if ( aa->s[len-1]=='*' ) len--;
-+ kputc(aa->s[0], str);
-+ kputs("..", str);
-+ kputw(beg+len, str);
-+ }
-+}
-+
- void hap_add_csq(args_t *args, hap_t *hap, hap_node_t *node, int tlen, int ibeg, int iend, int dlen, int indel)
- {
- int i;
- tscript_t *tr = hap->tr;
- int ref_node = tr->strand==STRAND_FWD ? ibeg : iend;
--
- int icsq = node->ncsq_list++;
- hts_expand0(csq_t,node->ncsq_list,node->mcsq_list,node->csq_list);
- csq_t *csq = &node->csq_list[icsq];
-@@ -2680,12 +2805,12 @@
- int aa_sbeg = tr->strand==STRAND_FWD ? node2sbeg(ibeg)/3+1 : (tlen - node2send(iend))/3+1;
- kputc_('|', &str);
- kputw(aa_rbeg, &str);
-- kputs(hap->tref.s, &str);
-+ kprint_aa_prediction(args,aa_rbeg,&hap->tref,&str);
- if ( !(csq->type.type & CSQ_SYNONYMOUS_VARIANT) )
- {
- kputc_('>', &str);
- kputw(aa_sbeg, &str);
-- kputs(hap->tseq.s, &str);
-+ kprint_aa_prediction(args,aa_sbeg,&hap->tseq,&str);
- }
- kputc_('|', &str);
-
-@@ -2963,18 +3088,15 @@
- int icsq = 2*csq->idx + ihap;
- if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT
- {
-- int print_warning = 1;
-- if ( args->quiet )
-+ if ( args->verbosity && (!args->ncsq_small_warned || args->verbosity > 1) )
- {
-- if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0;
-+ fprintf(bcftools_stderr,
-+ "Warning: Too many consequences for sample %s at %s:%"PRId64", keeping the first %d and skipping the rest.\n",
-+ args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),(int64_t) vrec->line->pos+1,csq->idx);
-+ if ( !args->ncsq_small_warned )
-+ fprintf(bcftools_stderr," The limit can be increased by setting the --ncsq parameter. This warning is printed only once.\n");
- args->ncsq_small_warned = 1;
- }
-- if ( print_warning )
-- {
-- fprintf(bcftools_stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n",
-- args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1);
-- if ( args->quiet ) fprintf(bcftools_stderr,"(This warning is printed only once)\n");
-- }
- break;
- }
- if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32;
-@@ -2986,12 +3108,10 @@
- {
- int i,j;
- tr_heap_t *heap = args->active_tr;
--
- while ( heap->ndat && heap->dat[0]->end<=pos )
- {
- tscript_t *tr = heap->dat[0];
- khp_delete(trhp, heap);
--
- args->hap->tr = tr;
- if ( tr->root && tr->root->nchild ) // normal, non-localized calling
- {
-@@ -3030,7 +3150,7 @@
-
- #define SWAP(type_t, a, b) { type_t t = a; a = b; b = t; }
-
--void vbuf_push(args_t *args, bcf1_t **rec_ptr)
-+vbuf_t *vbuf_push(args_t *args, bcf1_t **rec_ptr)
- {
- int i;
-
-@@ -3046,6 +3166,7 @@
- i = rbuf_append(&args->vcf_rbuf);
- if ( !args->vcf_buf[i] ) args->vcf_buf[i] = (vbuf_t*) calloc(1,sizeof(vbuf_t));
- args->vcf_buf[i]->n = 0;
-+ args->vcf_buf[i]->keep_until = 0;
- }
- vbuf_t *vbuf = args->vcf_buf[i];
- vbuf->n++;
-@@ -3065,16 +3186,29 @@
- int ret;
- khint_t k = kh_put(pos2vbuf, args->pos2vbuf, (int)rec->pos, &ret);
- kh_val(args->pos2vbuf,k) = vbuf;
-+
-+ return vbuf;
- }
-
--void vbuf_flush(args_t *args)
-+void vbuf_flush(args_t *args, uint32_t pos)
- {
-- if ( args->active_tr->ndat ) return; // cannot output buffered VCF lines (args.vbuf) until all active transcripts are gone
--
- int i,j;
-- while ( (i=rbuf_shift(&args->vcf_rbuf))>=0 )
-+ while ( args->vcf_rbuf.n )
- {
-- vbuf_t *vbuf = args->vcf_buf[i];
-+ vbuf_t *vbuf;
-+ if ( !args->local_csq && args->active_tr->ndat )
-+ {
-+ // check if the first active transcript starts beyond the first buffered VCF record,
-+ // cannot output buffered VCF lines (args.vbuf) until the active transcripts are gone
-+ vbuf = args->vcf_buf[ args->vcf_rbuf.f ];
-+ if ( vbuf->keep_until > pos ) break;
-+ assert( vbuf->n );
-+ }
-+
-+ i = rbuf_shift(&args->vcf_rbuf);
-+ assert( i>=0 );
-+ vbuf = args->vcf_buf[i];
-+ int pos = vbuf->n ? vbuf->vrec[0]->line->pos : -1;
- for (i=0; i<vbuf->n; i++)
- {
- vrec_t *vrec = vbuf->vrec[i];
-@@ -3085,7 +3219,10 @@
- }
- if ( !vrec->nvcsq )
- {
-- bcf_write(args->out_fh, args->hdr, vrec->line);
-+ if ( bcf_write(args->out_fh, args->hdr, vrec->line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
-+ int save_pos = vrec->line->pos;
-+ bcf_empty(vrec->line);
-+ vrec->line->pos = save_pos; // this is necessary for compound variants
- continue;
- }
-
-@@ -3100,19 +3237,24 @@
- if ( args->hdr_nsmpl )
- {
- if ( vrec->nfmt < args->nfmt_bcsq )
-- for (j=1; j<args->hdr_nsmpl; j++) memcpy(vrec->smpl+j*vrec->nfmt, vrec->smpl+j*args->nfmt_bcsq, vrec->nfmt*sizeof(*vrec->smpl));
-+ for (j=1; j<args->hdr_nsmpl; j++)
-+ memmove(&vrec->smpl[j*vrec->nfmt], &vrec->smpl[j*args->nfmt_bcsq], vrec->nfmt*sizeof(*vrec->smpl));
- bcf_update_format_int32(args->hdr, vrec->line, args->bcsq_tag, vrec->smpl, args->hdr_nsmpl*vrec->nfmt);
- }
- vrec->nvcsq = 0;
-- bcf_write(args->out_fh, args->hdr, vrec->line);
-+ if ( bcf_write(args->out_fh, args->hdr, vrec->line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
-+ int save_pos = vrec->line->pos;
-+ bcf_empty(vrec->line);
-+ vrec->line->pos = save_pos;
- }
-- if ( vbuf->n )
-+ if ( pos!=-1 )
- {
-- khint_t k = kh_get(pos2vbuf, args->pos2vbuf, vbuf->vrec[0]->line->pos);
-+ khint_t k = kh_get(pos2vbuf, args->pos2vbuf, pos);
- if ( k != kh_end(args->pos2vbuf) ) kh_del(pos2vbuf, args->pos2vbuf, k);
- }
- vbuf->n = 0;
- }
-+ if ( args->active_tr->ndat ) return;
-
- for (i=0; i<args->nrm_tr; i++)
- {
-@@ -3139,10 +3281,12 @@
- int pad_end = len - (tr->end - tr->beg + 1 + pad_beg);
- if ( pad_beg + pad_end != 2*N_REF_PAD )
- {
-- char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD);
-+ char *ref = (char*) malloc(tr->end - tr->beg + 1 + 2*N_REF_PAD + 1);
- for (i=0; i < N_REF_PAD - pad_beg; i++) ref[i] = 'N';
- memcpy(ref+i, tr->ref, len);
-+ len += i;
- for (i=0; i < N_REF_PAD - pad_end; i++) ref[i+len] = 'N';
-+ ref[i+len] = 0;
- free(tr->ref);
- tr->ref = ref;
- }
-@@ -3150,15 +3294,19 @@
-
- static void sanity_check_ref(args_t *args, tscript_t *tr, bcf1_t *rec)
- {
-- char *ref = tr->ref + (rec->pos + N_REF_PAD >= tr->beg ? rec->pos - tr->beg + N_REF_PAD : 0);
-- char *vcf = rec->d.allele[0] + (rec->pos + N_REF_PAD >= tr->beg ? 0 : tr->beg - N_REF_PAD - rec->pos);
-- assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) );
-- while ( *ref && *vcf )
-- {
-- if ( *ref!=*vcf && toupper(*ref)!=toupper(*vcf) )
-- error("Error: the fasta reference does not match the VCF REF allele at %s:%d .. %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,rec->d.allele[0]);
-- ref++;
-- vcf++;
-+ int vbeg = 0;
-+ int rbeg = rec->pos - tr->beg + N_REF_PAD;
-+ if ( rbeg < 0 ) { vbeg += abs(rbeg); rbeg = 0; }
-+ char *ref = tr->ref + rbeg;
-+ char *vcf = rec->d.allele[0] + vbeg;
-+ assert( vcf - rec->d.allele[0] < strlen(rec->d.allele[0]) && ref - tr->ref < tr->end - tr->beg + 2*N_REF_PAD );
-+ int i = 0;
-+ while ( ref[i] && vcf[i] )
-+ {
-+ if ( ref[i]!=vcf[i] && toupper(ref[i])!=toupper(vcf[i]) )
-+ error("Error: the fasta reference does not match the VCF REF allele at %s:%"PRId64" .. fasta=%c vcf=%c\n",
-+ bcf_seqname(args->hdr,rec),(int64_t) rec->pos+vbeg+1,ref[i],vcf[i]);
-+ i++;
- }
- }
-
-@@ -3197,6 +3345,7 @@
-
- for (i=1; i<rec->n_allele; i++)
- {
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- if ( hap_init(args, &root, &node, cds, rec, i)!=0 ) continue;
-
- csq_t csq;
-@@ -3296,12 +3445,12 @@
- int aa_sbeg = tr->strand==STRAND_FWD ? node.sbeg/3+1 : (tr->nsref - 2*N_REF_PAD + node.dlen - node.sbeg - alen)/3+1;
- kputc_('|', &str);
- kputw(aa_rbeg, &str);
-- kputs(tref->s, &str);
-+ kprint_aa_prediction(args,aa_rbeg,tref,&str);
- if ( !(csq_type & CSQ_SYNONYMOUS_VARIANT) )
- {
- kputc_('>', &str);
- kputw(aa_sbeg, &str);
-- kputs(tseq->s, &str);
-+ kprint_aa_prediction(args,aa_sbeg,tseq,&str);
- }
- kputc_('|', &str);
- kputw(rec->pos+1, &str);
-@@ -3332,8 +3481,10 @@
- return ret;
- }
-
--int test_cds(args_t *args, bcf1_t *rec)
-+int test_cds(args_t *args, bcf1_t *rec, vbuf_t *vbuf)
- {
-+ static int overlaps_warned = 0, multiploid_warned = 0;
-+
- int i, ret = 0, hap_ret;
- const char *chr = bcf_seqname(args->hdr,rec);
- // note that the off-by-one extension of rlen is deliberate to account for insertions
-@@ -3343,6 +3494,7 @@
- gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*);
- tscript_t *tr = cds->tr;
- if ( !GF_is_coding(tr->type) ) continue;
-+ if ( vbuf->keep_until < tr->end ) vbuf->keep_until = tr->end;
- ret = 1;
- if ( !tr->root )
- {
-@@ -3372,10 +3524,17 @@
- // overlapping or intron variant, cannot apply
- if ( hap_ret==1 )
- {
-- if ( !args->quiet )
-- fprintf(bcftools_stderr,"Warning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( args->verbosity && (!overlaps_warned || args->verbosity > 1) )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: Skipping overlapping variants at %s:%"PRId64"\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( !overlaps_warned )
-+ fprintf(bcftools_stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ overlaps_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%"PRId64"\t%s>%s\n", chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
- }
- else ret = 1; // prevent reporting as intron in test_tscript
- hap_destroy(child);
-@@ -3411,10 +3570,17 @@
- ngts /= bcf_hdr_nsamples(args->hdr);
- if ( ngts!=1 && ngts!=2 )
- {
-- if ( !args->quiet )
-- fprintf(bcftools_stderr,"Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( args->verbosity && (!multiploid_warned || args->verbosity > 1) )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: Skipping site with non-diploid/non-haploid genotypes at %s:%"PRId64"\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ if ( !multiploid_warned )
-+ fprintf(bcftools_stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ multiploid_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%d\t%s>%s\n", chr,rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
-+ fprintf(args->out,"LOG\tWarning: Skipping site with non-diploid/non-haploid genotypes at %s:%"PRId64"\t%s>%s\n", chr,(int64_t) rec->pos+1,rec->d.allele[0],rec->d.allele[1]);
- continue;
- }
- for (ismpl=0; ismpl<args->smpl->n; ismpl++)
-@@ -3431,7 +3597,7 @@
- if ( !bcf_gt_is_phased(gt[0]) && !bcf_gt_is_phased(gt[1]) )
- {
- if ( args->phase==PHASE_REQUIRE )
-- error("Unphased heterozygous genotype at %s:%d, sample %s. See the --phase option.\n", chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]);
-+ error("Unphased heterozygous genotype at %s:%"PRId64", sample %s. See the --phase option.\n", chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]]);
- if ( args->phase==PHASE_SKIP )
- continue;
- if ( args->phase==PHASE_NON_REF )
-@@ -3470,12 +3636,18 @@
- // overlapping or intron variant, cannot apply
- if ( hap_ret==1 )
- {
-- if ( !args->quiet )
-- fprintf(bcftools_stderr,"Warning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n",
-- chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ if ( args->verbosity && (!overlaps_warned || args->verbosity > 1) )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: Skipping overlapping variants at %s:%"PRId64", sample %s\t%s>%s.\n",
-+ chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ if ( !overlaps_warned )
-+ fprintf(bcftools_stderr," This message is printed only once, the verbosity can be increased with `--verbose 2`\n");
-+ overlaps_warned = 1;
-+ }
- if ( args->out )
-- fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%d, sample %s\t%s>%s\n",
-- chr,rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
-+ fprintf(args->out,"LOG\tWarning: Skipping overlapping variants at %s:%"PRId64", sample %s\t%s>%s\n",
-+ chr,(int64_t) rec->pos+1,args->hdr->samples[args->smpl->idx[ismpl]],rec->d.allele[0],rec->d.allele[ial]);
- }
- hap_destroy(child);
- continue;
-@@ -3561,19 +3733,15 @@
- if ( icsq >= args->ncsq_max ) // more than ncsq_max consequences, so can't fit it in FMT
- {
- int ismpl = args->smpl->idx[i];
-- int print_warning = 1;
-- if ( args->quiet )
-+ if ( args->verbosity && (!args->ncsq_small_warned || args->verbosity > 1) )
- {
-- if ( args->quiet > 1 || args->ncsq_small_warned ) print_warning = 0;
-+ fprintf(bcftools_stderr,
-+ "Warning: Too many consequences for sample %s at %s:%"PRId64", keeping the first %d and skipping the rest.\n",
-+ args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),(int64_t) vrec->line->pos+1,icsq+1);
-+ if ( !args->ncsq_small_warned )
-+ fprintf(bcftools_stderr," The limit can be increased by setting the --ncsq parameter. This warning is printed only once.\n");
- args->ncsq_small_warned = 1;
- }
-- if ( print_warning )
-- {
-- fprintf(bcftools_stderr,"Warning: --ncsq %d is too small to annotate %s at %s:%d with %d-th csq\n",
-- args->ncsq_max/2,args->hdr->samples[ismpl],bcf_hdr_id2name(args->hdr,args->rid),vrec->line->pos+1,csq->idx+1);
-- if ( args->quiet ) fprintf(bcftools_stderr,"(This warning is printed only once)\n");
-- }
-- break;
- }
- if ( vrec->nfmt < 1 + icsq/32 ) vrec->nfmt = 1 + icsq/32;
- vrec->smpl[i*args->nfmt_bcsq + icsq/32] |= 1 << (icsq % 32);
-@@ -3596,8 +3764,9 @@
- tscript_t *tr = splice.tr = utr->tr;
- for (i=1; i<rec->n_allele; i++)
- {
-- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- int splice_ret = splice_csq(args, &splice, utr->beg, utr->end);
- if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue;
- csq_t csq;
-@@ -3639,6 +3808,7 @@
- {
- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- splice_csq(args, &splice, exon->beg, exon->end);
- if ( splice.csq ) ret = 1;
- }
-@@ -3661,8 +3831,9 @@
- tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*);
- for (i=1; i<rec->n_allele; i++)
- {
-- if ( rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*' ) { continue; }
-+ if ( rec->d.allele[i][0]=='<' || rec->d.allele[i][0]=='*' ) { continue; }
- splice.vcf.alt = rec->d.allele[i];
-+ splice.csq = 0;
- int splice_ret = splice_csq(args, &splice, tr->beg, tr->end);
- if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF
- csq_t csq;
-@@ -3682,22 +3853,151 @@
- return ret;
- }
-
--void process(args_t *args, bcf1_t **rec_ptr)
-+void test_symbolic_alt(args_t *args, bcf1_t *rec)
-+{
-+ static int warned = 0;
-+ if ( args->verbosity && (!warned && args->verbosity > 0) )
-+ {
-+ fprintf(bcftools_stderr,"Warning: The support for symbolic ALT insertions is experimental.\n");
-+ warned = 1;
-+ }
-+
-+ const char *chr = bcf_seqname(args->hdr,rec);
-+
-+ // only insertions atm
-+ int beg = rec->pos + 1;
-+ int end = beg;
-+ int csq_class = CSQ_ELONGATION;
-+
-+ int hit = 0;
-+ if ( regidx_overlap(args->idx_cds,chr,beg,end, args->itr) )
-+ {
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ gf_cds_t *cds = regitr_payload(args->itr,gf_cds_t*);
-+ tscript_t *tr = cds->tr;
-+ csq.type.type = (GF_is_coding(tr->type) ? CSQ_CODING_SEQUENCE : CSQ_NON_CODING) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ hit = 1;
-+ }
-+ }
-+ if ( regidx_overlap(args->idx_utr,chr,beg,end, args->itr) )
-+ {
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ gf_utr_t *utr = regitr_payload(args->itr, gf_utr_t*);
-+ tscript_t *tr = utr->tr;
-+ csq.type.type = (utr->which==prime5 ? CSQ_UTR5 : CSQ_UTR3) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ hit = 1;
-+ }
-+ }
-+ if ( regidx_overlap(args->idx_exon,chr,beg,end, args->itr) )
-+ {
-+ splice_t splice;
-+ splice_init(&splice, rec);
-+ splice.check_acceptor = splice.check_donor = 1;
-+
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ gf_exon_t *exon = regitr_payload(args->itr, gf_exon_t*);
-+ splice.tr = exon->tr;
-+ if ( !splice.tr->ncds ) continue; // not a coding transcript, no interest in splice sites
-+ splice.check_region_beg = splice.tr->beg==exon->beg ? 0 : 1;
-+ splice.check_region_end = splice.tr->end==exon->end ? 0 : 1;
-+ splice.vcf.alt = rec->d.allele[1];
-+ splice.csq = csq_class;
-+ splice_csq(args, &splice, exon->beg, exon->end);
-+ if ( splice.csq ) hit = 1;
-+ }
-+ }
-+ if ( !hit && regidx_overlap(args->idx_tscript,chr,beg,end, args->itr) )
-+ {
-+ splice_t splice;
-+ splice_init(&splice, rec);
-+
-+ while ( regitr_overlap(args->itr) )
-+ {
-+ csq_t csq;
-+ memset(&csq, 0, sizeof(csq_t));
-+ tscript_t *tr = splice.tr = regitr_payload(args->itr, tscript_t*);
-+ splice.vcf.alt = rec->d.allele[1];
-+ splice.csq = csq_class;
-+ int splice_ret = splice_csq(args, &splice, tr->beg, tr->end);
-+ if ( splice_ret!=SPLICE_INSIDE && splice_ret!=SPLICE_OVERLAP ) continue; // SPLICE_OUTSIDE or SPLICE_REF
-+ csq.type.type = (GF_is_coding(tr->type) ? CSQ_INTRON : CSQ_NON_CODING) | csq_class;
-+ csq.pos = rec->pos;
-+ csq.type.biotype = tr->type;
-+ csq.type.strand = tr->strand;
-+ csq.type.trid = tr->id;
-+ csq.type.gene = tr->gene->name;
-+ csq_stage(args, &csq, rec);
-+ }
-+ }
-+}
-+
-+void debug_print_buffers(args_t *args, int pos)
-+{
-+ int i,j;
-+ fprintf(bcftools_stderr,"debug_print_buffers at %d\n", pos);
-+ fprintf(bcftools_stderr,"vbufs:\n");
-+ for (i=0; i<args->vcf_rbuf.n; i++)
-+ {
-+ int k = rbuf_kth(&args->vcf_rbuf, i);
-+ vbuf_t *vbuf = args->vcf_buf[k];
-+
-+ fprintf(bcftools_stderr,"\tvbuf %d:\n", i);
-+ for (j=0; j<vbuf->n; j++)
-+ {
-+ vrec_t *vrec = vbuf->vrec[j];
-+ fprintf(bcftools_stderr,"\t\t%"PRId64" .. nvcsq=%d\n", (int64_t) vrec->line->pos+1, vrec->nvcsq);
-+ }
-+ }
-+ fprintf(bcftools_stderr,"pos2vbuf:");
-+ khint_t k;
-+ for (k = 0; k < kh_end(args->pos2vbuf); ++k)
-+ if (kh_exist(args->pos2vbuf, k)) fprintf(bcftools_stderr," %d",1+(int)kh_key(args->pos2vbuf, k));
-+ fprintf(bcftools_stderr,"\n");
-+ fprintf(bcftools_stderr,"active_tr: %d\n", args->active_tr->ndat);
-+}
-+
-+static void process(args_t *args, bcf1_t **rec_ptr)
- {
- if ( !rec_ptr )
- {
- hap_flush(args, REGIDX_MAX);
-- vbuf_flush(args);
-+ vbuf_flush(args, REGIDX_MAX);
- return;
- }
-
- bcf1_t *rec = *rec_ptr;
-+ static int32_t prev_rid = -1, prev_pos = -1;
-+ if ( prev_rid!=rec->rid ) { prev_rid = rec->rid; prev_pos = rec->pos; }
-+ if ( prev_pos > rec->pos )
-+ error("Error: The file is not sorted, %s:%d comes before %s:%"PRId64"\n",bcf_seqname(args->hdr,rec),prev_pos+1,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-
- int call_csq = 1;
-- if ( !rec->n_allele ) call_csq = 0; // no alternate allele
-- else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='<' || rec->d.allele[1][0]=='*') ) call_csq = 0; // gVCF, no alt allele
-- else if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][0]!='*') call_csq = 0; // a symbolic allele, not ready for CNVs etc
-- else if ( args->filter )
-+ if ( rec->n_allele < 2 ) call_csq = 0; // no alternate allele
-+ else if ( rec->n_allele==2 && (rec->d.allele[1][0]=='*' || rec->d.allele[1][1]=='*') ) call_csq = 0; // gVCF, not an alt allele
-+ else if ( rec->d.allele[1][0]=='<' )
-+ {
-+ if ( strncmp("<INS",rec->d.allele[1], 4) ) call_csq = 0; // only <INS[:.*]> is supported at the moment
-+ }
-+ if ( call_csq && args->filter )
- {
- call_csq = filter_test(args->filter, rec, NULL);
- if ( args->filter_logic==FLT_EXCLUDE ) call_csq = call_csq ? 0 : 1;
-@@ -3706,25 +4006,34 @@
- {
- if ( !args->out_fh ) return; // not a VCF output
- vbuf_push(args, rec_ptr);
-- vbuf_flush(args);
-+ hap_flush(args, rec->pos-1);
-+ vbuf_flush(args, rec->pos-1);
- return;
- }
-
- if ( args->rid != rec->rid )
- {
- hap_flush(args, REGIDX_MAX);
-- vbuf_flush(args);
-+ vbuf_flush(args, REGIDX_MAX);
- }
- args->rid = rec->rid;
-- vbuf_push(args, rec_ptr);
-+ vbuf_t *vbuf = vbuf_push(args, rec_ptr);
-
-- int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec);
-- hit += test_utr(args, rec);
-- hit += test_splice(args, rec);
-- if ( !hit ) test_tscript(args, rec);
-+ if ( rec->d.allele[1][0]!='<' )
-+ {
-+ int hit = args->local_csq ? test_cds_local(args, rec) : test_cds(args, rec, vbuf);
-+ hit += test_utr(args, rec);
-+ hit += test_splice(args, rec);
-+ if ( !hit ) test_tscript(args, rec);
-+ }
-+ else
-+ test_symbolic_alt(args, rec);
-
-- hap_flush(args, rec->pos-1);
-- vbuf_flush(args);
-+ if ( rec->pos > 0 )
-+ {
-+ hap_flush(args, rec->pos-1);
-+ vbuf_flush(args, rec->pos-1);
-+ }
-
- return;
- }
-@@ -3741,6 +4050,7 @@
- " -g, --gff-annot <file> gff3 annotation file\n"
- "\n"
- "CSQ options:\n"
-+ " -b, --brief-predictions annotate with abbreviated protein-changing predictions\n"
- " -c, --custom-tag <string> use this tag instead of the default BCSQ\n"
- " -l, --local-csq localized predictions, consider only one VCF record at a time\n"
- " -n, --ncsq <int> maximum number of consequences to consider per site [16]\n"
-@@ -3754,16 +4064,18 @@
- " -e, --exclude <expr> exclude sites for which the expression is true\n"
- " --force run even if some sanity checks fail\n"
- " -i, --include <expr> select sites for which the expression is true\n"
-+ " --no-version do not append version and command line to the header\n"
- " -o, --output <file> write output to a file [standard output]\n"
- " -O, --output-type <b|u|z|v|t> b: compressed BCF, u: uncompressed BCF, z: compressed VCF\n"
- " v: uncompressed VCF, t: plain tab-delimited text output [v]\n"
-- " -q, --quiet suppress warning messages. Can be given two times for even less messages\n"
- " -r, --regions <region> restrict to comma-separated list of regions\n"
- " -R, --regions-file <file> restrict to regions listed in a file\n"
- " -s, --samples <-|list> samples to include or \"-\" to apply all variants and ignore samples\n"
- " -S, --samples-file <file> samples to include\n"
- " -t, --targets <region> similar to -r but streams rather than index-jumps\n"
- " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n"
-+ " --threads <int> use multithreading with <int> worker threads [0]\n"
-+ " -v, --verbose <int> verbosity level 0-2 [1]\n"
- "\n"
- "Example:\n"
- " bcftools csq -f hs37d5.fa -g Homo_sapiens.GRCh37.82.gff3.gz in.vcf\n"
-@@ -3781,12 +4093,16 @@
- args->output_type = FT_VCF;
- args->bcsq_tag = "BCSQ";
- args->ncsq_max = 2*16;
-+ args->verbosity = 1;
-+ args->record_cmd_line = 1;
-
- static struct option loptions[] =
- {
- {"force",0,0,1},
-+ {"threads",required_argument,NULL,2},
- {"help",0,0,'h'},
- {"ncsq",1,0,'n'},
-+ {"brief-predictions",0,0,'b'},
- {"custom-tag",1,0,'c'},
- {"local-csq",0,0,'l'},
- {"gff-annot",1,0,'g'},
-@@ -3797,24 +4113,36 @@
- {"output-type",1,NULL,'O'},
- {"phase",1,0,'p'},
- {"quiet",0,0,'q'},
-+ {"verbose",1,0,'v'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
- {"samples",1,0,'s'},
- {"samples-file",1,0,'S'},
- {"targets",1,0,'t'},
- {"targets-file",1,0,'T'},
-+ {"no-version",no_argument,NULL,3},
- {0,0,0,0}
- };
- int c, targets_is_file = 0, regions_is_file = 0;
-- char *targets_list = NULL, *regions_list = NULL;
-- while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:",loptions,NULL)) >= 0)
-+ char *targets_list = NULL, *regions_list = NULL, *tmp;
-+ while ((c = getopt_long(argc, argv, "?hr:R:t:T:i:e:f:o:O:g:s:S:p:qc:ln:bv:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 1 : args->force = 1; break;
-+ case 2 :
-+ args->n_threads = strtol(optarg,&tmp,10);
-+ if ( *tmp ) error("Could not parse argument: --threads %s\n", optarg);
-+ break;
-+ case 3 : args->record_cmd_line = 0; break;
-+ case 'b': args->brief_predictions = 1; break;
- case 'l': args->local_csq = 1; break;
- case 'c': args->bcsq_tag = optarg; break;
-- case 'q': args->quiet++; break;
-+ case 'q': error("Error: the -q option has been deprecated, use -v, --verbose instead.\n"); break;
-+ case 'v':
-+ args->verbosity = atoi(optarg);
-+ if ( args->verbosity<0 || args->verbosity>2 ) error("Error: expected integer 0-2 with -v, --verbose\n");
-+ break;
- case 'p':
- switch (optarg[0])
- {
-@@ -3871,8 +4199,9 @@
- error("Failed to read the targets: %s\n", targets_list);
- if ( regions_list && bcf_sr_set_regions(args->sr, regions_list, regions_is_file)<0 )
- error("Failed to read the regions: %s\n", regions_list);
-+ if ( bcf_sr_set_threads(args->sr, args->n_threads)<0 ) error("Failed to create %d extra threads\n", args->n_threads);
- if ( !bcf_sr_add_reader(args->sr, fname) )
-- error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->sr->errnum));
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
-
- init_data(args);
-@@ -3885,7 +4214,6 @@
- destroy_data(args);
- bcf_sr_destroy(args->sr);
- free(args);
--
- return 0;
- }
-
---- python-pysam.orig/bcftools/filter.c
-+++ python-pysam/bcftools/filter.c
-@@ -28,7 +28,10 @@
- #include <errno.h>
- #include <math.h>
- #include <sys/types.h>
-+#include <inttypes.h>
-+#ifndef _WIN32
- #include <pwd.h>
-+#endif
- #include <regex.h>
- #include <htslib/khash_str2int.h>
- #include <htslib/hts_defs.h>
-@@ -53,8 +56,8 @@
- # define __FUNCTION__ __func__
- #endif
-
--uint64_t bcf_double_missing = 0x7ff0000000000001;
--uint64_t bcf_double_vector_end = 0x7ff0000000000002;
-+static const uint64_t bcf_double_missing = 0x7ff0000000000001;
-+static const uint64_t bcf_double_vector_end = 0x7ff0000000000002;
- static inline void bcf_double_set(double *ptr, uint64_t value)
- {
- union { uint64_t i; double d; } u;
-@@ -71,6 +74,7 @@
- #define bcf_double_set_missing(x) bcf_double_set(&(x),bcf_double_missing)
- #define bcf_double_is_vector_end(x) bcf_double_test((x),bcf_double_vector_end)
- #define bcf_double_is_missing(x) bcf_double_test((x),bcf_double_missing)
-+#define bcf_double_is_missing_or_vector_end(x) (bcf_double_test((x),bcf_double_missing) || bcf_double_test((x),bcf_double_vector_end))
-
-
- typedef struct _token_t
-@@ -82,7 +86,7 @@
- char *tag; // for debugging and printout only, VCF tag name
- double threshold; // filtering threshold
- int is_constant; // the threshold is set
-- int hdr_id, type; // BCF header lookup ID and one of BCF_HT_* types
-+ int hdr_id, tag_type; // BCF header lookup ID and one of BCF_HL_* types
- int idx; // 0-based index to VCF vectors,
- // -2: list (e.g. [0,1,2] or [1..3] or [1..] or any field[*], which is equivalent to [0..])
- int *idxs; // set indexes to 0 to exclude, to 1 to include, and last element negative if unlimited
-@@ -151,11 +155,14 @@
- #define TOK_CNT 26
- #define TOK_PERLSUB 27
- #define TOK_BINOM 28
--
--// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
--// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l f c p
--static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8, 8, 8, 8};
--#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^S.lfcp"
-+#define TOK_PHRED 29
-+#define TOK_MEDIAN 30
-+#define TOK_STDEV 31
-+
-+// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
-+// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l f c p b P i s
-+static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
-+#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^S.lfcpis"
-
- // Return negative values if it is a function with variable number of arguments
- static int filters_next_token(char **str, int *len)
-@@ -179,12 +186,16 @@
-
- if ( !strncasecmp(tmp,"MAX(",4) ) { (*str) += 3; return TOK_MAX; }
- if ( !strncasecmp(tmp,"MIN(",4) ) { (*str) += 3; return TOK_MIN; }
-+ if ( !strncasecmp(tmp,"MEAN(",5) ) { (*str) += 4; return TOK_AVG; }
-+ if ( !strncasecmp(tmp,"MEDIAN(",7) ) { (*str) += 6; return TOK_MEDIAN; }
- if ( !strncasecmp(tmp,"AVG(",4) ) { (*str) += 3; return TOK_AVG; }
-+ if ( !strncasecmp(tmp,"STDEV(",6) ) { (*str) += 5; return TOK_STDEV; }
- if ( !strncasecmp(tmp,"SUM(",4) ) { (*str) += 3; return TOK_SUM; }
- if ( !strncasecmp(tmp,"ABS(",4) ) { (*str) += 3; return TOK_ABS; }
- if ( !strncasecmp(tmp,"COUNT(",4) ) { (*str) += 5; return TOK_CNT; }
- if ( !strncasecmp(tmp,"STRLEN(",7) ) { (*str) += 6; return TOK_LEN; }
- if ( !strncasecmp(tmp,"BINOM(",6) ) { (*str) += 5; return -TOK_BINOM; }
-+ if ( !strncasecmp(tmp,"PHRED(",6) ) { (*str) += 5; return TOK_PHRED; }
- if ( !strncasecmp(tmp,"%MAX(",5) ) { (*str) += 4; return TOK_MAX; } // for backward compatibility
- if ( !strncasecmp(tmp,"%MIN(",5) ) { (*str) += 4; return TOK_MIN; } // for backward compatibility
- if ( !strncasecmp(tmp,"%AVG(",5) ) { (*str) += 4; return TOK_AVG; } // for backward compatibility
-@@ -195,6 +206,7 @@
- if ( !strncasecmp(tmp,"PERL.",5) ) { (*str) += 5; return -TOK_PERLSUB; }
- if ( !strncasecmp(tmp,"N_PASS(",7) ) { *len = 6; (*str) += 6; return -TOK_FUNC; }
- if ( !strncasecmp(tmp,"F_PASS(",7) ) { *len = 6; (*str) += 6; return -TOK_FUNC; }
-+ if ( !strncasecmp(tmp,"%ILEN",5) ) { *len = 5; return TOK_VAL; } // to be able to distinguish between INFO/ILEN and on-the-fly ILEN
-
- if ( tmp[0]=='@' ) // file name
- {
-@@ -280,28 +292,30 @@
- }
-
-
--/*
-+/*
- Simple path expansion, expands ~/, ~user, $var. The result must be freed by the caller.
-
-- Based on jkb's staden code with some adjustements.
-+ Based on jkb's staden code with some adjustments.
- https://sourceforge.net/p/staden/code/HEAD/tree/staden/trunk/src/Misc/getfile.c#l123
- */
- char *expand_path(char *path)
- {
--#ifdef _WIN32
-- return strdup(path); // windows expansion: todo
--#endif
--
- kstring_t str = {0,0,0};
-
- if ( path[0] == '~' )
- {
- if ( !path[1] || path[1] == '/' )
- {
-+#ifdef _WIN32
-+ kputs(getenv("HOMEDRIVE"), &str);
-+ kputs(getenv("HOMEPATH"), &str);
-+#else
- // ~ or ~/path
- kputs(getenv("HOME"), &str);
- if ( path[1] ) kputs(path+1, &str);
-+#endif
- }
-+#ifndef _WIN32
- else
- {
- // user name: ~pd3/path
-@@ -315,13 +329,18 @@
- else kputs(pwentry->pw_dir, &str);
- kputs(end, &str);
- }
-- return str.s;
-+#endif
-+ return ks_release(&str);
- }
- if ( path[0] == '$' )
- {
- char *var = getenv(path+1);
-- if ( var ) path = var;
-+ if ( var ) {
-+ kputs(var, &str);
-+ return ks_release(&str);
-+ }
- }
-+
- return strdup(path);
- }
-
-@@ -444,6 +463,8 @@
- return;
- }
-
-+ if ( !btok->str_value.l ) error("Error occurred while evaluating the expression\n");
-+
- if ( rtok->tok_type==TOK_EQ )
- rtok->pass_site = strcmp(btok->str_value.s,line->d.id) ? 0 : 1;
- else
-@@ -499,6 +520,14 @@
- return -1; // this shouldn't happen
- }
-
-+static void filters_set_chrom(filter_t *flt, bcf1_t *line, token_t *tok)
-+{
-+ tok->str_value.l = 0;
-+ kputs(bcf_seqname(flt->hdr,line), &tok->str_value);
-+ tok->nvalues = tok->str_value.l;
-+ tok->is_str = 1;
-+}
-+
- static void filters_set_pos(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- tok->values[0] = line->pos+1;
-@@ -640,7 +669,7 @@
- static void filters_set_format_int(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int nvals;
- if ( (nvals=bcf_get_format_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi))<0 )
-@@ -659,8 +688,10 @@
- {
- if ( !tok->usmpl[i] ) continue;
- int32_t *ptr = flt->tmpi + i*nsrc1;
-- if ( tok->idx>=nsrc1 || ptr[tok->idx]==bcf_int32_missing || ptr[tok->idx]==bcf_int32_vector_end )
-+ if ( tok->idx>=nsrc1 || ptr[tok->idx]==bcf_int32_missing )
- bcf_double_set_missing(tok->values[i]);
-+ else if ( ptr[tok->idx]==bcf_int32_vector_end )
-+ bcf_double_set_vector_end(tok->values[i]);
- else
- tok->values[i] = ptr[tok->idx];
- }
-@@ -677,24 +708,31 @@
- for (k=0; k<kend; k++)
- {
- if ( k<tok->nidxs && !tok->idxs[k] ) continue;
-- if ( src[k]==bcf_int32_missing || src[k]==bcf_int32_vector_end )
-+ if ( src[k]==bcf_int32_missing )
- bcf_double_set_missing(dst[j]);
-+ else if ( src[k]==bcf_int32_vector_end )
-+ bcf_double_set_vector_end(dst[j]);
- else
- dst[j] = src[k];
- j++;
- }
-- while (j < tok->nval1)
-+ if ( j==0 )
- {
- bcf_double_set_missing(dst[j]);
- j++;
- }
-+ while (j < tok->nval1)
-+ {
-+ bcf_double_set_vector_end(dst[j]);
-+ j++;
-+ }
- }
- }
- }
- static void filters_set_format_float(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int nvals;
- if ( (nvals=bcf_get_format_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf))<0 )
-@@ -713,8 +751,10 @@
- {
- if ( !tok->usmpl[i] ) continue;
- float *ptr = flt->tmpf + i*nsrc1;
-- if ( tok->idx>=nsrc1 || bcf_float_is_missing(ptr[tok->idx]) || bcf_float_is_vector_end(ptr[tok->idx]) )
-+ if ( tok->idx>=nsrc1 || bcf_float_is_missing(ptr[tok->idx]) )
- bcf_double_set_missing(tok->values[i]);
-+ else if ( bcf_float_is_vector_end(ptr[tok->idx]) )
-+ bcf_double_set_vector_end(tok->values[i]);
- else
- tok->values[i] = ptr[tok->idx];
- }
-@@ -731,24 +771,31 @@
- for (k=0; k<kend; k++)
- {
- if ( k<tok->nidxs && !tok->idxs[k] ) continue;
-- if ( bcf_float_is_missing(src[k]) || bcf_float_is_vector_end(src[k]) )
-+ if ( bcf_float_is_missing(src[k]) )
- bcf_double_set_missing(dst[j]);
-+ else if ( bcf_float_is_vector_end(src[k]) )
-+ bcf_double_set_vector_end(dst[j]);
- else
- dst[j] = src[k];
- j++;
- }
-- while (j < tok->nval1)
-+ if ( j==0 )
- {
- bcf_double_set_missing(dst[j]);
- j++;
- }
-+ while (j < tok->nval1)
-+ {
-+ bcf_double_set_vector_end(dst[j]);
-+ j++;
-+ }
- }
- }
- }
- static void filters_set_format_string(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int i, ndim = tok->str_value.m;
- int nstr = bcf_get_format_char(flt->hdr, line, tok->tag, &tok->str_value.s, &ndim);
-@@ -868,7 +915,7 @@
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not lineognised: %d at %s:%d\n",fmt->type, bcf_seqname(flt->hdr,line),line->pos+1); break;
-+ default: error("The GT type is not lineognised: %d at %s:%"PRId64"\n",fmt->type, bcf_seqname(flt->hdr,line),(int64_t) line->pos+1); break;
- }
- #undef BRANCH_INT
- assert( tok->nsamples == nsmpl );
-@@ -916,6 +963,19 @@
- tok->nvalues = tok->str_value.l;
- tok->nval1 = blen;
- }
-+static void filters_set_ilen(filter_t *flt, bcf1_t *line, token_t *tok)
-+{
-+ tok->nvalues = line->n_allele - 1;
-+ hts_expand(double,tok->nvalues,tok->mvalues,tok->values);
-+
-+ int i, rlen = strlen(line->d.allele[0]);
-+ for (i=1; i<line->n_allele; i++)
-+ {
-+ int alen = strlen(line->d.allele[i]);
-+ if ( rlen==alen ) bcf_double_set_missing(tok->values[i-1]);
-+ else tok->values[i-1] = alen - rlen;
-+ }
-+}
- static void filters_set_ref_string(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- tok->str_value.l = 0;
-@@ -1014,10 +1074,16 @@
- if ( rtok->pass_samples[i] ) npass++;
- }
-
-- assert( rtok->values );
-- rtok->nvalues = 1;
-- rtok->values[0] = rtok->tag[0]=='N' ? npass : (line->n_sample ? 1.0*npass/line->n_sample : 0);
-- rtok->nsamples = 0;
-+ hts_expand(double,rtok->nsamples,rtok->mvalues,rtok->values);
-+ double value = rtok->tag[0]=='N' ? npass : (line->n_sample ? 1.0*npass/line->n_sample : 0);
-+ rtok->nval1 = 1;
-+ rtok->nvalues = rtok->nsamples;
-+
-+ // Set per-sample status so that `query -i 'F_PASS(GT!="mis" & GQ >= 20) > 0.5'` or +trio-stats
-+ // consider only the passing site AND samples. The values for failed samples is set to -1 so
-+ // that it can never conflict with valid expressions.
-+ for (i=0; i<rtok->nsamples; i++)
-+ rtok->values[i] = rtok->pass_samples[i] ? value : -1;
-
- return 1;
- }
-@@ -1103,7 +1169,7 @@
- int i, has_value = 0;
- for (i=0; i<tok->nvalues; i++)
- {
-- if ( bcf_double_is_missing(tok->values[i]) || bcf_double_is_vector_end(tok->values[i]) ) continue;
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
- has_value = 1;
- if ( val < tok->values[i] ) val = tok->values[i];
- }
-@@ -1123,7 +1189,7 @@
- int i, has_value = 0;
- for (i=0; i<tok->nvalues; i++)
- {
-- if ( bcf_double_is_missing(tok->values[i]) || bcf_double_is_vector_end(tok->values[i]) ) continue;
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
- has_value = 1;
- if ( val > tok->values[i] ) val = tok->values[i];
- }
-@@ -1142,7 +1208,7 @@
- double val = 0;
- int i, n = 0;
- for (i=0; i<tok->nvalues; i++)
-- if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; }
-+ if ( !bcf_double_is_missing_or_vector_end(tok->values[i]) ) { val += tok->values[i]; n++; }
- if ( n )
- {
- rtok->values[0] = val / n;
-@@ -1150,6 +1216,61 @@
- }
- return 1;
- }
-+static int compare_doubles(const void *lhs, const void *rhs)
-+{
-+ double arg1 = *(const double*) lhs;
-+ double arg2 = *(const double*) rhs;
-+ if (arg1 < arg2) return -1;
-+ if (arg1 > arg2) return 1;
-+ return 0;
-+}
-+static int func_median(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ rtok->nvalues = 0;
-+ if ( !tok->nvalues ) return 1;
-+ int i, n = 0;
-+ for (i=0; i<tok->nvalues; i++)
-+ {
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
-+ if ( n < i ) tok->values[n] = tok->values[i];
-+ n++;
-+ }
-+ if ( !n ) return 1;
-+ if ( n==1 ) rtok->values[0] = tok->values[0];
-+ else
-+ {
-+ qsort(tok->values, n, sizeof(double), compare_doubles);
-+ rtok->values[0] = n % 2 ? tok->values[n/2] : (tok->values[n/2-1] + tok->values[n/2]) * 0.5;
-+ }
-+ rtok->nvalues = 1;
-+ return 1;
-+}
-+static int func_stddev(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ rtok->nvalues = 0;
-+ if ( !tok->nvalues ) return 1;
-+ int i, n = 0;
-+ for (i=0; i<tok->nvalues; i++)
-+ {
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
-+ if ( n < i ) tok->values[n] = tok->values[i];
-+ n++;
-+ }
-+ if ( !n ) return 1;
-+ if ( n==1 ) rtok->values[0] = 0;
-+ else
-+ {
-+ double sdev = 0, avg = 0;
-+ for (i=0; i<n; i++) avg += tok->values[n];
-+ avg /= n;
-+ for (i=0; i<n; i++) sdev += (tok->values[n] - avg) * (tok->values[n] - avg);
-+ rtok->values[0] = sqrt(sdev/n);
-+ }
-+ rtok->nvalues = 1;
-+ return 1;
-+}
- static int func_sum(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
- rtok->nvalues = 0;
-@@ -1158,7 +1279,7 @@
- double val = 0;
- int i, n = 0;
- for (i=0; i<tok->nvalues; i++)
-- if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; }
-+ if ( !bcf_double_is_missing_or_vector_end(tok->values[i]) ) { val += tok->values[i]; n++; }
- if ( n )
- {
- rtok->values[0] = val;
-@@ -1177,17 +1298,28 @@
- int i;
- for (i=0; i<tok->nvalues; i++)
- if ( bcf_double_is_missing(tok->values[i]) ) bcf_double_set_missing(rtok->values[i]);
-- else rtok->values[i] = fabs(tok->values[i]);
-+ else if ( !bcf_double_is_vector_end(tok->values[i]) ) rtok->values[i] = fabs(tok->values[i]);
- return 1;
- }
- static int func_count(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
- token_t *tok = stack[nstack - 1];
-- if ( !tok->nsamples ) error("COUNT() can be applied only on FORMAT fields\n");
--
- int i, cnt = 0;
-- for (i=0; i<tok->nsamples; i++)
-- if ( tok->pass_samples[i] ) cnt++;
-+ if ( !tok->nsamples )
-+ {
-+ if ( tok->is_str )
-+ {
-+ if ( tok->str_value.l ) cnt = 1;
-+ for (i=0; i<tok->str_value.l; i++) if ( tok->str_value.s[i]==',' ) cnt++;
-+ }
-+ else
-+ cnt = tok->nvalues;
-+ }
-+ else
-+ {
-+ for (i=0; i<tok->nsamples; i++)
-+ if ( tok->pass_samples[i] ) cnt++;
-+ }
-
- rtok->nvalues = 1;
- rtok->values[0] = cnt;
-@@ -1303,10 +1435,10 @@
- }
- int idx1 = bcf_gt_allele(ptr[0]);
- int idx2 = bcf_gt_allele(ptr[1]);
-- if ( idx1>=line->n_allele ) error("Incorrect allele index at %s:%d, sample %s\n", bcf_seqname(flt->hdr,line),line->pos+1,flt->hdr->samples[i]);
-- if ( idx2>=line->n_allele ) error("Incorrect allele index at %s:%d, sample %s\n", bcf_seqname(flt->hdr,line),line->pos+1,flt->hdr->samples[i]);
-+ if ( idx1>=line->n_allele ) error("Incorrect allele index at %s:%"PRId64", sample %s\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,flt->hdr->samples[i]);
-+ if ( idx2>=line->n_allele ) error("Incorrect allele index at %s:%"PRId64", sample %s\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,flt->hdr->samples[i]);
- double *vals = tok->values + tok->nval1*i;
-- if ( bcf_double_is_missing(vals[idx1]) || bcf_double_is_missing(vals[idx2]) )
-+ if ( bcf_double_is_missing_or_vector_end(vals[idx1]) || bcf_double_is_missing_or_vector_end(vals[idx2]) )
- {
- bcf_double_set_missing(rtok->values[i]);
- continue;
-@@ -1324,13 +1456,13 @@
- // the fields given explicitly: binom(AD[:0],AD[:1])
- token_t *tok2 = stack[istack+1];
- if ( tok->nval1!=1 || tok2->nval1!=1 )
-- error("Expected one value per binom() argument, found %d and %d at %s:%d\n",tok->nval1,tok2->nval1, bcf_seqname(flt->hdr,line),line->pos+1);
-+ error("Expected one value per binom() argument, found %d and %d at %s:%"PRId64"\n",tok->nval1,tok2->nval1, bcf_seqname(flt->hdr,line),(int64_t) line->pos+1);
- for (i=0; i<rtok->nsamples; i++)
- {
- if ( !rtok->usmpl[i] ) continue;
- double *ptr1 = tok->values + tok->nval1*i;
- double *ptr2 = tok2->values + tok2->nval1*i;
-- if ( bcf_double_is_missing(ptr1[0]) || bcf_double_is_missing(ptr2[0]) )
-+ if ( bcf_double_is_missing_or_vector_end(ptr1[0]) || bcf_double_is_missing_or_vector_end(ptr2[0]) )
- {
- bcf_double_set_missing(rtok->values[i]);
- continue;
-@@ -1370,7 +1502,7 @@
- ptr2 = &tok2->values[0];
- }
- }
-- if ( !ptr1 || !ptr2 || bcf_double_is_missing(ptr1[0]) || bcf_double_is_missing(ptr2[0]) )
-+ if ( !ptr1 || !ptr2 || bcf_double_is_missing_or_vector_end(ptr1[0]) || bcf_double_is_missing_or_vector_end(ptr2[0]) )
- bcf_double_set_missing(rtok->values[0]);
- else
- {
-@@ -1381,6 +1513,31 @@
- }
- return rtok->nargs;
- }
-+static int func_phred(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ if ( tok->is_str ) error("PHRED() can be applied only on numeric values\n");
-+
-+ rtok->nsamples = tok->nsamples;
-+ rtok->nval1 = tok->nval1;
-+ memcpy(rtok->pass_samples, tok->pass_samples, rtok->nsamples*sizeof(*rtok->pass_samples));
-+ assert(tok->usmpl);
-+ if ( !rtok->usmpl )
-+ {
-+ rtok->usmpl = (uint8_t*) malloc(tok->nsamples*sizeof(*rtok->usmpl));
-+ memcpy(rtok->usmpl, tok->usmpl, tok->nsamples*sizeof(*rtok->usmpl));
-+ }
-+ rtok->nvalues = tok->nvalues;
-+ if ( !tok->nvalues ) return 1;
-+
-+ hts_expand(double, rtok->nvalues, rtok->mvalues, rtok->values);
-+ int i;
-+ for (i=0; i<tok->nvalues; i++)
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) bcf_double_set_missing(rtok->values[i]);
-+ else rtok->values[i] = -4.34294481903*log(tok->values[i]);
-+
-+ return 1;
-+}
- inline static void tok_init_values(token_t *atok, token_t *btok, token_t *rtok)
- {
- token_t *tok = atok->nvalues > btok->nvalues ? atok : btok;
-@@ -1414,7 +1571,7 @@
- assert( atok->nsamples==btok->nsamples ); \
- for (i=0; i<atok->nvalues; i++) \
- { \
-- if ( bcf_double_is_missing(atok->values[i]) || bcf_double_is_missing(btok->values[i]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(atok->values[i]) || bcf_double_is_missing_or_vector_end(btok->values[i]) ) \
- { \
- bcf_double_set_missing(rtok->values[i]); \
- continue; \
-@@ -1428,11 +1585,11 @@
- token_t *xtok = atok->nsamples ? atok : btok; \
- token_t *ytok = atok->nsamples ? btok : atok; \
- assert( ytok->nvalues==1 ); \
-- if ( !bcf_double_is_missing(ytok->values[0]) ) \
-+ if ( !bcf_double_is_missing_or_vector_end(ytok->values[0]) ) \
- { \
- for (i=0; i<xtok->nvalues; i++) \
- { \
-- if ( bcf_double_is_missing(xtok->values[i]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(xtok->values[i]) ) \
- { \
- bcf_double_set_missing(rtok->values[i]); \
- continue; \
-@@ -1566,7 +1723,6 @@
- { \
- token_t *rtok = _rtok; \
- int i, j, k; \
-- assert( !atok->nsamples || !btok->nsamples ); \
- tok_init_samples(atok, btok, rtok); \
- if ( !atok->nsamples && !btok->nsamples ) \
- { \
-@@ -1576,7 +1732,7 @@
- token_t *tok = atok->nvalues ? atok : btok; \
- for (j=0; j<tok->nvalues; j++) \
- { \
-- if ( bcf_double_is_missing(tok->values[j]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[j]) ) \
- { \
- if ( missing_logic[2] ) { rtok->pass_site = 1; break; } \
- } \
-@@ -1587,15 +1743,19 @@
- { \
- for (i=0; i<atok->nvalues; i++) \
- { \
-- int amiss = bcf_double_is_missing(atok->values[i]) ? 1 : 0; \
-+ int amiss = bcf_double_is_missing_or_vector_end(atok->values[i]) ? 1 : 0; \
- for (j=0; j<btok->nvalues; j++) \
- { \
-- int nmiss = amiss + (bcf_double_is_missing(btok->values[j]) ? 1 : 0); \
-+ int nmiss = amiss + (bcf_double_is_missing_or_vector_end(btok->values[j]) ? 1 : 0); \
- if ( nmiss ) \
- { \
- if ( missing_logic[nmiss] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
- } \
-- else if ( atok->values[i] CMP_OP btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
-+ else if ( atok->values[i] > 16777216 || btok->values[j] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( atok->values[i] CMP_OP btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
-+ } \
-+ else if ( (float)atok->values[i] CMP_OP (float)btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
- } \
- } \
- } \
-@@ -1617,7 +1777,7 @@
- { \
- int miss = 0; \
- for (j=0; j<tok->nvalues; j++) \
-- miss |= bcf_double_is_missing(tok->values[j]) ? 1 : 0; \
-+ miss |= bcf_double_is_missing_or_vector_end(tok->values[j]) ? 1 : 0; \
- if ( missing_logic[++miss] ) \
- { \
- for (i=0; i<rtok->nsamples; i++) \
-@@ -1631,10 +1791,36 @@
- double *ptr = tok->values + i*tok->nval1; \
- int miss = 0; \
- for (j=0; j<tok->nval1; j++) \
-- miss |= bcf_double_is_missing(ptr[j]) ? 1 : 0; \
-+ miss |= bcf_double_is_missing_or_vector_end(ptr[j]) ? 1 : 0; \
- if ( missing_logic[++miss] ) { rtok->pass_samples[i] = missing_logic[miss]; rtok->pass_site = 1; } \
- } \
- } \
-+ else if ( atok->nsamples && btok->nsamples ) \
-+ { \
-+ if ( atok->nval1!=btok->nval1 ) error("Incompatible number of per-sample values in comparison: %d vs %d\n",atok->nval1,btok->nval1); \
-+ if ( atok->nsamples!=btok->nsamples ) error("Incompatible number samples in comparison: %d vs %d\n",atok->nsamples,btok->nsamples); \
-+ for (i=0; i<atok->nsamples; i++) \
-+ { \
-+ if ( !atok->usmpl[i] || !btok->usmpl[i] ) { rtok->usmpl[i] = 0; continue; } \
-+ double *aptr = atok->values + i*atok->nval1; \
-+ double *bptr = btok->values + i*btok->nval1; \
-+ for (j=0; j<atok->nval1; j++) \
-+ { \
-+ int nmiss = bcf_double_is_missing_or_vector_end(aptr[j]) ? 1 : 0; \
-+ if ( nmiss && !missing_logic[0] ) continue; /* any is missing => result is false */ \
-+ nmiss += (bcf_double_is_missing_or_vector_end(bptr[j]) ? 1 : 0); \
-+ if ( nmiss ) \
-+ { \
-+ if ( missing_logic[nmiss] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ else if ( aptr[j] > 16777216 || bptr[j] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( aptr[j] CMP_OP bptr[j] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ else if ( (float)aptr[j] CMP_OP (float)bptr[j] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ } \
-+ } \
- else \
- { \
- token_t *xtok = atok->nsamples ? atok : btok; \
-@@ -1646,16 +1832,20 @@
- double *yptr = ytok->values + i*ytok->nval1; \
- for (j=0; j<xtok->nval1; j++) \
- { \
-- int miss = bcf_double_is_missing(xptr[j]) ? 1 : 0; \
-+ int miss = bcf_double_is_missing_or_vector_end(xptr[j]) ? 1 : 0; \
- if ( miss && !missing_logic[0] ) continue; /* any is missing => result is false */ \
- for (k=0; k<ytok->nvalues; k++) \
- { \
-- int nmiss = miss + (bcf_double_is_missing(yptr[k]) ? 1 : 0); \
-+ int nmiss = miss + (bcf_double_is_missing_or_vector_end(yptr[k]) ? 1 : 0); \
- if ( nmiss ) \
- { \
- if ( missing_logic[nmiss] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
- } \
-- else if ( xptr[j] CMP_OP yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
-+ else if ( xptr[j] > 16777216 || yptr[k] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( xptr[j] CMP_OP yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
-+ } \
-+ else if ( (float)xptr[j] CMP_OP (float)yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
- } \
- } \
- } \
-@@ -1874,11 +2064,15 @@
- int *idxs2 = NULL, nidxs2 = 0, idx2 = 0;
-
- int set_samples = 0;
-- char *colon = rindex(tag_idx, ':');
-+ char *colon = strrchr(tag_idx, ':');
- if ( tag_idx[0]=='@' ) // file list with sample names
- {
- if ( !is_fmt ) error("Could not parse \"%s\". (Not a FORMAT tag yet a sample list provided.)\n", ori);
- char *fname = expand_path(tag_idx+1);
-+#ifdef _WIN32
-+ if (fname && strlen(fname) > 2 && fname[1] == ':') // Deal with Windows paths, such as 'C:\..'
-+ colon = strrchr(fname+2, ':');
-+#endif
- int nsmpl;
- char **list = hts_readlist(fname, 1, &nsmpl);
- if ( !list && colon )
-@@ -1887,7 +2081,7 @@
- tok->idxs = idxs2;
- tok->nidxs = nidxs2;
- tok->idx = idx2;
-- colon = rindex(fname, ':');
-+ colon = strrchr(fname, ':');
- *colon = 0;
- list = hts_readlist(fname, 1, &nsmpl);
- }
-@@ -1995,6 +2189,7 @@
- }
- static int filters_init1(filter_t *filter, char *str, int len, token_t *tok)
- {
-+ tok->tag_type = -1;
- tok->tok_type = TOK_VAL;
- tok->hdr_id = -1;
- tok->pass_site = -1;
-@@ -2065,6 +2260,7 @@
- tok->comparator = filters_cmp_filter;
- tok->tag = strdup("FILTER");
- filter->max_unpack |= BCF_UN_FLT;
-+ tok->tag_type = BCF_HL_FLT;
- return 0;
- }
- else if ( !strncasecmp(str,"ID",len) || !strncasecmp(str,"%ID",len) /* for backward compatibility */ )
-@@ -2073,6 +2269,12 @@
- tok->tag = strdup("ID");
- return 0;
- }
-+ else if ( !strncasecmp(str,"CHROM",len) )
-+ {
-+ tok->setter = &filters_set_chrom;
-+ tok->tag = strdup("CHROM");
-+ return 0;
-+ }
- else if ( !strncasecmp(str,"POS",len) )
- {
- tok->setter = &filters_set_pos;
-@@ -2111,12 +2313,14 @@
- }
- else if ( !strncasecmp(str,"N_MISSING",len) )
- {
-+ filter->max_unpack |= BCF_UN_FMT;
- tok->setter = &filters_set_nmissing;
- tok->tag = strdup("N_MISSING");
- return 0;
- }
- else if ( !strncasecmp(str,"F_MISSING",len) )
- {
-+ filter->max_unpack |= BCF_UN_FMT;
- tok->setter = &filters_set_nmissing;
- tok->tag = strdup("F_MISSING");
- return 0;
-@@ -2154,7 +2358,7 @@
- for (i=0; i<tok->nsamples; i++) tok->usmpl[i] = 1;
- }
-
-- tok->type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO;
-+ tok->tag_type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO;
- if ( is_fmt ) filter->max_unpack |= BCF_UN_FMT;
- if ( tok->hdr_id>=0 )
- {
-@@ -2264,17 +2468,26 @@
- free(tmp.s);
- return 0;
- }
-+ else if ( !strcasecmp(tmp.s,"ILEN") || !strcasecmp(tmp.s,"%ILEN") )
-+ {
-+ filter->max_unpack |= BCF_UN_STR;
-+ tok->setter = &filters_set_ilen;
-+ tok->tag = strdup("ILEN");
-+ free(tmp.s);
-+ return 0;
-+ }
-
- // is it a value? Here we parse as integer/float separately and use strtof
- // rather than strtod, because the more accurate double representation
- // would invalidate floating point comparisons like QUAL=59.2, obtained via
-- // htslib/vcf parser
-+ // htslib/vcf parser.
-+ // Update: use strtod() and force floats only in comparisons
- char *end;
- tok->threshold = strtol(tmp.s, &end, 10); // integer?
- if ( end - tmp.s != strlen(tmp.s) )
- {
- errno = 0;
-- tok->threshold = strtof(tmp.s, &end); // float?
-+ tok->threshold = strtod(tmp.s, &end); // float?
- if ( errno!=0 || end!=tmp.s+len ) error("[%s:%d %s] Error: the tag \"%s\" is not defined in the VCF header\n", __FILE__,__LINE__,__FUNCTION__,tmp.s);
- }
- tok->is_constant = 1;
-@@ -2455,7 +2668,7 @@
- if ( ret==-1 ) error("Missing quotes in: %s\n", str);
-
- // fprintf(stderr,"token=[%c] .. [%s] %d\n", TOKEN_STRING[ret], tmp, len);
-- // int i; for (i=0; i<nops; i++) fprintf(stderr," .%c", TOKEN_STRING[ops[i]]); fprintf(stderr,"\n");
-+ // int i; for (i=0; i<nops; i++) fprintf(stderr," .%c", TOKEN_STRING[ops[i].tok_type]); fprintf(stderr,"\n");
-
- if ( ret==TOK_LFT ) // left bracket
- {
-@@ -2502,8 +2715,18 @@
- tok->hdr_id = -1;
- tok->pass_site = -1;
- tok->threshold = -1.0;
-- if ( !strncasecmp(tmp-len,"N_PASS",6) ) { tok->func = func_npass; tok->tag = strdup("N_PASS"); }
-- else if ( !strncasecmp(tmp-len,"F_PASS",6) ) { tok->func = func_npass; tok->tag = strdup("F_PASS"); }
-+ if ( !strncasecmp(tmp-len,"N_PASS",6) )
-+ {
-+ filter->max_unpack |= BCF_UN_FMT;
-+ tok->func = func_npass;
-+ tok->tag = strdup("N_PASS");
-+ }
-+ else if ( !strncasecmp(tmp-len,"F_PASS",6) )
-+ {
-+ filter->max_unpack |= BCF_UN_FMT;
-+ tok->func = func_npass;
-+ tok->tag = strdup("F_PASS");
-+ }
- else error("The function \"%s\" is not supported\n", tmp-len);
- continue;
- }
-@@ -2607,7 +2830,8 @@
- // list of operators and convert the strings (e.g. "PASS") to BCF ids. The string value token must be
- // just before or after the FILTER token and they must be followed with a comparison operator.
- // At this point we also initialize regex expressions which, in RPN, must preceed the LIKE/NLIKE operator.
-- // Additionally, treat "." as missing value rather than a string in numeric equalities.
-+ // Additionally, treat "." as missing value rather than a string in numeric equalities; that
-+ // @file is only used with ID; etc.
- // This code is fragile: improve me.
- int i;
- for (i=0; i<nout; i++)
-@@ -2615,6 +2839,12 @@
- if ( i+1<nout && (out[i].tok_type==TOK_LT || out[i].tok_type==TOK_BT) && out[i+1].tok_type==TOK_EQ )
- error("Error parsing the expression: \"%s\"\n", filter->str);
-
-+ if ( out[i].hash )
-+ {
-+ int j = out[i+1].tok_type==TOK_VAL ? i+1 : i-1;
-+ if ( out[j].comparator!=filters_cmp_id )
-+ error("Error: could not parse the expression. Note that the \"@file_name\" syntax can be currently used with ID column only.\n");
-+ }
- if ( out[i].tok_type==TOK_OR || out[i].tok_type==TOK_OR_VEC )
- out[i].func = vector_logic_or;
- if ( out[i].tok_type==TOK_AND || out[i].tok_type==TOK_AND_VEC )
-@@ -2629,7 +2859,7 @@
- int set_missing = 0;
- if ( out[k].hdr_id>0 )
- {
-- int type = bcf_hdr_id2type(filter->hdr,out[k].type,out[k].hdr_id);
-+ int type = bcf_hdr_id2type(filter->hdr,out[k].tag_type,out[k].hdr_id);
- if ( type==BCF_HT_INT ) set_missing = 1;
- else if ( type==BCF_HT_REAL ) set_missing = 1;
- }
-@@ -2655,7 +2885,7 @@
- }
- if ( out[i].tok_type!=TOK_VAL ) continue;
- if ( !out[i].tag ) continue;
-- if ( !strcmp(out[i].tag,"TYPE") )
-+ if ( out[i].setter==filters_set_type )
- {
- if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str);
- int itok, ival;
-@@ -2669,6 +2899,7 @@
- else if ( !strcasecmp(out[ival].key,"mnp") || !strcasecmp(out[ival].key,"mnps") ) { out[ival].threshold = VCF_MNP<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"other") ) { out[ival].threshold = VCF_OTHER<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"bnd") ) { out[ival].threshold = VCF_BND<<1; out[ival].is_str = 0; }
-+ else if ( !strcasecmp(out[ival].key,"overlap") ) { out[ival].threshold = VCF_OVERLAP<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"ref") ) { out[ival].threshold = 1; out[ival].is_str = 0; }
- else error("The type \"%s\" not recognised: %s\n", out[ival].key, filter->str);
- if ( out[itok].tok_type==TOK_LIKE || out[itok].tok_type==TOK_NLIKE ) out[itok].comparator = filters_cmp_bit_and;
-@@ -2703,7 +2934,7 @@
- else if ( !strcasecmp(out[ival].key,"r") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]=0; } // r
- continue;
- }
-- if ( !strcmp(out[i].tag,"FILTER") )
-+ if ( out[i].tag_type==BCF_HL_FLT )
- {
- if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str);
- int itok = i, ival;
-@@ -2732,13 +2963,17 @@
- filter->nsamples = filter->max_unpack&BCF_UN_FMT ? bcf_hdr_nsamples(filter->hdr) : 0;
- for (i=0; i<nout; i++)
- {
-- if ( out[i].tok_type==TOK_MAX ) { out[i].func = func_max; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_MIN ) { out[i].func = func_min; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_SUM ) { out[i].func = func_sum; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_ABS ) { out[i].func = func_abs; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_CNT ) { out[i].func = func_count; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_LEN ) { out[i].func = func_strlen; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-+ if ( out[i].tok_type==TOK_MAX ) { out[i].func = func_max; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_MIN ) { out[i].func = func_min; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_MEDIAN ) { out[i].func = func_median; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_STDEV ) { out[i].func = func_stddev; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_SUM ) { out[i].func = func_sum; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_ABS ) { out[i].func = func_abs; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_CNT ) { out[i].func = func_count; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_LEN ) { out[i].func = func_strlen; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_PHRED ) { out[i].func = func_phred; out[i].tok_type = TOK_FUNC; }
- else if ( out[i].tok_type==TOK_BINOM ) { out[i].func = func_binom; out[i].tok_type = TOK_FUNC; }
- else if ( out[i].tok_type==TOK_PERLSUB ) { out[i].func = perl_exec; out[i].tok_type = TOK_FUNC; }
- hts_expand0(double,1,out[i].mvalues,out[i].values);
-@@ -2874,6 +3109,8 @@
- }
- else
- {
-+ if ( is_str==1 ) error("Error: cannot use arithmetic operators to compare strings and numbers\n");
-+
- // Determine what to do with one [1] or both [2] sides missing. The first field [0] gives [1]|[2]
- int missing_logic[] = {0,0,0};
- if ( filter->filters[i].tok_type == TOK_EQ ) { missing_logic[0] = missing_logic[2] = 1; }
-@@ -2893,7 +3130,6 @@
- CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],&filter->filters[i],>=,missing_logic)
- else
- error("todo: %s:%d .. type=%d\n", __FILE__,__LINE__,filter->filters[i].tok_type);
--
- }
- filter->flt_stack[nstack-2] = &filter->filters[i];
- nstack--;
---- python-pysam.orig/bcftools/filter.c.pysam.c
-+++ python-pysam/bcftools/filter.c.pysam.c
-@@ -30,7 +30,10 @@
- #include <errno.h>
- #include <math.h>
- #include <sys/types.h>
-+#include <inttypes.h>
-+#ifndef _WIN32
- #include <pwd.h>
-+#endif
- #include <regex.h>
- #include <htslib/khash_str2int.h>
- #include <htslib/hts_defs.h>
-@@ -55,8 +58,8 @@
- # define __FUNCTION__ __func__
- #endif
-
--uint64_t bcf_double_missing = 0x7ff0000000000001;
--uint64_t bcf_double_vector_end = 0x7ff0000000000002;
-+static const uint64_t bcf_double_missing = 0x7ff0000000000001;
-+static const uint64_t bcf_double_vector_end = 0x7ff0000000000002;
- static inline void bcf_double_set(double *ptr, uint64_t value)
- {
- union { uint64_t i; double d; } u;
-@@ -73,6 +76,7 @@
- #define bcf_double_set_missing(x) bcf_double_set(&(x),bcf_double_missing)
- #define bcf_double_is_vector_end(x) bcf_double_test((x),bcf_double_vector_end)
- #define bcf_double_is_missing(x) bcf_double_test((x),bcf_double_missing)
-+#define bcf_double_is_missing_or_vector_end(x) (bcf_double_test((x),bcf_double_missing) || bcf_double_test((x),bcf_double_vector_end))
-
-
- typedef struct _token_t
-@@ -84,7 +88,7 @@
- char *tag; // for debugging and printout only, VCF tag name
- double threshold; // filtering threshold
- int is_constant; // the threshold is set
-- int hdr_id, type; // BCF header lookup ID and one of BCF_HT_* types
-+ int hdr_id, tag_type; // BCF header lookup ID and one of BCF_HL_* types
- int idx; // 0-based index to VCF vectors,
- // -2: list (e.g. [0,1,2] or [1..3] or [1..] or any field[*], which is equivalent to [0..])
- int *idxs; // set indexes to 0 to exclude, to 1 to include, and last element negative if unlimited
-@@ -153,11 +157,14 @@
- #define TOK_CNT 26
- #define TOK_PERLSUB 27
- #define TOK_BINOM 28
--
--// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
--// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l f c p
--static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8, 8, 8, 8};
--#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^S.lfcp"
-+#define TOK_PHRED 29
-+#define TOK_MEDIAN 30
-+#define TOK_STDEV 31
-+
-+// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
-+// ( ) [ < = > ] ! | & + - * / M m a A O ~ ^ S . l f c p b P i s
-+static int op_prec[] = {0,1,1,5,5,5,5,5,5,2,3, 6, 6, 7, 7, 8, 8, 8, 3, 2, 5, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
-+#define TOKEN_STRING "x()[<=>]!|&+-*/MmaAO~^S.lfcpis"
-
- // Return negative values if it is a function with variable number of arguments
- static int filters_next_token(char **str, int *len)
-@@ -181,12 +188,16 @@
-
- if ( !strncasecmp(tmp,"MAX(",4) ) { (*str) += 3; return TOK_MAX; }
- if ( !strncasecmp(tmp,"MIN(",4) ) { (*str) += 3; return TOK_MIN; }
-+ if ( !strncasecmp(tmp,"MEAN(",5) ) { (*str) += 4; return TOK_AVG; }
-+ if ( !strncasecmp(tmp,"MEDIAN(",7) ) { (*str) += 6; return TOK_MEDIAN; }
- if ( !strncasecmp(tmp,"AVG(",4) ) { (*str) += 3; return TOK_AVG; }
-+ if ( !strncasecmp(tmp,"STDEV(",6) ) { (*str) += 5; return TOK_STDEV; }
- if ( !strncasecmp(tmp,"SUM(",4) ) { (*str) += 3; return TOK_SUM; }
- if ( !strncasecmp(tmp,"ABS(",4) ) { (*str) += 3; return TOK_ABS; }
- if ( !strncasecmp(tmp,"COUNT(",4) ) { (*str) += 5; return TOK_CNT; }
- if ( !strncasecmp(tmp,"STRLEN(",7) ) { (*str) += 6; return TOK_LEN; }
- if ( !strncasecmp(tmp,"BINOM(",6) ) { (*str) += 5; return -TOK_BINOM; }
-+ if ( !strncasecmp(tmp,"PHRED(",6) ) { (*str) += 5; return TOK_PHRED; }
- if ( !strncasecmp(tmp,"%MAX(",5) ) { (*str) += 4; return TOK_MAX; } // for backward compatibility
- if ( !strncasecmp(tmp,"%MIN(",5) ) { (*str) += 4; return TOK_MIN; } // for backward compatibility
- if ( !strncasecmp(tmp,"%AVG(",5) ) { (*str) += 4; return TOK_AVG; } // for backward compatibility
-@@ -197,6 +208,7 @@
- if ( !strncasecmp(tmp,"PERL.",5) ) { (*str) += 5; return -TOK_PERLSUB; }
- if ( !strncasecmp(tmp,"N_PASS(",7) ) { *len = 6; (*str) += 6; return -TOK_FUNC; }
- if ( !strncasecmp(tmp,"F_PASS(",7) ) { *len = 6; (*str) += 6; return -TOK_FUNC; }
-+ if ( !strncasecmp(tmp,"%ILEN",5) ) { *len = 5; return TOK_VAL; } // to be able to distinguish between INFO/ILEN and on-the-fly ILEN
-
- if ( tmp[0]=='@' ) // file name
- {
-@@ -282,28 +294,30 @@
- }
-
-
--/*
-+/*
- Simple path expansion, expands ~/, ~user, $var. The result must be freed by the caller.
-
-- Based on jkb's staden code with some adjustements.
-+ Based on jkb's staden code with some adjustments.
- https://sourceforge.net/p/staden/code/HEAD/tree/staden/trunk/src/Misc/getfile.c#l123
- */
- char *expand_path(char *path)
- {
--#ifdef _WIN32
-- return strdup(path); // windows expansion: todo
--#endif
--
- kstring_t str = {0,0,0};
-
- if ( path[0] == '~' )
- {
- if ( !path[1] || path[1] == '/' )
- {
-+#ifdef _WIN32
-+ kputs(getenv("HOMEDRIVE"), &str);
-+ kputs(getenv("HOMEPATH"), &str);
-+#else
- // ~ or ~/path
- kputs(getenv("HOME"), &str);
- if ( path[1] ) kputs(path+1, &str);
-+#endif
- }
-+#ifndef _WIN32
- else
- {
- // user name: ~pd3/path
-@@ -317,13 +331,18 @@
- else kputs(pwentry->pw_dir, &str);
- kputs(end, &str);
- }
-- return str.s;
-+#endif
-+ return ks_release(&str);
- }
- if ( path[0] == '$' )
- {
- char *var = getenv(path+1);
-- if ( var ) path = var;
-+ if ( var ) {
-+ kputs(var, &str);
-+ return ks_release(&str);
-+ }
- }
-+
- return strdup(path);
- }
-
-@@ -446,6 +465,8 @@
- return;
- }
-
-+ if ( !btok->str_value.l ) error("Error occurred while evaluating the expression\n");
-+
- if ( rtok->tok_type==TOK_EQ )
- rtok->pass_site = strcmp(btok->str_value.s,line->d.id) ? 0 : 1;
- else
-@@ -501,6 +522,14 @@
- return -1; // this shouldn't happen
- }
-
-+static void filters_set_chrom(filter_t *flt, bcf1_t *line, token_t *tok)
-+{
-+ tok->str_value.l = 0;
-+ kputs(bcf_seqname(flt->hdr,line), &tok->str_value);
-+ tok->nvalues = tok->str_value.l;
-+ tok->is_str = 1;
-+}
-+
- static void filters_set_pos(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- tok->values[0] = line->pos+1;
-@@ -642,7 +671,7 @@
- static void filters_set_format_int(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int nvals;
- if ( (nvals=bcf_get_format_int32(flt->hdr,line,tok->tag,&flt->tmpi,&flt->mtmpi))<0 )
-@@ -661,8 +690,10 @@
- {
- if ( !tok->usmpl[i] ) continue;
- int32_t *ptr = flt->tmpi + i*nsrc1;
-- if ( tok->idx>=nsrc1 || ptr[tok->idx]==bcf_int32_missing || ptr[tok->idx]==bcf_int32_vector_end )
-+ if ( tok->idx>=nsrc1 || ptr[tok->idx]==bcf_int32_missing )
- bcf_double_set_missing(tok->values[i]);
-+ else if ( ptr[tok->idx]==bcf_int32_vector_end )
-+ bcf_double_set_vector_end(tok->values[i]);
- else
- tok->values[i] = ptr[tok->idx];
- }
-@@ -679,24 +710,31 @@
- for (k=0; k<kend; k++)
- {
- if ( k<tok->nidxs && !tok->idxs[k] ) continue;
-- if ( src[k]==bcf_int32_missing || src[k]==bcf_int32_vector_end )
-+ if ( src[k]==bcf_int32_missing )
- bcf_double_set_missing(dst[j]);
-+ else if ( src[k]==bcf_int32_vector_end )
-+ bcf_double_set_vector_end(dst[j]);
- else
- dst[j] = src[k];
- j++;
- }
-- while (j < tok->nval1)
-+ if ( j==0 )
- {
- bcf_double_set_missing(dst[j]);
- j++;
- }
-+ while (j < tok->nval1)
-+ {
-+ bcf_double_set_vector_end(dst[j]);
-+ j++;
-+ }
- }
- }
- }
- static void filters_set_format_float(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int nvals;
- if ( (nvals=bcf_get_format_float(flt->hdr,line,tok->tag,&flt->tmpf,&flt->mtmpf))<0 )
-@@ -715,8 +753,10 @@
- {
- if ( !tok->usmpl[i] ) continue;
- float *ptr = flt->tmpf + i*nsrc1;
-- if ( tok->idx>=nsrc1 || bcf_float_is_missing(ptr[tok->idx]) || bcf_float_is_vector_end(ptr[tok->idx]) )
-+ if ( tok->idx>=nsrc1 || bcf_float_is_missing(ptr[tok->idx]) )
- bcf_double_set_missing(tok->values[i]);
-+ else if ( bcf_float_is_vector_end(ptr[tok->idx]) )
-+ bcf_double_set_vector_end(tok->values[i]);
- else
- tok->values[i] = ptr[tok->idx];
- }
-@@ -733,24 +773,31 @@
- for (k=0; k<kend; k++)
- {
- if ( k<tok->nidxs && !tok->idxs[k] ) continue;
-- if ( bcf_float_is_missing(src[k]) || bcf_float_is_vector_end(src[k]) )
-+ if ( bcf_float_is_missing(src[k]) )
- bcf_double_set_missing(dst[j]);
-+ else if ( bcf_float_is_vector_end(src[k]) )
-+ bcf_double_set_vector_end(dst[j]);
- else
- dst[j] = src[k];
- j++;
- }
-- while (j < tok->nval1)
-+ if ( j==0 )
- {
- bcf_double_set_missing(dst[j]);
- j++;
- }
-+ while (j < tok->nval1)
-+ {
-+ bcf_double_set_vector_end(dst[j]);
-+ j++;
-+ }
- }
- }
- }
- static void filters_set_format_string(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- if ( line->n_sample != tok->nsamples )
-- error("Incorrect number of FORMAT fields at %s:%d .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-+ error("Incorrect number of FORMAT fields at %s:%"PRId64" .. %s, %d vs %d\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,tok->tag,line->n_sample,tok->nsamples);
-
- int i, ndim = tok->str_value.m;
- int nstr = bcf_get_format_char(flt->hdr, line, tok->tag, &tok->str_value.s, &ndim);
-@@ -870,7 +917,7 @@
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not lineognised: %d at %s:%d\n",fmt->type, bcf_seqname(flt->hdr,line),line->pos+1); break;
-+ default: error("The GT type is not lineognised: %d at %s:%"PRId64"\n",fmt->type, bcf_seqname(flt->hdr,line),(int64_t) line->pos+1); break;
- }
- #undef BRANCH_INT
- assert( tok->nsamples == nsmpl );
-@@ -918,6 +965,19 @@
- tok->nvalues = tok->str_value.l;
- tok->nval1 = blen;
- }
-+static void filters_set_ilen(filter_t *flt, bcf1_t *line, token_t *tok)
-+{
-+ tok->nvalues = line->n_allele - 1;
-+ hts_expand(double,tok->nvalues,tok->mvalues,tok->values);
-+
-+ int i, rlen = strlen(line->d.allele[0]);
-+ for (i=1; i<line->n_allele; i++)
-+ {
-+ int alen = strlen(line->d.allele[i]);
-+ if ( rlen==alen ) bcf_double_set_missing(tok->values[i-1]);
-+ else tok->values[i-1] = alen - rlen;
-+ }
-+}
- static void filters_set_ref_string(filter_t *flt, bcf1_t *line, token_t *tok)
- {
- tok->str_value.l = 0;
-@@ -1016,10 +1076,16 @@
- if ( rtok->pass_samples[i] ) npass++;
- }
-
-- assert( rtok->values );
-- rtok->nvalues = 1;
-- rtok->values[0] = rtok->tag[0]=='N' ? npass : (line->n_sample ? 1.0*npass/line->n_sample : 0);
-- rtok->nsamples = 0;
-+ hts_expand(double,rtok->nsamples,rtok->mvalues,rtok->values);
-+ double value = rtok->tag[0]=='N' ? npass : (line->n_sample ? 1.0*npass/line->n_sample : 0);
-+ rtok->nval1 = 1;
-+ rtok->nvalues = rtok->nsamples;
-+
-+ // Set per-sample status so that `query -i 'F_PASS(GT!="mis" & GQ >= 20) > 0.5'` or +trio-stats
-+ // consider only the passing site AND samples. The values for failed samples is set to -1 so
-+ // that it can never conflict with valid expressions.
-+ for (i=0; i<rtok->nsamples; i++)
-+ rtok->values[i] = rtok->pass_samples[i] ? value : -1;
-
- return 1;
- }
-@@ -1105,7 +1171,7 @@
- int i, has_value = 0;
- for (i=0; i<tok->nvalues; i++)
- {
-- if ( bcf_double_is_missing(tok->values[i]) || bcf_double_is_vector_end(tok->values[i]) ) continue;
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
- has_value = 1;
- if ( val < tok->values[i] ) val = tok->values[i];
- }
-@@ -1125,7 +1191,7 @@
- int i, has_value = 0;
- for (i=0; i<tok->nvalues; i++)
- {
-- if ( bcf_double_is_missing(tok->values[i]) || bcf_double_is_vector_end(tok->values[i]) ) continue;
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
- has_value = 1;
- if ( val > tok->values[i] ) val = tok->values[i];
- }
-@@ -1144,7 +1210,7 @@
- double val = 0;
- int i, n = 0;
- for (i=0; i<tok->nvalues; i++)
-- if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; }
-+ if ( !bcf_double_is_missing_or_vector_end(tok->values[i]) ) { val += tok->values[i]; n++; }
- if ( n )
- {
- rtok->values[0] = val / n;
-@@ -1152,6 +1218,61 @@
- }
- return 1;
- }
-+static int compare_doubles(const void *lhs, const void *rhs)
-+{
-+ double arg1 = *(const double*) lhs;
-+ double arg2 = *(const double*) rhs;
-+ if (arg1 < arg2) return -1;
-+ if (arg1 > arg2) return 1;
-+ return 0;
-+}
-+static int func_median(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ rtok->nvalues = 0;
-+ if ( !tok->nvalues ) return 1;
-+ int i, n = 0;
-+ for (i=0; i<tok->nvalues; i++)
-+ {
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
-+ if ( n < i ) tok->values[n] = tok->values[i];
-+ n++;
-+ }
-+ if ( !n ) return 1;
-+ if ( n==1 ) rtok->values[0] = tok->values[0];
-+ else
-+ {
-+ qsort(tok->values, n, sizeof(double), compare_doubles);
-+ rtok->values[0] = n % 2 ? tok->values[n/2] : (tok->values[n/2-1] + tok->values[n/2]) * 0.5;
-+ }
-+ rtok->nvalues = 1;
-+ return 1;
-+}
-+static int func_stddev(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ rtok->nvalues = 0;
-+ if ( !tok->nvalues ) return 1;
-+ int i, n = 0;
-+ for (i=0; i<tok->nvalues; i++)
-+ {
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) continue;
-+ if ( n < i ) tok->values[n] = tok->values[i];
-+ n++;
-+ }
-+ if ( !n ) return 1;
-+ if ( n==1 ) rtok->values[0] = 0;
-+ else
-+ {
-+ double sdev = 0, avg = 0;
-+ for (i=0; i<n; i++) avg += tok->values[n];
-+ avg /= n;
-+ for (i=0; i<n; i++) sdev += (tok->values[n] - avg) * (tok->values[n] - avg);
-+ rtok->values[0] = sqrt(sdev/n);
-+ }
-+ rtok->nvalues = 1;
-+ return 1;
-+}
- static int func_sum(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
- rtok->nvalues = 0;
-@@ -1160,7 +1281,7 @@
- double val = 0;
- int i, n = 0;
- for (i=0; i<tok->nvalues; i++)
-- if ( !bcf_double_is_missing(tok->values[i]) ) { val += tok->values[i]; n++; }
-+ if ( !bcf_double_is_missing_or_vector_end(tok->values[i]) ) { val += tok->values[i]; n++; }
- if ( n )
- {
- rtok->values[0] = val;
-@@ -1179,17 +1300,28 @@
- int i;
- for (i=0; i<tok->nvalues; i++)
- if ( bcf_double_is_missing(tok->values[i]) ) bcf_double_set_missing(rtok->values[i]);
-- else rtok->values[i] = fabs(tok->values[i]);
-+ else if ( !bcf_double_is_vector_end(tok->values[i]) ) rtok->values[i] = fabs(tok->values[i]);
- return 1;
- }
- static int func_count(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
- token_t *tok = stack[nstack - 1];
-- if ( !tok->nsamples ) error("COUNT() can be applied only on FORMAT fields\n");
--
- int i, cnt = 0;
-- for (i=0; i<tok->nsamples; i++)
-- if ( tok->pass_samples[i] ) cnt++;
-+ if ( !tok->nsamples )
-+ {
-+ if ( tok->is_str )
-+ {
-+ if ( tok->str_value.l ) cnt = 1;
-+ for (i=0; i<tok->str_value.l; i++) if ( tok->str_value.s[i]==',' ) cnt++;
-+ }
-+ else
-+ cnt = tok->nvalues;
-+ }
-+ else
-+ {
-+ for (i=0; i<tok->nsamples; i++)
-+ if ( tok->pass_samples[i] ) cnt++;
-+ }
-
- rtok->nvalues = 1;
- rtok->values[0] = cnt;
-@@ -1305,10 +1437,10 @@
- }
- int idx1 = bcf_gt_allele(ptr[0]);
- int idx2 = bcf_gt_allele(ptr[1]);
-- if ( idx1>=line->n_allele ) error("Incorrect allele index at %s:%d, sample %s\n", bcf_seqname(flt->hdr,line),line->pos+1,flt->hdr->samples[i]);
-- if ( idx2>=line->n_allele ) error("Incorrect allele index at %s:%d, sample %s\n", bcf_seqname(flt->hdr,line),line->pos+1,flt->hdr->samples[i]);
-+ if ( idx1>=line->n_allele ) error("Incorrect allele index at %s:%"PRId64", sample %s\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,flt->hdr->samples[i]);
-+ if ( idx2>=line->n_allele ) error("Incorrect allele index at %s:%"PRId64", sample %s\n", bcf_seqname(flt->hdr,line),(int64_t) line->pos+1,flt->hdr->samples[i]);
- double *vals = tok->values + tok->nval1*i;
-- if ( bcf_double_is_missing(vals[idx1]) || bcf_double_is_missing(vals[idx2]) )
-+ if ( bcf_double_is_missing_or_vector_end(vals[idx1]) || bcf_double_is_missing_or_vector_end(vals[idx2]) )
- {
- bcf_double_set_missing(rtok->values[i]);
- continue;
-@@ -1326,13 +1458,13 @@
- // the fields given explicitly: binom(AD[:0],AD[:1])
- token_t *tok2 = stack[istack+1];
- if ( tok->nval1!=1 || tok2->nval1!=1 )
-- error("Expected one value per binom() argument, found %d and %d at %s:%d\n",tok->nval1,tok2->nval1, bcf_seqname(flt->hdr,line),line->pos+1);
-+ error("Expected one value per binom() argument, found %d and %d at %s:%"PRId64"\n",tok->nval1,tok2->nval1, bcf_seqname(flt->hdr,line),(int64_t) line->pos+1);
- for (i=0; i<rtok->nsamples; i++)
- {
- if ( !rtok->usmpl[i] ) continue;
- double *ptr1 = tok->values + tok->nval1*i;
- double *ptr2 = tok2->values + tok2->nval1*i;
-- if ( bcf_double_is_missing(ptr1[0]) || bcf_double_is_missing(ptr2[0]) )
-+ if ( bcf_double_is_missing_or_vector_end(ptr1[0]) || bcf_double_is_missing_or_vector_end(ptr2[0]) )
- {
- bcf_double_set_missing(rtok->values[i]);
- continue;
-@@ -1372,7 +1504,7 @@
- ptr2 = &tok2->values[0];
- }
- }
-- if ( !ptr1 || !ptr2 || bcf_double_is_missing(ptr1[0]) || bcf_double_is_missing(ptr2[0]) )
-+ if ( !ptr1 || !ptr2 || bcf_double_is_missing_or_vector_end(ptr1[0]) || bcf_double_is_missing_or_vector_end(ptr2[0]) )
- bcf_double_set_missing(rtok->values[0]);
- else
- {
-@@ -1383,6 +1515,31 @@
- }
- return rtok->nargs;
- }
-+static int func_phred(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
-+{
-+ token_t *tok = stack[nstack - 1];
-+ if ( tok->is_str ) error("PHRED() can be applied only on numeric values\n");
-+
-+ rtok->nsamples = tok->nsamples;
-+ rtok->nval1 = tok->nval1;
-+ memcpy(rtok->pass_samples, tok->pass_samples, rtok->nsamples*sizeof(*rtok->pass_samples));
-+ assert(tok->usmpl);
-+ if ( !rtok->usmpl )
-+ {
-+ rtok->usmpl = (uint8_t*) malloc(tok->nsamples*sizeof(*rtok->usmpl));
-+ memcpy(rtok->usmpl, tok->usmpl, tok->nsamples*sizeof(*rtok->usmpl));
-+ }
-+ rtok->nvalues = tok->nvalues;
-+ if ( !tok->nvalues ) return 1;
-+
-+ hts_expand(double, rtok->nvalues, rtok->mvalues, rtok->values);
-+ int i;
-+ for (i=0; i<tok->nvalues; i++)
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[i]) ) bcf_double_set_missing(rtok->values[i]);
-+ else rtok->values[i] = -4.34294481903*log(tok->values[i]);
-+
-+ return 1;
-+}
- inline static void tok_init_values(token_t *atok, token_t *btok, token_t *rtok)
- {
- token_t *tok = atok->nvalues > btok->nvalues ? atok : btok;
-@@ -1416,7 +1573,7 @@
- assert( atok->nsamples==btok->nsamples ); \
- for (i=0; i<atok->nvalues; i++) \
- { \
-- if ( bcf_double_is_missing(atok->values[i]) || bcf_double_is_missing(btok->values[i]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(atok->values[i]) || bcf_double_is_missing_or_vector_end(btok->values[i]) ) \
- { \
- bcf_double_set_missing(rtok->values[i]); \
- continue; \
-@@ -1430,11 +1587,11 @@
- token_t *xtok = atok->nsamples ? atok : btok; \
- token_t *ytok = atok->nsamples ? btok : atok; \
- assert( ytok->nvalues==1 ); \
-- if ( !bcf_double_is_missing(ytok->values[0]) ) \
-+ if ( !bcf_double_is_missing_or_vector_end(ytok->values[0]) ) \
- { \
- for (i=0; i<xtok->nvalues; i++) \
- { \
-- if ( bcf_double_is_missing(xtok->values[i]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(xtok->values[i]) ) \
- { \
- bcf_double_set_missing(rtok->values[i]); \
- continue; \
-@@ -1568,7 +1725,6 @@
- { \
- token_t *rtok = _rtok; \
- int i, j, k; \
-- assert( !atok->nsamples || !btok->nsamples ); \
- tok_init_samples(atok, btok, rtok); \
- if ( !atok->nsamples && !btok->nsamples ) \
- { \
-@@ -1578,7 +1734,7 @@
- token_t *tok = atok->nvalues ? atok : btok; \
- for (j=0; j<tok->nvalues; j++) \
- { \
-- if ( bcf_double_is_missing(tok->values[j]) ) \
-+ if ( bcf_double_is_missing_or_vector_end(tok->values[j]) ) \
- { \
- if ( missing_logic[2] ) { rtok->pass_site = 1; break; } \
- } \
-@@ -1589,15 +1745,19 @@
- { \
- for (i=0; i<atok->nvalues; i++) \
- { \
-- int amiss = bcf_double_is_missing(atok->values[i]) ? 1 : 0; \
-+ int amiss = bcf_double_is_missing_or_vector_end(atok->values[i]) ? 1 : 0; \
- for (j=0; j<btok->nvalues; j++) \
- { \
-- int nmiss = amiss + (bcf_double_is_missing(btok->values[j]) ? 1 : 0); \
-+ int nmiss = amiss + (bcf_double_is_missing_or_vector_end(btok->values[j]) ? 1 : 0); \
- if ( nmiss ) \
- { \
- if ( missing_logic[nmiss] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
- } \
-- else if ( atok->values[i] CMP_OP btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
-+ else if ( atok->values[i] > 16777216 || btok->values[j] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( atok->values[i] CMP_OP btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
-+ } \
-+ else if ( (float)atok->values[i] CMP_OP (float)btok->values[j] ) { rtok->pass_site = 1; i = atok->nvalues; break; } \
- } \
- } \
- } \
-@@ -1619,7 +1779,7 @@
- { \
- int miss = 0; \
- for (j=0; j<tok->nvalues; j++) \
-- miss |= bcf_double_is_missing(tok->values[j]) ? 1 : 0; \
-+ miss |= bcf_double_is_missing_or_vector_end(tok->values[j]) ? 1 : 0; \
- if ( missing_logic[++miss] ) \
- { \
- for (i=0; i<rtok->nsamples; i++) \
-@@ -1633,10 +1793,36 @@
- double *ptr = tok->values + i*tok->nval1; \
- int miss = 0; \
- for (j=0; j<tok->nval1; j++) \
-- miss |= bcf_double_is_missing(ptr[j]) ? 1 : 0; \
-+ miss |= bcf_double_is_missing_or_vector_end(ptr[j]) ? 1 : 0; \
- if ( missing_logic[++miss] ) { rtok->pass_samples[i] = missing_logic[miss]; rtok->pass_site = 1; } \
- } \
- } \
-+ else if ( atok->nsamples && btok->nsamples ) \
-+ { \
-+ if ( atok->nval1!=btok->nval1 ) error("Incompatible number of per-sample values in comparison: %d vs %d\n",atok->nval1,btok->nval1); \
-+ if ( atok->nsamples!=btok->nsamples ) error("Incompatible number samples in comparison: %d vs %d\n",atok->nsamples,btok->nsamples); \
-+ for (i=0; i<atok->nsamples; i++) \
-+ { \
-+ if ( !atok->usmpl[i] || !btok->usmpl[i] ) { rtok->usmpl[i] = 0; continue; } \
-+ double *aptr = atok->values + i*atok->nval1; \
-+ double *bptr = btok->values + i*btok->nval1; \
-+ for (j=0; j<atok->nval1; j++) \
-+ { \
-+ int nmiss = bcf_double_is_missing_or_vector_end(aptr[j]) ? 1 : 0; \
-+ if ( nmiss && !missing_logic[0] ) continue; /* any is missing => result is false */ \
-+ nmiss += (bcf_double_is_missing_or_vector_end(bptr[j]) ? 1 : 0); \
-+ if ( nmiss ) \
-+ { \
-+ if ( missing_logic[nmiss] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ else if ( aptr[j] > 16777216 || bptr[j] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( aptr[j] CMP_OP bptr[j] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ else if ( (float)aptr[j] CMP_OP (float)bptr[j] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; break; } \
-+ } \
-+ } \
-+ } \
- else \
- { \
- token_t *xtok = atok->nsamples ? atok : btok; \
-@@ -1648,16 +1834,20 @@
- double *yptr = ytok->values + i*ytok->nval1; \
- for (j=0; j<xtok->nval1; j++) \
- { \
-- int miss = bcf_double_is_missing(xptr[j]) ? 1 : 0; \
-+ int miss = bcf_double_is_missing_or_vector_end(xptr[j]) ? 1 : 0; \
- if ( miss && !missing_logic[0] ) continue; /* any is missing => result is false */ \
- for (k=0; k<ytok->nvalues; k++) \
- { \
-- int nmiss = miss + (bcf_double_is_missing(yptr[k]) ? 1 : 0); \
-+ int nmiss = miss + (bcf_double_is_missing_or_vector_end(yptr[k]) ? 1 : 0); \
- if ( nmiss ) \
- { \
- if ( missing_logic[nmiss] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
- } \
-- else if ( xptr[j] CMP_OP yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
-+ else if ( xptr[j] > 16777216 || yptr[k] > 16777216 ) /* Ugly, see #871 */ \
-+ { \
-+ if ( xptr[j] CMP_OP yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
-+ } \
-+ else if ( (float)xptr[j] CMP_OP (float)yptr[k] ) { rtok->pass_samples[i] = 1; rtok->pass_site = 1; j = xtok->nval1; break; } \
- } \
- } \
- } \
-@@ -1876,11 +2066,15 @@
- int *idxs2 = NULL, nidxs2 = 0, idx2 = 0;
-
- int set_samples = 0;
-- char *colon = rindex(tag_idx, ':');
-+ char *colon = strrchr(tag_idx, ':');
- if ( tag_idx[0]=='@' ) // file list with sample names
- {
- if ( !is_fmt ) error("Could not parse \"%s\". (Not a FORMAT tag yet a sample list provided.)\n", ori);
- char *fname = expand_path(tag_idx+1);
-+#ifdef _WIN32
-+ if (fname && strlen(fname) > 2 && fname[1] == ':') // Deal with Windows paths, such as 'C:\..'
-+ colon = strrchr(fname+2, ':');
-+#endif
- int nsmpl;
- char **list = hts_readlist(fname, 1, &nsmpl);
- if ( !list && colon )
-@@ -1889,7 +2083,7 @@
- tok->idxs = idxs2;
- tok->nidxs = nidxs2;
- tok->idx = idx2;
-- colon = rindex(fname, ':');
-+ colon = strrchr(fname, ':');
- *colon = 0;
- list = hts_readlist(fname, 1, &nsmpl);
- }
-@@ -1997,6 +2191,7 @@
- }
- static int filters_init1(filter_t *filter, char *str, int len, token_t *tok)
- {
-+ tok->tag_type = -1;
- tok->tok_type = TOK_VAL;
- tok->hdr_id = -1;
- tok->pass_site = -1;
-@@ -2067,6 +2262,7 @@
- tok->comparator = filters_cmp_filter;
- tok->tag = strdup("FILTER");
- filter->max_unpack |= BCF_UN_FLT;
-+ tok->tag_type = BCF_HL_FLT;
- return 0;
- }
- else if ( !strncasecmp(str,"ID",len) || !strncasecmp(str,"%ID",len) /* for backward compatibility */ )
-@@ -2075,6 +2271,12 @@
- tok->tag = strdup("ID");
- return 0;
- }
-+ else if ( !strncasecmp(str,"CHROM",len) )
-+ {
-+ tok->setter = &filters_set_chrom;
-+ tok->tag = strdup("CHROM");
-+ return 0;
-+ }
- else if ( !strncasecmp(str,"POS",len) )
- {
- tok->setter = &filters_set_pos;
-@@ -2113,12 +2315,14 @@
- }
- else if ( !strncasecmp(str,"N_MISSING",len) )
- {
-+ filter->max_unpack |= BCF_UN_FMT;
- tok->setter = &filters_set_nmissing;
- tok->tag = strdup("N_MISSING");
- return 0;
- }
- else if ( !strncasecmp(str,"F_MISSING",len) )
- {
-+ filter->max_unpack |= BCF_UN_FMT;
- tok->setter = &filters_set_nmissing;
- tok->tag = strdup("F_MISSING");
- return 0;
-@@ -2156,7 +2360,7 @@
- for (i=0; i<tok->nsamples; i++) tok->usmpl[i] = 1;
- }
-
-- tok->type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO;
-+ tok->tag_type = is_fmt ? BCF_HL_FMT : BCF_HL_INFO;
- if ( is_fmt ) filter->max_unpack |= BCF_UN_FMT;
- if ( tok->hdr_id>=0 )
- {
-@@ -2266,17 +2470,26 @@
- free(tmp.s);
- return 0;
- }
-+ else if ( !strcasecmp(tmp.s,"ILEN") || !strcasecmp(tmp.s,"%ILEN") )
-+ {
-+ filter->max_unpack |= BCF_UN_STR;
-+ tok->setter = &filters_set_ilen;
-+ tok->tag = strdup("ILEN");
-+ free(tmp.s);
-+ return 0;
-+ }
-
- // is it a value? Here we parse as integer/float separately and use strtof
- // rather than strtod, because the more accurate double representation
- // would invalidate floating point comparisons like QUAL=59.2, obtained via
-- // htslib/vcf parser
-+ // htslib/vcf parser.
-+ // Update: use strtod() and force floats only in comparisons
- char *end;
- tok->threshold = strtol(tmp.s, &end, 10); // integer?
- if ( end - tmp.s != strlen(tmp.s) )
- {
- errno = 0;
-- tok->threshold = strtof(tmp.s, &end); // float?
-+ tok->threshold = strtod(tmp.s, &end); // float?
- if ( errno!=0 || end!=tmp.s+len ) error("[%s:%d %s] Error: the tag \"%s\" is not defined in the VCF header\n", __FILE__,__LINE__,__FUNCTION__,tmp.s);
- }
- tok->is_constant = 1;
-@@ -2457,7 +2670,7 @@
- if ( ret==-1 ) error("Missing quotes in: %s\n", str);
-
- // fprintf(bcftools_stderr,"token=[%c] .. [%s] %d\n", TOKEN_STRING[ret], tmp, len);
-- // int i; for (i=0; i<nops; i++) fprintf(bcftools_stderr," .%c", TOKEN_STRING[ops[i]]); fprintf(bcftools_stderr,"\n");
-+ // int i; for (i=0; i<nops; i++) fprintf(bcftools_stderr," .%c", TOKEN_STRING[ops[i].tok_type]); fprintf(bcftools_stderr,"\n");
-
- if ( ret==TOK_LFT ) // left bracket
- {
-@@ -2504,8 +2717,18 @@
- tok->hdr_id = -1;
- tok->pass_site = -1;
- tok->threshold = -1.0;
-- if ( !strncasecmp(tmp-len,"N_PASS",6) ) { tok->func = func_npass; tok->tag = strdup("N_PASS"); }
-- else if ( !strncasecmp(tmp-len,"F_PASS",6) ) { tok->func = func_npass; tok->tag = strdup("F_PASS"); }
-+ if ( !strncasecmp(tmp-len,"N_PASS",6) )
-+ {
-+ filter->max_unpack |= BCF_UN_FMT;
-+ tok->func = func_npass;
-+ tok->tag = strdup("N_PASS");
-+ }
-+ else if ( !strncasecmp(tmp-len,"F_PASS",6) )
-+ {
-+ filter->max_unpack |= BCF_UN_FMT;
-+ tok->func = func_npass;
-+ tok->tag = strdup("F_PASS");
-+ }
- else error("The function \"%s\" is not supported\n", tmp-len);
- continue;
- }
-@@ -2609,7 +2832,8 @@
- // list of operators and convert the strings (e.g. "PASS") to BCF ids. The string value token must be
- // just before or after the FILTER token and they must be followed with a comparison operator.
- // At this point we also initialize regex expressions which, in RPN, must preceed the LIKE/NLIKE operator.
-- // Additionally, treat "." as missing value rather than a string in numeric equalities.
-+ // Additionally, treat "." as missing value rather than a string in numeric equalities; that
-+ // @file is only used with ID; etc.
- // This code is fragile: improve me.
- int i;
- for (i=0; i<nout; i++)
-@@ -2617,6 +2841,12 @@
- if ( i+1<nout && (out[i].tok_type==TOK_LT || out[i].tok_type==TOK_BT) && out[i+1].tok_type==TOK_EQ )
- error("Error parsing the expression: \"%s\"\n", filter->str);
-
-+ if ( out[i].hash )
-+ {
-+ int j = out[i+1].tok_type==TOK_VAL ? i+1 : i-1;
-+ if ( out[j].comparator!=filters_cmp_id )
-+ error("Error: could not parse the expression. Note that the \"@file_name\" syntax can be currently used with ID column only.\n");
-+ }
- if ( out[i].tok_type==TOK_OR || out[i].tok_type==TOK_OR_VEC )
- out[i].func = vector_logic_or;
- if ( out[i].tok_type==TOK_AND || out[i].tok_type==TOK_AND_VEC )
-@@ -2631,7 +2861,7 @@
- int set_missing = 0;
- if ( out[k].hdr_id>0 )
- {
-- int type = bcf_hdr_id2type(filter->hdr,out[k].type,out[k].hdr_id);
-+ int type = bcf_hdr_id2type(filter->hdr,out[k].tag_type,out[k].hdr_id);
- if ( type==BCF_HT_INT ) set_missing = 1;
- else if ( type==BCF_HT_REAL ) set_missing = 1;
- }
-@@ -2657,7 +2887,7 @@
- }
- if ( out[i].tok_type!=TOK_VAL ) continue;
- if ( !out[i].tag ) continue;
-- if ( !strcmp(out[i].tag,"TYPE") )
-+ if ( out[i].setter==filters_set_type )
- {
- if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str);
- int itok, ival;
-@@ -2671,6 +2901,7 @@
- else if ( !strcasecmp(out[ival].key,"mnp") || !strcasecmp(out[ival].key,"mnps") ) { out[ival].threshold = VCF_MNP<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"other") ) { out[ival].threshold = VCF_OTHER<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"bnd") ) { out[ival].threshold = VCF_BND<<1; out[ival].is_str = 0; }
-+ else if ( !strcasecmp(out[ival].key,"overlap") ) { out[ival].threshold = VCF_OVERLAP<<1; out[ival].is_str = 0; }
- else if ( !strcasecmp(out[ival].key,"ref") ) { out[ival].threshold = 1; out[ival].is_str = 0; }
- else error("The type \"%s\" not recognised: %s\n", out[ival].key, filter->str);
- if ( out[itok].tok_type==TOK_LIKE || out[itok].tok_type==TOK_NLIKE ) out[itok].comparator = filters_cmp_bit_and;
-@@ -2705,7 +2936,7 @@
- else if ( !strcasecmp(out[ival].key,"r") ) { out[i].setter = filters_set_genotype2; out[ival].key[0]='r'; out[ival].key[1]=0; } // r
- continue;
- }
-- if ( !strcmp(out[i].tag,"FILTER") )
-+ if ( out[i].tag_type==BCF_HL_FLT )
- {
- if ( i+1==nout ) error("Could not parse the expression: %s\n", filter->str);
- int itok = i, ival;
-@@ -2734,13 +2965,17 @@
- filter->nsamples = filter->max_unpack&BCF_UN_FMT ? bcf_hdr_nsamples(filter->hdr) : 0;
- for (i=0; i<nout; i++)
- {
-- if ( out[i].tok_type==TOK_MAX ) { out[i].func = func_max; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_MIN ) { out[i].func = func_min; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_SUM ) { out[i].func = func_sum; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_ABS ) { out[i].func = func_abs; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_CNT ) { out[i].func = func_count; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-- else if ( out[i].tok_type==TOK_LEN ) { out[i].func = func_strlen; out[i].tok_type = TOK_FUNC; out[i].tok_type = 1; }
-+ if ( out[i].tok_type==TOK_MAX ) { out[i].func = func_max; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_MIN ) { out[i].func = func_min; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_MEDIAN ) { out[i].func = func_median; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_AVG ) { out[i].func = func_avg; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_STDEV ) { out[i].func = func_stddev; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_SUM ) { out[i].func = func_sum; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_ABS ) { out[i].func = func_abs; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_CNT ) { out[i].func = func_count; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_LEN ) { out[i].func = func_strlen; out[i].tok_type = TOK_FUNC; }
-+ else if ( out[i].tok_type==TOK_PHRED ) { out[i].func = func_phred; out[i].tok_type = TOK_FUNC; }
- else if ( out[i].tok_type==TOK_BINOM ) { out[i].func = func_binom; out[i].tok_type = TOK_FUNC; }
- else if ( out[i].tok_type==TOK_PERLSUB ) { out[i].func = perl_exec; out[i].tok_type = TOK_FUNC; }
- hts_expand0(double,1,out[i].mvalues,out[i].values);
-@@ -2876,6 +3111,8 @@
- }
- else
- {
-+ if ( is_str==1 ) error("Error: cannot use arithmetic operators to compare strings and numbers\n");
-+
- // Determine what to do with one [1] or both [2] sides missing. The first field [0] gives [1]|[2]
- int missing_logic[] = {0,0,0};
- if ( filter->filters[i].tok_type == TOK_EQ ) { missing_logic[0] = missing_logic[2] = 1; }
-@@ -2895,7 +3132,6 @@
- CMP_VECTORS(filter->flt_stack[nstack-2],filter->flt_stack[nstack-1],&filter->filters[i],>=,missing_logic)
- else
- error("todo: %s:%d .. type=%d\n", __FILE__,__LINE__,filter->filters[i].tok_type);
--
- }
- filter->flt_stack[nstack-2] = &filter->filters[i];
- nstack--;
---- python-pysam.orig/bcftools/gvcf.c
-+++ python-pysam/bcftools/gvcf.c
-@@ -156,7 +156,7 @@
- if ( gvcf->npl>0 )
- bcf_update_format_int32(hdr, gvcf->line, "PL", gvcf->pl, gvcf->npl);
- bcf_update_format_int32(hdr, gvcf->line, "DP", gvcf->dp, nsmpl);
-- bcf_write1(fh, hdr, gvcf->line);
-+ if ( bcf_write1(fh, hdr, gvcf->line)!=0 ) error("[%s] Error: failed to write the record\n", __func__);
- gvcf->prev_range = 0;
- gvcf->rid = -1;
- gvcf->npl = 0;
---- python-pysam.orig/bcftools/gvcf.c.pysam.c
-+++ python-pysam/bcftools/gvcf.c.pysam.c
-@@ -158,7 +158,7 @@
- if ( gvcf->npl>0 )
- bcf_update_format_int32(hdr, gvcf->line, "PL", gvcf->pl, gvcf->npl);
- bcf_update_format_int32(hdr, gvcf->line, "DP", gvcf->dp, nsmpl);
-- bcf_write1(fh, hdr, gvcf->line);
-+ if ( bcf_write1(fh, hdr, gvcf->line)!=0 ) error("[%s] Error: failed to write the record\n", __func__);
- gvcf->prev_range = 0;
- gvcf->rid = -1;
- gvcf->npl = 0;
---- /dev/null
-+++ python-pysam/bcftools/hex.h
-@@ -0,0 +1,95 @@
-+// VariantKey
-+//
-+// hex.h
-+//
-+// @category Libraries
-+// @author Nicola Asuni <nicola.asuni@genomicsplc.com>
-+// @copyright 2017-2018 GENOMICS plc
-+// @license MIT (see LICENSE)
-+// @link https://github.com/genomicsplc/variantkey
-+//
-+// LICENSE
-+//
-+// Copyright (c) 2017-2018 GENOMICS plc
-+//
-+// Permission is hereby granted, free of charge, to any person obtaining a copy
-+// of this software and associated documentation files (the "Software"), to deal
-+// in the Software without restriction, including without limitation the rights
-+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+// copies of the Software, and to permit persons to whom the Software is
-+// furnished to do so, subject to the following conditions:
-+//
-+// The above copyright notice and this permission notice shall be included in
-+// all copies or substantial portions of the Software.
-+//
-+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+// THE SOFTWARE.
-+
-+/**
-+ * @file hex.h
-+ * @brief Utility functions to manipulate strings.
-+ *
-+ * Collection of utility functions to manipulate strings.
-+ */
-+
-+#ifndef ASTRING_H
-+#define ASTRING_H
-+
-+#include <inttypes.h>
-+#include <stdio.h>
-+
-+/** @brief Returns uint64_t hexadecimal string (16 characters).
-+ *
-+ * @param n Number to parse
-+ * @param str String buffer to be returned (it must be sized 17 bytes at least).
-+ *
-+ * @return Upon successful return, these function returns the number of characters processed
-+ * (excluding the null byte used to end output to strings).
-+ * If the buffer size is not sufficient, then the return value is the number of characters required for
-+ * buffer string, including the terminating null byte.
-+ */
-+static inline size_t hex_uint64_t(uint64_t n, char *str)
-+{
-+ return sprintf(str, "%016" PRIx64, n);
-+}
-+
-+/** @brief Parses a 16 chars hexadecimal string and returns the code.
-+ *
-+ * @param s Hexadecimal string to parse (it must contain 16 hexadecimal characters).
-+ *
-+ * @return uint64_t unsigned integer number.
-+ */
-+static inline uint64_t parse_hex_uint64_t(const char *s)
-+{
-+ uint64_t v = 0;
-+ uint8_t b;
-+ size_t i;
-+ for (i = 0; i < 16; i++)
-+ {
-+ b = s[i];
-+ if (b >= 'a')
-+ {
-+ b -= ('a' - 10); // a-f
-+ }
-+ else
-+ {
-+ if (b >= 'A')
-+ {
-+ b -= ('A' - 10); // A-F
-+ }
-+ else
-+ {
-+ b -= '0'; // 0-9
-+ }
-+ }
-+ v = ((v << 4) | b);
-+ }
-+ return v;
-+}
-+
-+#endif // ASTRING_H
---- python-pysam.orig/bcftools/htslib-1.9/LICENSE
-+++ /dev/null
-@@ -1,69 +0,0 @@
--[Files in this distribution outwith the cram/ subdirectory are distributed
--according to the terms of the following MIT/Expat license.]
--
--The MIT/Expat License
--
--Copyright (C) 2012-2018 Genome Research Ltd.
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE.
--
--
--[Files within the cram/ subdirectory in this distribution are distributed
--according to the terms of the following Modified 3-Clause BSD license.]
--
--The Modified-BSD License
--
--Copyright (C) 2012-2018 Genome Research Ltd.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are met:
--
--1. Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
--2. Redistributions in binary form must reproduce the above copyright notice,
-- this list of conditions and the following disclaimer in the documentation
-- and/or other materials provided with the distribution.
--
--3. Neither the names Genome Research Ltd and Wellcome Trust Sanger Institute
-- nor the names of its contributors may be used to endorse or promote products
-- derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY GENOME RESEARCH LTD AND CONTRIBUTORS "AS IS"
--AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
--IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
--DISCLAIMED. IN NO EVENT SHALL GENOME RESEARCH LTD OR ITS CONTRIBUTORS BE LIABLE
--FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
--DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
--SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
--CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
--OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
--OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--
--
--[The use of a range of years within a copyright notice in this distribution
--should be interpreted as being equivalent to a list of years including the
--first and last year specified and all consecutive years between them.
--
--For example, a copyright notice that reads "Copyright (C) 2005, 2007-2009,
--2011-2012" should be interpreted as being identical to a notice that reads
--"Copyright (C) 2005, 2007, 2008, 2009, 2011, 2012" and a copyright notice
--that reads "Copyright (C) 2005-2012" should be interpreted as being identical
--to a notice that reads "Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
--2011, 2012".]
---- python-pysam.orig/bcftools/htslib-1.9/README
-+++ /dev/null
-@@ -1,5 +0,0 @@
--HTSlib is an implementation of a unified C library for accessing common file
--formats, such as SAM, CRAM, VCF, and BCF, used for high-throughput sequencing
--data. It is the core library used by samtools and bcftools.
--
--See INSTALL for building and installation instructions.
---- python-pysam.orig/bcftools/main.c
-+++ python-pysam/bcftools/main.c
-@@ -53,7 +53,9 @@
- #if USE_GPL
- int main_polysomy(int argc, char *argv[]);
- #endif
-+#ifdef ENABLE_BCF_PLUGINS
- int main_plugin(int argc, char *argv[]);
-+#endif
- int main_consensus(int argc, char *argv[]);
- int main_csq(int argc, char *argv[]);
- int bam_mpileup(int argc, char *argv[]);
-@@ -110,15 +112,12 @@
- .alias = "norm",
- .help = "left-align and normalize indels"
- },
-+#ifdef ENABLE_BCF_PLUGINS
- { .func = main_plugin,
- .alias = "plugin",
--#ifdef ENABLE_BCF_PLUGINS
- .help = "user-defined plugins"
--#else
-- /* Do not advertise when plugins disabled. */
-- .help = "-user-defined plugins"
--#endif
- },
-+#endif
- { .func = main_vcfquery,
- .alias = "query",
- .help = "transform VCF/BCF into user-defined formats"
-@@ -235,12 +234,24 @@
- fprintf(fp,"\n");
- }
-
-+// This is a tricky one, but on Windows the filename wildcard expansion is done by
-+// the application and not by the shell, as traditionally it never had a "shell".
-+// Even now, DOS and Powershell do not do this expansion (but bash does).
-+//
-+// This means that Mingw/Msys implements code before main() that takes e.g. "*" and
-+// expands it up to a list of matching filenames. This in turn breaks things like
-+// specifying "*" as a region (all the unmapped reads). We take a hard line here -
-+// filename expansion is the task of the shell, not our application!
-+#ifdef _WIN32
-+int _CRT_glob = 0;
-+#endif
-+
- int main(int argc, char *argv[])
- {
- if (argc < 2) { usage(stderr); return 1; }
-
- if (strcmp(argv[1], "version") == 0 || strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0) {
-- printf("bcftools %s\nUsing htslib %s\nCopyright (C) 2018 Genome Research Ltd.\n", bcftools_version(), hts_version());
-+ printf("bcftools %s\nUsing htslib %s\nCopyright (C) 2019 Genome Research Ltd.\n", bcftools_version(), hts_version());
- #if USE_GPL
- printf("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
- #else
---- python-pysam.orig/bcftools/main.c.pysam.c
-+++ python-pysam/bcftools/main.c.pysam.c
-@@ -55,7 +55,9 @@
- #if USE_GPL
- int main_polysomy(int argc, char *argv[]);
- #endif
-+#ifdef ENABLE_BCF_PLUGINS
- int main_plugin(int argc, char *argv[]);
-+#endif
- int main_consensus(int argc, char *argv[]);
- int main_csq(int argc, char *argv[]);
- int bam_mpileup(int argc, char *argv[]);
-@@ -112,15 +114,12 @@
- .alias = "norm",
- .help = "left-align and normalize indels"
- },
-+#ifdef ENABLE_BCF_PLUGINS
- { .func = main_plugin,
- .alias = "plugin",
--#ifdef ENABLE_BCF_PLUGINS
- .help = "user-defined plugins"
--#else
-- /* Do not advertise when plugins disabled. */
-- .help = "-user-defined plugins"
--#endif
- },
-+#endif
- { .func = main_vcfquery,
- .alias = "query",
- .help = "transform VCF/BCF into user-defined formats"
-@@ -237,12 +236,24 @@
- fprintf(fp,"\n");
- }
-
-+// This is a tricky one, but on Windows the filename wildcard expansion is done by
-+// the application and not by the shell, as traditionally it never had a "shell".
-+// Even now, DOS and Powershell do not do this expansion (but bash does).
-+//
-+// This means that Mingw/Msys implements code before main() that takes e.g. "*" and
-+// expands it up to a list of matching filenames. This in turn breaks things like
-+// specifying "*" as a region (all the unmapped reads). We take a hard line here -
-+// filename expansion is the task of the shell, not our application!
-+#ifdef _WIN32
-+int _CRT_glob = 0;
-+#endif
-+
- int bcftools_main(int argc, char *argv[])
- {
- if (argc < 2) { usage(bcftools_stderr); return 1; }
-
- if (strcmp(argv[1], "version") == 0 || strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0) {
-- fprintf(bcftools_stdout, "bcftools %s\nUsing htslib %s\nCopyright (C) 2018 Genome Research Ltd.\n", bcftools_version(), hts_version());
-+ fprintf(bcftools_stdout, "bcftools %s\nUsing htslib %s\nCopyright (C) 2019 Genome Research Ltd.\n", bcftools_version(), hts_version());
- #if USE_GPL
- fprintf(bcftools_stdout, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
- #else
---- python-pysam.orig/bcftools/mcall.c
-+++ python-pysam/bcftools/mcall.c
-@@ -23,7 +23,9 @@
- THE SOFTWARE. */
-
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/kfunc.h>
-+#include <htslib/khash_str2int.h>
- #include "call.h"
-
- // Using priors for GTs does not seem to be mathematically justified. Although
-@@ -36,9 +38,6 @@
- // genotypes is reported instead.
- #define FLAT_PDG_FOR_MISSING 0
-
--// Estimate QS (combined quality and allele frequencies) from PLs
--#define QS_FROM_PDG 0
--
-
- void qcall_init(call_t *call) { return; }
- void qcall_destroy(call_t *call) { return; }
-@@ -244,12 +243,84 @@
- free(call->trio[j][i]);
- }
-
-+static void init_sample_groups(call_t *call)
-+{
-+ int i, nsmpl = bcf_hdr_nsamples(call->hdr);
-+ if ( !call->sample_groups )
-+ {
-+ // standard pooled calling, all samples in the same group
-+ grp_t *grps = &call->smpl_grp;
-+ grps->ngrp = 1;
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)calloc(nsmpl,sizeof(int));
-+ }
-+ else if ( !strcmp("-",call->sample_groups) )
-+ {
-+ // single-sample calling, each sample creates its own group
-+ grp_t *grps = &call->smpl_grp;
-+ grps->ngrp = nsmpl;
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)malloc(nsmpl*sizeof(int));
-+ for (i=0; i<nsmpl; i++) grps->smpl2grp[i] = i;
-+ }
-+ else
-+ {
-+ int nlines;
-+ char **lines = hts_readlist(call->sample_groups, 1, &nlines);
-+ if ( !lines ) error("Could not read the file: %s\n", call->sample_groups);
-+
-+ uint32_t *smpl2grp1 = (uint32_t*)calloc(nsmpl,sizeof(uint32_t));
-+ void *grp2idx = khash_str2int_init();
-+
-+ grp_t *grps = &call->smpl_grp;
-+ for (i=0; i<nlines; i++)
-+ {
-+ char *ptr = lines[i];
-+ while ( *ptr && *ptr!='\t' ) ptr++;
-+ if ( !*ptr ) error("Could not parse the line in %s, expected a sample name followed by tab and a population name: %s\n",call->sample_groups,lines[i]);
-+ *ptr = 0;
-+ int ismpl = bcf_hdr_id2int(call->hdr, BCF_DT_SAMPLE, lines[i]);
-+ if ( ismpl<0 ) continue;
-+ if ( smpl2grp1[ismpl] ) error("Error: the sample \"%s\" is listed twice in %s\n", lines[i],call->sample_groups);
-+ if ( !khash_str2int_has_key(grp2idx,ptr+1) )
-+ {
-+ khash_str2int_inc(grp2idx, ptr+1);
-+ grps->ngrp++;
-+ }
-+ int igrp;
-+ if ( khash_str2int_get(grp2idx, ptr+1, &igrp)==0 )
-+ smpl2grp1[ismpl] = igrp+1;
-+ else
-+ error("This should not happen, fixme: %s\n",ptr+1);
-+ }
-+ khash_str2int_destroy(grp2idx);
-+
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)malloc(nsmpl*sizeof(int));
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( !smpl2grp1[i] ) error("Error: The sample \"%s\" is not listed in %s\n",call->hdr->samples[i],call->sample_groups);
-+ grps->smpl2grp[i] = smpl2grp1[i] - 1;
-+ }
-+ free(smpl2grp1);
-+ for (i=0; i<nlines; i++) free(lines[i]);
-+ free(lines);
-+ }
-+}
-+static void destroy_sample_groups(call_t *call)
-+{
-+ int i;
-+ grp_t *grps = &call->smpl_grp;
-+ for (i=0; i<grps->ngrp; i++)
-+ free(grps->grp[i].qsum);
-+ free(grps->grp);
-+ free(grps->smpl2grp);
-+}
-+
- void mcall_init(call_t *call)
- {
- call_init_pl2p(call);
-
-- call->nqsum = 5;
-- call->qsum = (float*) malloc(sizeof(float)*call->nqsum); // will be expanded later if ncessary
- call->nals_map = 5;
- call->als_map = (int*) malloc(sizeof(int)*call->nals_map);
- call->npl_map = 5*(5+1)/2; // will be expanded later if necessary
-@@ -302,26 +373,28 @@
- call->theta = log(call->theta);
- }
-
-- return;
-+ init_sample_groups(call);
- }
-
- void mcall_destroy(call_t *call)
- {
-+ destroy_sample_groups(call);
- if (call->vcmp) vcmp_destroy(call->vcmp);
- free(call->itmp);
- mcall_destroy_trios(call);
- free(call->GPs);
-+ free(call->ADs);
- free(call->GLs);
- free(call->GQs);
- free(call->anno16);
- free(call->PLs);
-- free(call->qsum);
- free(call->als_map);
- free(call->pl_map);
- free(call->gts); free(call->cgts); free(call->ugts);
- free(call->pdg);
- free(call->als);
- free(call->ac);
-+ free(call->qsum);
- return;
- }
-
-@@ -431,40 +504,6 @@
- }
- }
-
--/*
-- Allele frequency estimated as:
-- #A = \sum_i (2*P_AA + P_AB)
-- F_A = #A / ( #A + #B )
-- where i runs across all samples
--*/
--void estimate_qsum(call_t *call, bcf1_t *rec)
--{
-- double *pdg = call->pdg;
-- int ngts = rec->n_allele*(rec->n_allele+1)/2;
-- int i,nsmpl = bcf_hdr_nsamples(call->hdr);
--
-- hts_expand(float,rec->n_allele,call->nqsum,call->qsum);
-- for (i=0; i<rec->n_allele; i++) call->qsum[i] = 0;
--
-- for (i=0; i<nsmpl; i++)
-- {
-- int a, b, k = 0;
-- for (a=0; a<rec->n_allele; a++)
-- {
-- for (b=0; b<=a; b++)
-- {
-- call->qsum[a] += pdg[k];
-- call->qsum[b] += pdg[k];
-- k++;
-- }
-- }
-- pdg += ngts;
-- }
-- float sum = 0;
-- for (i=0; i<rec->n_allele; i++) sum += call->qsum[i];
-- if ( sum ) for (i=0; i<rec->n_allele; i++) call->qsum[i] /= sum;
--}
--
- // Create mapping between old and new (trimmed) alleles
- void init_allele_trimming_maps(call_t *call, int als, int nals)
- {
-@@ -581,6 +620,7 @@
- // at most tri-allelic sites are considered. Returns the number of alleles.
- static int mcall_find_best_alleles(call_t *call, int nals, int *out_als)
- {
-+ int j;
- int ia,ib,ic; // iterators over up to three alleles
- int max_als=0; // most likely combination of alleles
- double ref_lk = 0, max_lk = -HUGE_VAL; // likelihood of the reference and of most likely combination of alleles
-@@ -606,32 +646,46 @@
- UPDATE_MAX_LKs(1<<ia, ia>0 && lk_tot_set);
- }
-
-+ grp_t *grps = &call->smpl_grp;
-+
- // Two alleles
- if ( nals>1 )
- {
- for (ia=0; ia<nals; ia++)
- {
-- if ( call->qsum[ia]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ia]==0 ) continue;
- int iaa = (ia+1)*(ia+2)/2-1;
- for (ib=0; ib<ia; ib++)
- {
-- if ( call->qsum[ib]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ib]==0 ) continue;
- double lk_tot = 0;
- int lk_tot_set = 0;
-- double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]);
-- double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]);
-- double fa2 = fa*fa;
-- double fb2 = fb*fb;
-- double fab = 2*fa*fb;
-+ int ia_cov = 0, ib_cov = 0;
-+ for (j=0; j<grps->ngrp; j++)
-+ {
-+ grp1_t *grp = &grps->grp[j];
-+ if ( grp->qsum[ia] ) ia_cov = 1;
-+ if ( grp->qsum[ib] ) ib_cov = 1;
-+ if ( !grp->qsum[ia] && !grp->qsum[ib] ) { grp->dp = 0; continue; }
-+ grp->dp = 1;
-+ grp->fa = grp->qsum[ia]/(grp->qsum[ia]+grp->qsum[ib]);
-+ grp->fb = grp->qsum[ib]/(grp->qsum[ia]+grp->qsum[ib]);
-+ grp->fa2 = grp->fa*grp->fa;
-+ grp->fb2 = grp->fb*grp->fb;
-+ grp->fab = 2*grp->fa*grp->fb;
-+ }
-+ if ( !ia_cov || !ib_cov ) continue;
- int isample, ibb = (ib+1)*(ib+2)/2-1, iab = iaa - ia + ib;
- double *pdg = call->pdg;
- for (isample=0; isample<nsmpl; isample++)
- {
-+ grp1_t *grp = &grps->grp[grps->smpl2grp[isample]];
-+ if ( !grp->dp ) continue;
- double val = 0;
- if ( !call->ploidy || call->ploidy[isample]==2 )
-- val = fa2*pdg[iaa] + fb2*pdg[ibb] + fab*pdg[iab];
-+ val = grp->fa2*pdg[iaa] + grp->fb2*pdg[ibb] + grp->fab*pdg[iab];
- else if ( call->ploidy && call->ploidy[isample]==1 )
-- val = fa*pdg[iaa] + fb*pdg[ibb];
-+ val = grp->fa*pdg[iaa] + grp->fb*pdg[ibb];
- if ( val ) { lk_tot += log(val); lk_tot_set = 1; }
- pdg += ngts;
- }
-@@ -647,35 +701,48 @@
- {
- for (ia=0; ia<nals; ia++)
- {
-- if ( call->qsum[ia]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ia]==0 ) continue;
- int iaa = (ia+1)*(ia+2)/2-1;
- for (ib=0; ib<ia; ib++)
- {
-- if ( call->qsum[ib]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ib]==0 ) continue;
- int ibb = (ib+1)*(ib+2)/2-1;
- int iab = iaa - ia + ib;
- for (ic=0; ic<ib; ic++)
- {
-- if ( call->qsum[ic]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ic]==0 ) continue;
- double lk_tot = 0;
- int lk_tot_set = 1;
-- double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fc = call->qsum[ic]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fa2 = fa*fa;
-- double fb2 = fb*fb;
-- double fc2 = fc*fc;
-- double fab = 2*fa*fb, fac = 2*fa*fc, fbc = 2*fb*fc;
-+ int ia_cov = 0, ib_cov = 0, ic_cov = 0;
-+ for (j=0; j<grps->ngrp; j++)
-+ {
-+ grp1_t *grp = &grps->grp[j];
-+ if ( grp->qsum[ia] ) ia_cov = 1;
-+ if ( grp->qsum[ib] ) ib_cov = 1;
-+ if ( grp->qsum[ic] ) ic_cov = 1;
-+ if ( !grp->qsum[ia] && !grp->qsum[ib] && !grp->qsum[ic] ) { grp->dp = 0; continue; }
-+ grp->dp = 1;
-+ grp->fa = grp->qsum[ia]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fb = grp->qsum[ib]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fc = grp->qsum[ic]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fa2 = grp->fa*grp->fa;
-+ grp->fb2 = grp->fb*grp->fb;
-+ grp->fc2 = grp->fc*grp->fc;
-+ grp->fab = 2*grp->fa*grp->fb, grp->fac = 2*grp->fa*grp->fc, grp->fbc = 2*grp->fb*grp->fc;
-+ }
-+ if ( !ia_cov || !ib_cov || !ic_cov ) continue;
- int isample, icc = (ic+1)*(ic+2)/2-1;
- int iac = iaa - ia + ic, ibc = ibb - ib + ic;
- double *pdg = call->pdg;
- for (isample=0; isample<nsmpl; isample++)
- {
-+ grp1_t *grp = &grps->grp[grps->smpl2grp[isample]];
-+ if ( !grp->dp ) continue;
- double val = 0;
- if ( !call->ploidy || call->ploidy[isample]==2 )
-- val = fa2*pdg[iaa] + fb2*pdg[ibb] + fc2*pdg[icc] + fab*pdg[iab] + fac*pdg[iac] + fbc*pdg[ibc];
-+ val = grp->fa2*pdg[iaa] + grp->fb2*pdg[ibb] + grp->fc2*pdg[icc] + grp->fab*pdg[iab] + grp->fac*pdg[iac] + grp->fbc*pdg[ibc];
- else if ( call->ploidy && call->ploidy[isample]==1 )
-- val = fa*pdg[iaa] + fb*pdg[ibb] + fc*pdg[icc];
-+ val = grp->fa*pdg[iaa] + grp->fb*pdg[ibb] + grp->fc*pdg[icc];
- if ( val ) { lk_tot += log(val); lk_tot_set = 1; }
- pdg += ngts;
- }
-@@ -788,12 +855,13 @@
- gts[1] = ploidy==2 ? bcf_gt_unphased(0) : bcf_int32_vector_end;
-
- // Non-zero depth, determine the most likely genotype
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[isample]];
- double best_lk = 0;
- for (ia=0; ia<nals; ia++)
- {
- if ( !(out_als & 1<<ia) ) continue; // ia-th allele not in the final selection, skip
- int iaa = (ia+1)*(ia+2)/2-1; // PL index of the ia/ia genotype
-- double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia];
-+ double lk = ploidy==2 ? pdg[iaa]*grp->qsum[ia]*grp->qsum[ia] : pdg[iaa]*grp->qsum[ia];
- #if USE_PRIOR_FOR_GTS
- if ( ia!=0 ) lk *= prior;
- #endif
-@@ -816,7 +884,7 @@
- {
- if ( !(out_als & 1<<ib) ) continue;
- int iab = iaa - ia + ib;
-- double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib];
-+ double lk = 2*pdg[iab]*grp->qsum[ia]*grp->qsum[ib];
- #if USE_PRIOR_FOR_GTS
- if ( ia!=0 ) lk *= prior;
- if ( ib!=0 ) lk *= prior;
-@@ -940,6 +1008,7 @@
-
- for (i=0; i<nout_gts; i++) gls[i] = -HUGE_VAL;
-
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[isample]];
- double sum_lk = 0;
- double best_lk = 0;
- for (ia=0; ia<nals; ia++)
-@@ -947,7 +1016,7 @@
- if ( !(out_als & 1<<ia) ) continue; // ia-th allele not in the final selection, skip
- int iaa = bcf_alleles2gt(ia,ia); // PL index of the ia/ia genotype
- int idx = bcf_alleles2gt(call->als_map[ia],call->als_map[ia]);
-- double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia];
-+ double lk = ploidy==2 ? pdg[iaa]*grp->qsum[ia]*grp->qsum[ia] : pdg[iaa]*grp->qsum[ia];
- sum_lk += lk;
- gls[idx] = lk;
- if ( best_lk < lk )
-@@ -966,7 +1035,7 @@
- if ( !(out_als & 1<<ib) ) continue;
- int iab = bcf_alleles2gt(ia,ib);
- int idx = bcf_alleles2gt(call->als_map[ia],call->als_map[ib]);
-- double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib];
-+ double lk = 2*pdg[iab]*grp->qsum[ia]*grp->qsum[ib];
- sum_lk += lk;
- gls[idx] = lk;
- if ( best_lk < lk )
-@@ -1272,28 +1341,37 @@
- //
- static int mcall_constrain_alleles(call_t *call, bcf1_t *rec, int *unseen)
- {
-- bcf_sr_regions_t *tgt = call->srs->targets;
-- if ( tgt->nals>5 ) error("Maximum accepted number of alleles is 5, got %d\n", tgt->nals);
-- hts_expand(char*,tgt->nals+1,call->nals,call->als);
-+ assert( call->tgt_als->n );
-+ if ( call->tgt_als->n>5 ) error("Maximum accepted number of alleles is 5, got %d\n", call->tgt_als->n);
-+ hts_expand(char*,call->tgt_als->n+1,call->nals,call->als);
-
- int has_new = 0;
-
- int i, j, nals = 1;
- for (i=1; i<call->nals_map; i++) call->als_map[i] = -1;
-
-- if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], tgt->als[0]) < 0 )
-- error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,tgt->als[0],rec->d.allele[0]);
-+ if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], call->tgt_als->allele[0]) < 0 )
-+ error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,call->tgt_als->allele[0],rec->d.allele[0]);
-
- // create mapping from new to old alleles
-- call->als[0] = tgt->als[0];
-+ call->als[0] = call->tgt_als->allele[0];
- call->als_map[0] = 0;
-
-- for (i=1; i<tgt->nals; i++)
-+ for (i=1; i<call->tgt_als->n; i++)
- {
-- call->als[nals] = tgt->als[i];
-- j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, tgt->als[i]);
-+ call->als[nals] = call->tgt_als->allele[i];
-+ j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, call->tgt_als->allele[i]);
-
-- if ( j+1==*unseen ) { fprintf(stderr,"fixme? Cannot constrain to %s\n",tgt->als[i]); return -1; }
-+ if ( j+1==*unseen )
-+ {
-+ fprintf(stderr,"Fixme? Cannot constrain to %d-th allele (%s). VCF=",i,call->tgt_als->allele[i]);
-+ int k;
-+ for (k=0; k<rec->n_allele; k++) fprintf(stderr,"%s%s",k==0?"":",",rec->d.allele[k]);
-+ fprintf(stderr,"\tTAB=");
-+ for (k=0; k<call->tgt_als->n; k++) fprintf(stderr,"%s%s",k==0?"":",",call->tgt_als->allele[k]);
-+ fprintf(stderr,"\n");
-+ return -1;
-+ }
-
- if ( j>=0 )
- {
-@@ -1364,11 +1442,51 @@
- bcf_update_format_int32(call->hdr, rec, "PL", call->itmp, npls_new*nsmpl);
-
- // update QS
-- float qsum[5];
-- int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum);
-+ int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->smpl_grp.grp[0].qsum, &call->smpl_grp.grp[0].nqsum);
-+ hts_expand(float,nals,call->nqsum,call->qsum);
- for (i=0; i<nals; i++)
-- qsum[i] = call->als_map[i]<nqs ? call->qsum[call->als_map[i]] : 0;
-- bcf_update_info_float(call->hdr, rec, "QS", qsum, nals);
-+ call->qsum[i] = call->als_map[i]<nqs ? call->smpl_grp.grp[0].qsum[call->als_map[i]] : 0;
-+ bcf_update_info_float(call->hdr, rec, "QS", call->qsum, nals);
-+
-+ // update any Number=R tags
-+ void *tmp_ori = call->itmp, *tmp_new = call->PLs; // reusing PLs storage which is not used at this point
-+ int ntmp_ori = call->n_itmp, ntmp_new = call->mPLs;
-+ for (i=0; i<rec->n_fmt; i++)
-+ {
-+ bcf_fmt_t *fmt = &rec->d.fmt[i];
-+ int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_FMT,fmt->id);
-+ if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag
-+
-+ // NB:works only for BCF_HT_INT and BCF_HT_REAL
-+ int type = bcf_hdr_id2type(call->hdr,BCF_HL_FMT,fmt->id);
-+ assert( type==BCF_HT_INT || type==BCF_HT_REAL );
-+ assert( sizeof(float)==sizeof(int32_t) );
-+
-+ const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,fmt->id);
-+ int nret = bcf_get_format_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type);
-+ if (nret<=0) continue;
-+ int nsmpl = bcf_hdr_nsamples(call->hdr);
-+ int size1 = sizeof(float);
-+ hts_expand(float, nsmpl * nals, ntmp_new, tmp_new);
-+ for (j=0; j<nsmpl; j++)
-+ {
-+ uint8_t *ptr_ori = (uint8_t *) tmp_ori + j*size1*fmt->n;
-+ uint8_t *ptr_new = (uint8_t *) tmp_new + j*nals*size1;
-+ for (k=0; k<nals; k++)
-+ {
-+ uint8_t *dst = ptr_new + size1*k;
-+ uint8_t *src = ptr_ori + size1*call->als_map[k];
-+ memcpy(dst,src,size1);
-+ }
-+ }
-+ nret = bcf_update_format(call->hdr, rec, key, tmp_new, nsmpl*nals, type);
-+ assert( nret==0 );
-+ }
-+ call->PLs = (int32_t*) tmp_new;
-+ call->mPLs = ntmp_new;
-+ call->itmp = (int32_t*) tmp_ori;
-+ call->n_itmp = ntmp_ori;
-+
-
- if ( *unseen ) *unseen = nals-1;
- return 0;
-@@ -1383,7 +1501,7 @@
- */
- int mcall(call_t *call, bcf1_t *rec)
- {
-- int i, unseen = call->unseen;
-+ int i,j, unseen = call->unseen;
-
- // Force alleles when calling genotypes given alleles was requested
- if ( call->flag & CALL_CONSTR_ALLELES && mcall_constrain_alleles(call, rec, &unseen)!=0 ) return -2;
-@@ -1404,61 +1522,83 @@
- hts_expand(double, call->nPLs, call->npdg, call->pdg);
- set_pdg(call->pl2p, call->PLs, call->pdg, nsmpl, ngts, unseen);
-
-- #if QS_FROM_PDG
-- estimate_qsum(call, rec);
-- #else
-- // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes.
-- int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum);
-+ // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes.
-+ if ( call->smpl_grp.ngrp == 1 )
-+ {
-+ int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->smpl_grp.grp[0].qsum, &call->smpl_grp.grp[0].nqsum);
- if ( nqs<=0 ) error("The QS annotation not present at %s:%d\n", bcf_seqname(call->hdr,rec),rec->pos+1);
- if ( nqs < nals )
- {
- // Some of the listed alleles do not have the corresponding QS field. This is
-- // typically ref-only site with X in ALT.
-+ // typically ref-only site with <*> in ALT.
-+ hts_expand(float,nals,call->smpl_grp.grp[0].nqsum,call->smpl_grp.grp[0].qsum);
-+ for (i=nqs; i<nals; i++) call->smpl_grp.grp[0].qsum[i] = 0;
-+ }
-+ }
-+ else
-+ {
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ {
-+ hts_expand(float,nals,call->smpl_grp.grp[j].nqsum,call->smpl_grp.grp[j].qsum);
-+ memset(call->smpl_grp.grp[j].qsum, 0, sizeof(float)*nals);
-+ }
-
-- hts_expand(float,nals,call->nqsum,call->qsum);
-- for (i=nqs; i<nals; i++) call->qsum[i] = 0;
-+ int nad = bcf_get_format_int32(call->hdr, rec, "AD", &call->ADs, &call->nADs);
-+ if ( nad<1 ) error("Error: FORMAT/AD is required with the -G option, mpileup must be run with -a AD\n");
-+ nad /= bcf_hdr_nsamples(call->hdr);
-+ hts_expand(float,nals,call->nqsum,call->qsum);
-+ float qsum = 0;
-+ for (i=0; i<bcf_hdr_nsamples(call->hdr); i++)
-+ {
-+ int32_t *ptr = call->ADs + i*nad;
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( ptr[j]==bcf_int32_vector_end ) break;
-+ if ( ptr[j]==bcf_int32_missing ) call->qsum[j] = 0;
-+ else { call->qsum[j] = ptr[j]; qsum += ptr[j]; }
-+ }
-+ for (; j<nals; j++) call->qsum[j] = 0;
-+ if ( qsum )
-+ for (j=0; j<nals; j++) call->qsum[j] /= qsum;
-+
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[i]];
-+ for (j=0; j<nals; j++)
-+ grp->qsum[j] += call->qsum[j];
- }
-+ }
-
-- // If available, take into account reference panel AFs
-- if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 )
-+ // If available, take into account reference panel AFs
-+ if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 )
-+ {
-+ int an = call->ac[0];
-+ if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 )
- {
-- int an = call->ac[0];
-- if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 )
-+ int ac0 = an; // number of alleles in the reference population
-+ for (i=0; i<nals-1; i++)
- {
-- int ac0 = an; // number of alleles in the reference population
-- for (i=0; i<nals-1; i++)
-- {
-- if ( call->ac[i]==bcf_int32_vector_end ) break;
-- if ( call->ac[i]==bcf_int32_missing ) continue;
-- ac0 -= call->ac[i];
-- call->qsum[i+1] += call->ac[i]*0.5;
-- }
-- if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1);
-- call->qsum[0] += ac0*0.5;
-- for (i=0; i<nals; i++) call->qsum[i] /= nsmpl + 0.5*an;
-+ if ( call->ac[i]==bcf_int32_vector_end ) break;
-+ if ( call->ac[i]==bcf_int32_missing ) continue;
-+ ac0 -= call->ac[i];
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[i+1] += call->ac[i]*0.5;
-+ }
-+ if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1);
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[0] += ac0*0.5;
-+ for (i=0; i<nals; i++)
-+ {
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[i] /= nsmpl + 0.5*an;
- }
- }
-+ }
-
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ {
- float qsum_tot = 0;
-- for (i=0; i<nals; i++) qsum_tot += call->qsum[i];
--
-- // Is this still necessary??
-- //
-- // if (0&& !call->qsum[0] )
-- // {
-- // // As P(RR)!=0 even for QS(ref)=0, we set QS(ref) to a small value,
-- // // an equivalent of a single reference read.
-- // if ( bcf_get_info_int32(call->hdr, rec, "DP", &call->itmp, &call->n_itmp)!=1 )
-- // error("Could not read DP at %s:%d\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1);
-- // if ( call->itmp[0] )
-- // {
-- // call->qsum[0] = 1.0 / call->itmp[0] / nsmpl;
-- // qsum_tot += call->qsum[0];
-- // }
-- // }
--
-- if ( qsum_tot ) for (i=0; i<nals; i++) call->qsum[i] /= qsum_tot;
-- #endif
-+ for (i=0; i<nals; i++) qsum_tot += call->smpl_grp.grp[j].qsum[i];
-+ if ( qsum_tot ) for (i=0; i<nals; i++) call->smpl_grp.grp[j].qsum[i] /= qsum_tot;
-+ }
-
- bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag
-
-@@ -1466,7 +1606,7 @@
- int out_als, nout;
- if ( nals > 8*sizeof(out_als) )
- {
-- fprintf(stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Too many alleles at %s:%"PRId64", skipping.\n", bcf_seqname(call->hdr,rec),(int64_t) rec->pos+1);
- return 0;
- }
- nout = mcall_find_best_alleles(call, nals, &out_als);
-@@ -1510,7 +1650,7 @@
- {
- if ( nout>4 )
- {
-- fprintf(stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Too many alleles at %s:%"PRId64", skipping.\n", bcf_seqname(call->hdr,rec),(int64_t) rec->pos+1);
- return 0;
- }
- mcall_call_trio_genotypes(call, rec, nals,nout,out_als);
---- python-pysam.orig/bcftools/mcall.c.pysam.c
-+++ python-pysam/bcftools/mcall.c.pysam.c
-@@ -25,7 +25,9 @@
- THE SOFTWARE. */
-
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/kfunc.h>
-+#include <htslib/khash_str2int.h>
- #include "call.h"
-
- // Using priors for GTs does not seem to be mathematically justified. Although
-@@ -38,9 +40,6 @@
- // genotypes is reported instead.
- #define FLAT_PDG_FOR_MISSING 0
-
--// Estimate QS (combined quality and allele frequencies) from PLs
--#define QS_FROM_PDG 0
--
-
- void qcall_init(call_t *call) { return; }
- void qcall_destroy(call_t *call) { return; }
-@@ -246,12 +245,84 @@
- free(call->trio[j][i]);
- }
-
-+static void init_sample_groups(call_t *call)
-+{
-+ int i, nsmpl = bcf_hdr_nsamples(call->hdr);
-+ if ( !call->sample_groups )
-+ {
-+ // standard pooled calling, all samples in the same group
-+ grp_t *grps = &call->smpl_grp;
-+ grps->ngrp = 1;
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)calloc(nsmpl,sizeof(int));
-+ }
-+ else if ( !strcmp("-",call->sample_groups) )
-+ {
-+ // single-sample calling, each sample creates its own group
-+ grp_t *grps = &call->smpl_grp;
-+ grps->ngrp = nsmpl;
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)malloc(nsmpl*sizeof(int));
-+ for (i=0; i<nsmpl; i++) grps->smpl2grp[i] = i;
-+ }
-+ else
-+ {
-+ int nlines;
-+ char **lines = hts_readlist(call->sample_groups, 1, &nlines);
-+ if ( !lines ) error("Could not read the file: %s\n", call->sample_groups);
-+
-+ uint32_t *smpl2grp1 = (uint32_t*)calloc(nsmpl,sizeof(uint32_t));
-+ void *grp2idx = khash_str2int_init();
-+
-+ grp_t *grps = &call->smpl_grp;
-+ for (i=0; i<nlines; i++)
-+ {
-+ char *ptr = lines[i];
-+ while ( *ptr && *ptr!='\t' ) ptr++;
-+ if ( !*ptr ) error("Could not parse the line in %s, expected a sample name followed by tab and a population name: %s\n",call->sample_groups,lines[i]);
-+ *ptr = 0;
-+ int ismpl = bcf_hdr_id2int(call->hdr, BCF_DT_SAMPLE, lines[i]);
-+ if ( ismpl<0 ) continue;
-+ if ( smpl2grp1[ismpl] ) error("Error: the sample \"%s\" is listed twice in %s\n", lines[i],call->sample_groups);
-+ if ( !khash_str2int_has_key(grp2idx,ptr+1) )
-+ {
-+ khash_str2int_inc(grp2idx, ptr+1);
-+ grps->ngrp++;
-+ }
-+ int igrp;
-+ if ( khash_str2int_get(grp2idx, ptr+1, &igrp)==0 )
-+ smpl2grp1[ismpl] = igrp+1;
-+ else
-+ error("This should not happen, fixme: %s\n",ptr+1);
-+ }
-+ khash_str2int_destroy(grp2idx);
-+
-+ grps->grp = (grp1_t*)calloc(grps->ngrp, sizeof(grp1_t));
-+ grps->smpl2grp = (int*)malloc(nsmpl*sizeof(int));
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( !smpl2grp1[i] ) error("Error: The sample \"%s\" is not listed in %s\n",call->hdr->samples[i],call->sample_groups);
-+ grps->smpl2grp[i] = smpl2grp1[i] - 1;
-+ }
-+ free(smpl2grp1);
-+ for (i=0; i<nlines; i++) free(lines[i]);
-+ free(lines);
-+ }
-+}
-+static void destroy_sample_groups(call_t *call)
-+{
-+ int i;
-+ grp_t *grps = &call->smpl_grp;
-+ for (i=0; i<grps->ngrp; i++)
-+ free(grps->grp[i].qsum);
-+ free(grps->grp);
-+ free(grps->smpl2grp);
-+}
-+
- void mcall_init(call_t *call)
- {
- call_init_pl2p(call);
-
-- call->nqsum = 5;
-- call->qsum = (float*) malloc(sizeof(float)*call->nqsum); // will be expanded later if ncessary
- call->nals_map = 5;
- call->als_map = (int*) malloc(sizeof(int)*call->nals_map);
- call->npl_map = 5*(5+1)/2; // will be expanded later if necessary
-@@ -304,26 +375,28 @@
- call->theta = log(call->theta);
- }
-
-- return;
-+ init_sample_groups(call);
- }
-
- void mcall_destroy(call_t *call)
- {
-+ destroy_sample_groups(call);
- if (call->vcmp) vcmp_destroy(call->vcmp);
- free(call->itmp);
- mcall_destroy_trios(call);
- free(call->GPs);
-+ free(call->ADs);
- free(call->GLs);
- free(call->GQs);
- free(call->anno16);
- free(call->PLs);
-- free(call->qsum);
- free(call->als_map);
- free(call->pl_map);
- free(call->gts); free(call->cgts); free(call->ugts);
- free(call->pdg);
- free(call->als);
- free(call->ac);
-+ free(call->qsum);
- return;
- }
-
-@@ -433,40 +506,6 @@
- }
- }
-
--/*
-- Allele frequency estimated as:
-- #A = \sum_i (2*P_AA + P_AB)
-- F_A = #A / ( #A + #B )
-- where i runs across all samples
--*/
--void estimate_qsum(call_t *call, bcf1_t *rec)
--{
-- double *pdg = call->pdg;
-- int ngts = rec->n_allele*(rec->n_allele+1)/2;
-- int i,nsmpl = bcf_hdr_nsamples(call->hdr);
--
-- hts_expand(float,rec->n_allele,call->nqsum,call->qsum);
-- for (i=0; i<rec->n_allele; i++) call->qsum[i] = 0;
--
-- for (i=0; i<nsmpl; i++)
-- {
-- int a, b, k = 0;
-- for (a=0; a<rec->n_allele; a++)
-- {
-- for (b=0; b<=a; b++)
-- {
-- call->qsum[a] += pdg[k];
-- call->qsum[b] += pdg[k];
-- k++;
-- }
-- }
-- pdg += ngts;
-- }
-- float sum = 0;
-- for (i=0; i<rec->n_allele; i++) sum += call->qsum[i];
-- if ( sum ) for (i=0; i<rec->n_allele; i++) call->qsum[i] /= sum;
--}
--
- // Create mapping between old and new (trimmed) alleles
- void init_allele_trimming_maps(call_t *call, int als, int nals)
- {
-@@ -583,6 +622,7 @@
- // at most tri-allelic sites are considered. Returns the number of alleles.
- static int mcall_find_best_alleles(call_t *call, int nals, int *out_als)
- {
-+ int j;
- int ia,ib,ic; // iterators over up to three alleles
- int max_als=0; // most likely combination of alleles
- double ref_lk = 0, max_lk = -HUGE_VAL; // likelihood of the reference and of most likely combination of alleles
-@@ -608,32 +648,46 @@
- UPDATE_MAX_LKs(1<<ia, ia>0 && lk_tot_set);
- }
-
-+ grp_t *grps = &call->smpl_grp;
-+
- // Two alleles
- if ( nals>1 )
- {
- for (ia=0; ia<nals; ia++)
- {
-- if ( call->qsum[ia]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ia]==0 ) continue;
- int iaa = (ia+1)*(ia+2)/2-1;
- for (ib=0; ib<ia; ib++)
- {
-- if ( call->qsum[ib]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ib]==0 ) continue;
- double lk_tot = 0;
- int lk_tot_set = 0;
-- double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]);
-- double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]);
-- double fa2 = fa*fa;
-- double fb2 = fb*fb;
-- double fab = 2*fa*fb;
-+ int ia_cov = 0, ib_cov = 0;
-+ for (j=0; j<grps->ngrp; j++)
-+ {
-+ grp1_t *grp = &grps->grp[j];
-+ if ( grp->qsum[ia] ) ia_cov = 1;
-+ if ( grp->qsum[ib] ) ib_cov = 1;
-+ if ( !grp->qsum[ia] && !grp->qsum[ib] ) { grp->dp = 0; continue; }
-+ grp->dp = 1;
-+ grp->fa = grp->qsum[ia]/(grp->qsum[ia]+grp->qsum[ib]);
-+ grp->fb = grp->qsum[ib]/(grp->qsum[ia]+grp->qsum[ib]);
-+ grp->fa2 = grp->fa*grp->fa;
-+ grp->fb2 = grp->fb*grp->fb;
-+ grp->fab = 2*grp->fa*grp->fb;
-+ }
-+ if ( !ia_cov || !ib_cov ) continue;
- int isample, ibb = (ib+1)*(ib+2)/2-1, iab = iaa - ia + ib;
- double *pdg = call->pdg;
- for (isample=0; isample<nsmpl; isample++)
- {
-+ grp1_t *grp = &grps->grp[grps->smpl2grp[isample]];
-+ if ( !grp->dp ) continue;
- double val = 0;
- if ( !call->ploidy || call->ploidy[isample]==2 )
-- val = fa2*pdg[iaa] + fb2*pdg[ibb] + fab*pdg[iab];
-+ val = grp->fa2*pdg[iaa] + grp->fb2*pdg[ibb] + grp->fab*pdg[iab];
- else if ( call->ploidy && call->ploidy[isample]==1 )
-- val = fa*pdg[iaa] + fb*pdg[ibb];
-+ val = grp->fa*pdg[iaa] + grp->fb*pdg[ibb];
- if ( val ) { lk_tot += log(val); lk_tot_set = 1; }
- pdg += ngts;
- }
-@@ -649,35 +703,48 @@
- {
- for (ia=0; ia<nals; ia++)
- {
-- if ( call->qsum[ia]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ia]==0 ) continue;
- int iaa = (ia+1)*(ia+2)/2-1;
- for (ib=0; ib<ia; ib++)
- {
-- if ( call->qsum[ib]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ib]==0 ) continue;
- int ibb = (ib+1)*(ib+2)/2-1;
- int iab = iaa - ia + ib;
- for (ic=0; ic<ib; ic++)
- {
-- if ( call->qsum[ic]==0 ) continue;
-+ if ( grps->ngrp==1 && grps->grp[0].qsum[ic]==0 ) continue;
- double lk_tot = 0;
- int lk_tot_set = 1;
-- double fa = call->qsum[ia]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fb = call->qsum[ib]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fc = call->qsum[ic]/(call->qsum[ia]+call->qsum[ib]+call->qsum[ic]);
-- double fa2 = fa*fa;
-- double fb2 = fb*fb;
-- double fc2 = fc*fc;
-- double fab = 2*fa*fb, fac = 2*fa*fc, fbc = 2*fb*fc;
-+ int ia_cov = 0, ib_cov = 0, ic_cov = 0;
-+ for (j=0; j<grps->ngrp; j++)
-+ {
-+ grp1_t *grp = &grps->grp[j];
-+ if ( grp->qsum[ia] ) ia_cov = 1;
-+ if ( grp->qsum[ib] ) ib_cov = 1;
-+ if ( grp->qsum[ic] ) ic_cov = 1;
-+ if ( !grp->qsum[ia] && !grp->qsum[ib] && !grp->qsum[ic] ) { grp->dp = 0; continue; }
-+ grp->dp = 1;
-+ grp->fa = grp->qsum[ia]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fb = grp->qsum[ib]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fc = grp->qsum[ic]/(grp->qsum[ia]+grp->qsum[ib]+grp->qsum[ic]);
-+ grp->fa2 = grp->fa*grp->fa;
-+ grp->fb2 = grp->fb*grp->fb;
-+ grp->fc2 = grp->fc*grp->fc;
-+ grp->fab = 2*grp->fa*grp->fb, grp->fac = 2*grp->fa*grp->fc, grp->fbc = 2*grp->fb*grp->fc;
-+ }
-+ if ( !ia_cov || !ib_cov || !ic_cov ) continue;
- int isample, icc = (ic+1)*(ic+2)/2-1;
- int iac = iaa - ia + ic, ibc = ibb - ib + ic;
- double *pdg = call->pdg;
- for (isample=0; isample<nsmpl; isample++)
- {
-+ grp1_t *grp = &grps->grp[grps->smpl2grp[isample]];
-+ if ( !grp->dp ) continue;
- double val = 0;
- if ( !call->ploidy || call->ploidy[isample]==2 )
-- val = fa2*pdg[iaa] + fb2*pdg[ibb] + fc2*pdg[icc] + fab*pdg[iab] + fac*pdg[iac] + fbc*pdg[ibc];
-+ val = grp->fa2*pdg[iaa] + grp->fb2*pdg[ibb] + grp->fc2*pdg[icc] + grp->fab*pdg[iab] + grp->fac*pdg[iac] + grp->fbc*pdg[ibc];
- else if ( call->ploidy && call->ploidy[isample]==1 )
-- val = fa*pdg[iaa] + fb*pdg[ibb] + fc*pdg[icc];
-+ val = grp->fa*pdg[iaa] + grp->fb*pdg[ibb] + grp->fc*pdg[icc];
- if ( val ) { lk_tot += log(val); lk_tot_set = 1; }
- pdg += ngts;
- }
-@@ -790,12 +857,13 @@
- gts[1] = ploidy==2 ? bcf_gt_unphased(0) : bcf_int32_vector_end;
-
- // Non-zero depth, determine the most likely genotype
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[isample]];
- double best_lk = 0;
- for (ia=0; ia<nals; ia++)
- {
- if ( !(out_als & 1<<ia) ) continue; // ia-th allele not in the final selection, skip
- int iaa = (ia+1)*(ia+2)/2-1; // PL index of the ia/ia genotype
-- double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia];
-+ double lk = ploidy==2 ? pdg[iaa]*grp->qsum[ia]*grp->qsum[ia] : pdg[iaa]*grp->qsum[ia];
- #if USE_PRIOR_FOR_GTS
- if ( ia!=0 ) lk *= prior;
- #endif
-@@ -818,7 +886,7 @@
- {
- if ( !(out_als & 1<<ib) ) continue;
- int iab = iaa - ia + ib;
-- double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib];
-+ double lk = 2*pdg[iab]*grp->qsum[ia]*grp->qsum[ib];
- #if USE_PRIOR_FOR_GTS
- if ( ia!=0 ) lk *= prior;
- if ( ib!=0 ) lk *= prior;
-@@ -942,6 +1010,7 @@
-
- for (i=0; i<nout_gts; i++) gls[i] = -HUGE_VAL;
-
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[isample]];
- double sum_lk = 0;
- double best_lk = 0;
- for (ia=0; ia<nals; ia++)
-@@ -949,7 +1018,7 @@
- if ( !(out_als & 1<<ia) ) continue; // ia-th allele not in the final selection, skip
- int iaa = bcf_alleles2gt(ia,ia); // PL index of the ia/ia genotype
- int idx = bcf_alleles2gt(call->als_map[ia],call->als_map[ia]);
-- double lk = ploidy==2 ? pdg[iaa]*call->qsum[ia]*call->qsum[ia] : pdg[iaa]*call->qsum[ia];
-+ double lk = ploidy==2 ? pdg[iaa]*grp->qsum[ia]*grp->qsum[ia] : pdg[iaa]*grp->qsum[ia];
- sum_lk += lk;
- gls[idx] = lk;
- if ( best_lk < lk )
-@@ -968,7 +1037,7 @@
- if ( !(out_als & 1<<ib) ) continue;
- int iab = bcf_alleles2gt(ia,ib);
- int idx = bcf_alleles2gt(call->als_map[ia],call->als_map[ib]);
-- double lk = 2*pdg[iab]*call->qsum[ia]*call->qsum[ib];
-+ double lk = 2*pdg[iab]*grp->qsum[ia]*grp->qsum[ib];
- sum_lk += lk;
- gls[idx] = lk;
- if ( best_lk < lk )
-@@ -1274,28 +1343,37 @@
- //
- static int mcall_constrain_alleles(call_t *call, bcf1_t *rec, int *unseen)
- {
-- bcf_sr_regions_t *tgt = call->srs->targets;
-- if ( tgt->nals>5 ) error("Maximum accepted number of alleles is 5, got %d\n", tgt->nals);
-- hts_expand(char*,tgt->nals+1,call->nals,call->als);
-+ assert( call->tgt_als->n );
-+ if ( call->tgt_als->n>5 ) error("Maximum accepted number of alleles is 5, got %d\n", call->tgt_als->n);
-+ hts_expand(char*,call->tgt_als->n+1,call->nals,call->als);
-
- int has_new = 0;
-
- int i, j, nals = 1;
- for (i=1; i<call->nals_map; i++) call->als_map[i] = -1;
-
-- if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], tgt->als[0]) < 0 )
-- error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,tgt->als[0],rec->d.allele[0]);
-+ if ( vcmp_set_ref(call->vcmp, rec->d.allele[0], call->tgt_als->allele[0]) < 0 )
-+ error("The reference alleles are not compatible at %s:%d .. %s vs %s\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1,call->tgt_als->allele[0],rec->d.allele[0]);
-
- // create mapping from new to old alleles
-- call->als[0] = tgt->als[0];
-+ call->als[0] = call->tgt_als->allele[0];
- call->als_map[0] = 0;
-
-- for (i=1; i<tgt->nals; i++)
-+ for (i=1; i<call->tgt_als->n; i++)
- {
-- call->als[nals] = tgt->als[i];
-- j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, tgt->als[i]);
-+ call->als[nals] = call->tgt_als->allele[i];
-+ j = vcmp_find_allele(call->vcmp, rec->d.allele+1, rec->n_allele - 1, call->tgt_als->allele[i]);
-
-- if ( j+1==*unseen ) { fprintf(bcftools_stderr,"fixme? Cannot constrain to %s\n",tgt->als[i]); return -1; }
-+ if ( j+1==*unseen )
-+ {
-+ fprintf(bcftools_stderr,"Fixme? Cannot constrain to %d-th allele (%s). VCF=",i,call->tgt_als->allele[i]);
-+ int k;
-+ for (k=0; k<rec->n_allele; k++) fprintf(bcftools_stderr,"%s%s",k==0?"":",",rec->d.allele[k]);
-+ fprintf(bcftools_stderr,"\tTAB=");
-+ for (k=0; k<call->tgt_als->n; k++) fprintf(bcftools_stderr,"%s%s",k==0?"":",",call->tgt_als->allele[k]);
-+ fprintf(bcftools_stderr,"\n");
-+ return -1;
-+ }
-
- if ( j>=0 )
- {
-@@ -1366,11 +1444,51 @@
- bcf_update_format_int32(call->hdr, rec, "PL", call->itmp, npls_new*nsmpl);
-
- // update QS
-- float qsum[5];
-- int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum);
-+ int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->smpl_grp.grp[0].qsum, &call->smpl_grp.grp[0].nqsum);
-+ hts_expand(float,nals,call->nqsum,call->qsum);
- for (i=0; i<nals; i++)
-- qsum[i] = call->als_map[i]<nqs ? call->qsum[call->als_map[i]] : 0;
-- bcf_update_info_float(call->hdr, rec, "QS", qsum, nals);
-+ call->qsum[i] = call->als_map[i]<nqs ? call->smpl_grp.grp[0].qsum[call->als_map[i]] : 0;
-+ bcf_update_info_float(call->hdr, rec, "QS", call->qsum, nals);
-+
-+ // update any Number=R tags
-+ void *tmp_ori = call->itmp, *tmp_new = call->PLs; // reusing PLs storage which is not used at this point
-+ int ntmp_ori = call->n_itmp, ntmp_new = call->mPLs;
-+ for (i=0; i<rec->n_fmt; i++)
-+ {
-+ bcf_fmt_t *fmt = &rec->d.fmt[i];
-+ int vlen = bcf_hdr_id2length(call->hdr,BCF_HL_FMT,fmt->id);
-+ if ( vlen!=BCF_VL_R ) continue; // not a Number=R tag
-+
-+ // NB:works only for BCF_HT_INT and BCF_HT_REAL
-+ int type = bcf_hdr_id2type(call->hdr,BCF_HL_FMT,fmt->id);
-+ assert( type==BCF_HT_INT || type==BCF_HT_REAL );
-+ assert( sizeof(float)==sizeof(int32_t) );
-+
-+ const char *key = bcf_hdr_int2id(call->hdr,BCF_DT_ID,fmt->id);
-+ int nret = bcf_get_format_values(call->hdr, rec, key, &tmp_ori, &ntmp_ori, type);
-+ if (nret<=0) continue;
-+ int nsmpl = bcf_hdr_nsamples(call->hdr);
-+ int size1 = sizeof(float);
-+ hts_expand(float, nsmpl * nals, ntmp_new, tmp_new);
-+ for (j=0; j<nsmpl; j++)
-+ {
-+ uint8_t *ptr_ori = (uint8_t *) tmp_ori + j*size1*fmt->n;
-+ uint8_t *ptr_new = (uint8_t *) tmp_new + j*nals*size1;
-+ for (k=0; k<nals; k++)
-+ {
-+ uint8_t *dst = ptr_new + size1*k;
-+ uint8_t *src = ptr_ori + size1*call->als_map[k];
-+ memcpy(dst,src,size1);
-+ }
-+ }
-+ nret = bcf_update_format(call->hdr, rec, key, tmp_new, nsmpl*nals, type);
-+ assert( nret==0 );
-+ }
-+ call->PLs = (int32_t*) tmp_new;
-+ call->mPLs = ntmp_new;
-+ call->itmp = (int32_t*) tmp_ori;
-+ call->n_itmp = ntmp_ori;
-+
-
- if ( *unseen ) *unseen = nals-1;
- return 0;
-@@ -1385,7 +1503,7 @@
- */
- int mcall(call_t *call, bcf1_t *rec)
- {
-- int i, unseen = call->unseen;
-+ int i,j, unseen = call->unseen;
-
- // Force alleles when calling genotypes given alleles was requested
- if ( call->flag & CALL_CONSTR_ALLELES && mcall_constrain_alleles(call, rec, &unseen)!=0 ) return -2;
-@@ -1406,61 +1524,83 @@
- hts_expand(double, call->nPLs, call->npdg, call->pdg);
- set_pdg(call->pl2p, call->PLs, call->pdg, nsmpl, ngts, unseen);
-
-- #if QS_FROM_PDG
-- estimate_qsum(call, rec);
-- #else
-- // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes.
-- int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->qsum, &call->nqsum);
-+ // Get sum of qualities, serves as an AF estimate, f_x = QS/N in Eq. 1 in call-m math notes.
-+ if ( call->smpl_grp.ngrp == 1 )
-+ {
-+ int nqs = bcf_get_info_float(call->hdr, rec, "QS", &call->smpl_grp.grp[0].qsum, &call->smpl_grp.grp[0].nqsum);
- if ( nqs<=0 ) error("The QS annotation not present at %s:%d\n", bcf_seqname(call->hdr,rec),rec->pos+1);
- if ( nqs < nals )
- {
- // Some of the listed alleles do not have the corresponding QS field. This is
-- // typically ref-only site with X in ALT.
-+ // typically ref-only site with <*> in ALT.
-+ hts_expand(float,nals,call->smpl_grp.grp[0].nqsum,call->smpl_grp.grp[0].qsum);
-+ for (i=nqs; i<nals; i++) call->smpl_grp.grp[0].qsum[i] = 0;
-+ }
-+ }
-+ else
-+ {
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ {
-+ hts_expand(float,nals,call->smpl_grp.grp[j].nqsum,call->smpl_grp.grp[j].qsum);
-+ memset(call->smpl_grp.grp[j].qsum, 0, sizeof(float)*nals);
-+ }
-
-- hts_expand(float,nals,call->nqsum,call->qsum);
-- for (i=nqs; i<nals; i++) call->qsum[i] = 0;
-+ int nad = bcf_get_format_int32(call->hdr, rec, "AD", &call->ADs, &call->nADs);
-+ if ( nad<1 ) error("Error: FORMAT/AD is required with the -G option, mpileup must be run with -a AD\n");
-+ nad /= bcf_hdr_nsamples(call->hdr);
-+ hts_expand(float,nals,call->nqsum,call->qsum);
-+ float qsum = 0;
-+ for (i=0; i<bcf_hdr_nsamples(call->hdr); i++)
-+ {
-+ int32_t *ptr = call->ADs + i*nad;
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( ptr[j]==bcf_int32_vector_end ) break;
-+ if ( ptr[j]==bcf_int32_missing ) call->qsum[j] = 0;
-+ else { call->qsum[j] = ptr[j]; qsum += ptr[j]; }
-+ }
-+ for (; j<nals; j++) call->qsum[j] = 0;
-+ if ( qsum )
-+ for (j=0; j<nals; j++) call->qsum[j] /= qsum;
-+
-+ grp1_t *grp = &call->smpl_grp.grp[call->smpl_grp.smpl2grp[i]];
-+ for (j=0; j<nals; j++)
-+ grp->qsum[j] += call->qsum[j];
- }
-+ }
-
-- // If available, take into account reference panel AFs
-- if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 )
-+ // If available, take into account reference panel AFs
-+ if ( call->prior_AN && bcf_get_info_int32(call->hdr, rec, call->prior_AN ,&call->ac, &call->nac)==1 )
-+ {
-+ int an = call->ac[0];
-+ if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 )
- {
-- int an = call->ac[0];
-- if ( bcf_get_info_int32(call->hdr, rec, call->prior_AC ,&call->ac, &call->nac)==nals-1 )
-+ int ac0 = an; // number of alleles in the reference population
-+ for (i=0; i<nals-1; i++)
- {
-- int ac0 = an; // number of alleles in the reference population
-- for (i=0; i<nals-1; i++)
-- {
-- if ( call->ac[i]==bcf_int32_vector_end ) break;
-- if ( call->ac[i]==bcf_int32_missing ) continue;
-- ac0 -= call->ac[i];
-- call->qsum[i+1] += call->ac[i]*0.5;
-- }
-- if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1);
-- call->qsum[0] += ac0*0.5;
-- for (i=0; i<nals; i++) call->qsum[i] /= nsmpl + 0.5*an;
-+ if ( call->ac[i]==bcf_int32_vector_end ) break;
-+ if ( call->ac[i]==bcf_int32_missing ) continue;
-+ ac0 -= call->ac[i];
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[i+1] += call->ac[i]*0.5;
-+ }
-+ if ( ac0<0 ) error("Incorrect %s,%s values at %s:%d\n", call->prior_AN,call->prior_AC,bcf_seqname(call->hdr,rec),rec->pos+1);
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[0] += ac0*0.5;
-+ for (i=0; i<nals; i++)
-+ {
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ call->smpl_grp.grp[j].qsum[i] /= nsmpl + 0.5*an;
- }
- }
-+ }
-
-+ for (j=0; j<call->smpl_grp.ngrp; j++)
-+ {
- float qsum_tot = 0;
-- for (i=0; i<nals; i++) qsum_tot += call->qsum[i];
--
-- // Is this still necessary??
-- //
-- // if (0&& !call->qsum[0] )
-- // {
-- // // As P(RR)!=0 even for QS(ref)=0, we set QS(ref) to a small value,
-- // // an equivalent of a single reference read.
-- // if ( bcf_get_info_int32(call->hdr, rec, "DP", &call->itmp, &call->n_itmp)!=1 )
-- // error("Could not read DP at %s:%d\n", call->hdr->id[BCF_DT_CTG][rec->rid].key,rec->pos+1);
-- // if ( call->itmp[0] )
-- // {
-- // call->qsum[0] = 1.0 / call->itmp[0] / nsmpl;
-- // qsum_tot += call->qsum[0];
-- // }
-- // }
--
-- if ( qsum_tot ) for (i=0; i<nals; i++) call->qsum[i] /= qsum_tot;
-- #endif
-+ for (i=0; i<nals; i++) qsum_tot += call->smpl_grp.grp[j].qsum[i];
-+ if ( qsum_tot ) for (i=0; i<nals; i++) call->smpl_grp.grp[j].qsum[i] /= qsum_tot;
-+ }
-
- bcf_update_info_int32(call->hdr, rec, "QS", NULL, 0); // remove QS tag
-
-@@ -1468,7 +1608,7 @@
- int out_als, nout;
- if ( nals > 8*sizeof(out_als) )
- {
-- fprintf(bcftools_stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Too many alleles at %s:%"PRId64", skipping.\n", bcf_seqname(call->hdr,rec),(int64_t) rec->pos+1);
- return 0;
- }
- nout = mcall_find_best_alleles(call, nals, &out_als);
-@@ -1512,7 +1652,7 @@
- {
- if ( nout>4 )
- {
-- fprintf(bcftools_stderr,"Too many alleles at %s:%d, skipping.\n", bcf_seqname(call->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Too many alleles at %s:%"PRId64", skipping.\n", bcf_seqname(call->hdr,rec),(int64_t) rec->pos+1);
- return 0;
- }
- mcall_call_trio_genotypes(call, rec, nals,nout,out_als);
---- python-pysam.orig/bcftools/mpileup.c
-+++ python-pysam/bcftools/mpileup.c
-@@ -1,6 +1,6 @@
- /* mpileup.c -- mpileup subcommand. Previously bam_plcmd.c from samtools
-
-- Copyright (C) 2008-2017 Genome Research Ltd.
-+ Copyright (C) 2008-2018 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -31,6 +31,7 @@
- #include <string.h>
- #include <strings.h>
- #include <limits.h>
-+#include <inttypes.h>
- #include <errno.h>
- #include <sys/stat.h>
- #include <getopt.h>
-@@ -222,8 +223,8 @@
- if (ma->conf->fai && b->core.tid >= 0) {
- has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len);
- if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence
-- fprintf(stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n",
-- __func__, b->core.pos, ref_len, b->core.tid);
-+ fprintf(stderr,"[%s] Skipping because %"PRId64" is outside of %d [ref:%d]\n",
-+ __func__, (int64_t) b->core.pos, ref_len, b->core.tid);
- continue;
- }
- } else {
-@@ -246,13 +247,28 @@
-
- // Called once per new bam added to the pileup.
- // We cache sample information here so we don't have to keep recomputing this
--// on each and every pileup column.
-+// on each and every pileup column. If FMT/SCR annotation is requested, a flag
-+// is set to indicate the presence of a soft clip.
- //
- // Cd is an arbitrary block of data we can write into, which ends up in
--// the pileup structures. We stash the sample ID there.
--static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd) {
-+// the pileup structures. We stash the sample ID there:
-+// has_soft_clip .. cd->i & 1
-+// sample_id .. cd->i >> 1
-+static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd)
-+{
- mplp_aux_t *ma = (mplp_aux_t *)data;
-- cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b);
-+ cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b) << 1;
-+ if ( ma->conf->fmt_flag & (B2B_INFO_SCR|B2B_FMT_SCR) )
-+ {
-+ int i;
-+ for (i=0; i<b->core.n_cigar; i++)
-+ {
-+ int cig = bam_get_cigar(b)[i] & BAM_CIGAR_MASK;
-+ if ( cig!=BAM_CSOFT_CLIP ) continue;
-+ cd->i |= 1;
-+ break;
-+ }
-+ }
- return 0;
- }
-
-@@ -265,7 +281,7 @@
- for (j = 0; j < n_plp[i]; ++j) // iterate over all reads available at this position
- {
- const bam_pileup1_t *p = plp[i] + j;
-- int id = p->cd.i;
-+ int id = PLP_SAMPLE_ID(p->cd.i);
- if (m->n_plp[id] == m->m_plp[id])
- {
- m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8;
-@@ -280,7 +296,7 @@
- {
- if ( !conf->gvcf )
- {
-- if ( rec ) bcf_write1(fp, hdr, rec);
-+ if ( rec && bcf_write1(fp, hdr, rec)!=0 ) error("[%s] Error: failed to write the record to %s\n", __func__,conf->output_fname?conf->output_fname:"standard output");
- return;
- }
-
-@@ -298,7 +314,7 @@
- if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][1]=='*' && rec->d.allele[1][2]=='>' ) is_ref = 1;
- }
- rec = gvcf_write(conf->gvcf, fp, hdr, rec, is_ref);
-- if ( rec ) bcf_write1(fp,hdr,rec);
-+ if ( rec && bcf_write1(fp,hdr,rec)!=0 ) error("[%s] Error: failed to write the record to %s\n", __func__,conf->output_fname?conf->output_fname:"standard output");
- }
-
- static int mpileup_reg(mplp_conf_t *conf, uint32_t beg, uint32_t end)
-@@ -310,7 +326,7 @@
-
- while ( (ret=bam_mplp_auto(conf->iter, &tid, &pos, conf->n_plp, conf->plp)) > 0)
- {
-- if ( end && (pos<beg || pos>end) ) continue;
-+ if ( pos<beg || pos>end ) continue;
- if ( conf->bed && tid >= 0 )
- {
- int overlap = regidx_overlap(conf->bed, hdr->target_name[tid], pos, pos, NULL);
-@@ -521,11 +537,13 @@
-
- bcf_hdr_append(conf->bcf_hdr,"##ALT=<ID=*,Description=\"Represents allele(s) other than observed.\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=INDEL,Number=0,Type=Flag,Description=\"Indicates that the variant is an INDEL.\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IDV,Number=1,Type=Integer,Description=\"Maximum number of reads supporting an indel\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IMF,Number=1,Type=Float,Description=\"Maximum fraction of reads supporting an indel\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IDV,Number=1,Type=Integer,Description=\"Maximum number of raw reads supporting an indel\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IMF,Number=1,Type=Float,Description=\"Maximum fraction of raw reads supporting an indel\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=DP,Number=1,Type=Integer,Description=\"Raw read depth\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=VDB,Number=1,Type=Float,Description=\"Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)\",Version=\"3\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=RPB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Read Position Bias (bigger is better)\">");
-+ if ( conf->fmt_flag&B2B_INFO_VDB )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=VDB,Number=1,Type=Float,Description=\"Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)\",Version=\"3\">");
-+ if ( conf->fmt_flag&B2B_INFO_RPB )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=RPB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Read Position Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=MQB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Mapping Quality Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=BQB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Base Quality Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=MQSB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Mapping Quality vs Strand Bias (bigger is better)\">");
-@@ -553,17 +571,21 @@
- if ( conf->fmt_flag&B2B_FMT_SP )
- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=SP,Number=1,Type=Integer,Description=\"Phred-scaled strand bias P-value\">");
- if ( conf->fmt_flag&B2B_FMT_AD )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=AD,Number=R,Type=Integer,Description=\"Allelic depths\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=AD,Number=R,Type=Integer,Description=\"Allelic depths (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_FMT_ADF )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADF,Number=R,Type=Integer,Description=\"Allelic depths on the forward strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADF,Number=R,Type=Integer,Description=\"Allelic depths on the forward strand (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_FMT_ADR )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADR,Number=R,Type=Integer,Description=\"Allelic depths on the reverse strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADR,Number=R,Type=Integer,Description=\"Allelic depths on the reverse strand (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_AD )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=AD,Number=R,Type=Integer,Description=\"Total allelic depths\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=AD,Number=R,Type=Integer,Description=\"Total allelic depths (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_ADF )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADF,Number=R,Type=Integer,Description=\"Total allelic depths on the forward strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADF,Number=R,Type=Integer,Description=\"Total allelic depths on the forward strand (high-quality bases)\">");
-+ if ( conf->fmt_flag&B2B_INFO_SCR )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=SCR,Number=1,Type=Integer,Description=\"Number of soft-clipped reads (at high-quality bases)\">");
-+ if ( conf->fmt_flag&B2B_FMT_SCR )
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=SCR,Number=1,Type=Integer,Description=\"Per-sample number of soft-clipped reads (at high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_ADR )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADR,Number=R,Type=Integer,Description=\"Total allelic depths on the reverse strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADR,Number=R,Type=Integer,Description=\"Total allelic depths on the reverse strand (high-quality bases)\">");
- if ( conf->gvcf )
- gvcf_update_header(conf->gvcf, conf->bcf_hdr);
-
-@@ -571,7 +593,7 @@
- const char **smpl = bam_smpl_get_samples(conf->bsmpl, &nsmpl);
- for (i=0; i<nsmpl; i++)
- bcf_hdr_add_sample(conf->bcf_hdr, smpl[i]);
-- bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr);
-+ if ( bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr)!=0 ) error("[%s] Error: failed to write the header to %s\n",__func__,conf->output_fname?conf->output_fname:"standard output");
-
- conf->bca = bcf_call_init(-1., conf->min_baseQ);
- conf->bcr = (bcf_callret1_t*) calloc(nsmpl, sizeof(bcf_callret1_t));
-@@ -579,6 +601,7 @@
- conf->bca->min_frac = conf->min_frac;
- conf->bca->min_support = conf->min_support;
- conf->bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE;
-+ conf->bca->fmt_flag = conf->fmt_flag;
-
- conf->bc.bcf_hdr = conf->bcf_hdr;
- conf->bc.n = nsmpl;
-@@ -599,11 +622,14 @@
- conf->bcr[i].ADF = conf->bc.ADF + (i+1)*B2B_MAX_ALLELES;
- }
- }
-+ if ( conf->fmt_flag&(B2B_INFO_SCR|B2B_FMT_SCR) )
-+ conf->bc.SCR = (int32_t*) malloc((nsmpl+1)*sizeof(*conf->bc.SCR));
- }
-
- // init mpileup
- conf->iter = bam_mplp_init(conf->nfiles, mplp_func, (void**)conf->mplp_data);
- if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(conf->iter);
-+ fprintf(stderr, "[%s] maximum number of reads per input file set to -d %d\n", __func__, conf->max_depth);
- if ( (double)conf->max_depth * conf->nfiles > 1<<20)
- fprintf(stderr, "Warning: Potential memory hog, up to %.0fM reads in the pileup!\n", (double)conf->max_depth*conf->nfiles);
- if ( (double)conf->max_depth * conf->nfiles / nsmpl < 250 )
-@@ -623,7 +649,7 @@
- if ( ireg++ > 0 )
- {
- conf->buf.l = 0;
-- ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg,conf->reg_itr->end);
-+ ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg+1,conf->reg_itr->end+1);
-
- for (i=0; i<conf->nfiles; i++)
- {
-@@ -647,7 +673,7 @@
- while ( regitr_loop(conf->reg_itr) );
- }
- else
-- mpileup_reg(conf,0,0);
-+ mpileup_reg(conf,0,UINT32_MAX);
-
- flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, NULL);
-
-@@ -656,13 +682,14 @@
- bcf_destroy1(conf->bcf_rec);
- if (conf->bcf_fp)
- {
-- hts_close(conf->bcf_fp);
-+ if ( hts_close(conf->bcf_fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,conf->output_fname);
- bcf_hdr_destroy(conf->bcf_hdr);
- bcf_call_destroy(conf->bca);
- free(conf->bc.PL);
- free(conf->bc.DP4);
- free(conf->bc.ADR);
- free(conf->bc.ADF);
-+ free(conf->bc.SCR);
- free(conf->bc.fmt_arr);
- free(conf->bcr);
- }
-@@ -738,7 +765,7 @@
- files = (char**) realloc(files,nfiles*sizeof(char*));
- files[nfiles-1] = strdup(buf);
- }
-- fclose(fh);
-+ if ( fclose(fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,file_list);
- if ( !nfiles )
- {
- fprintf(stderr,"No files read from %s\n", file_list);
-@@ -765,6 +792,8 @@
- else if ( !strcasecmp(tags[i],"AD") || !strcasecmp(tags[i],"FORMAT/AD") || !strcasecmp(tags[i],"FMT/AD") ) flag |= B2B_FMT_AD;
- else if ( !strcasecmp(tags[i],"ADF") || !strcasecmp(tags[i],"FORMAT/ADF") || !strcasecmp(tags[i],"FMT/ADF") ) flag |= B2B_FMT_ADF;
- else if ( !strcasecmp(tags[i],"ADR") || !strcasecmp(tags[i],"FORMAT/ADR") || !strcasecmp(tags[i],"FMT/ADR") ) flag |= B2B_FMT_ADR;
-+ else if ( !strcasecmp(tags[i],"SCR") || !strcasecmp(tags[i],"FORMAT/SCR") || !strcasecmp(tags[i],"FMT/SCR") ) flag |= B2B_FMT_SCR;
-+ else if ( !strcasecmp(tags[i],"INFO/SCR") ) flag |= B2B_INFO_SCR;
- else if ( !strcasecmp(tags[i],"INFO/AD") ) flag |= B2B_INFO_AD;
- else if ( !strcasecmp(tags[i],"INFO/ADF") ) flag |= B2B_INFO_ADF;
- else if ( !strcasecmp(tags[i],"INFO/ADR") ) flag |= B2B_INFO_ADR;
-@@ -779,6 +808,9 @@
- return flag;
- }
-
-+// todo: make it possible to turn off some annotations or change the defaults,
-+// specifically RPB, VDB, MWU, SGB tests. It would be good to do some
-+// benchmarking first to see if it's worth it.
- static void list_annotations(FILE *fp)
- {
- fprintf(fp,
-@@ -790,12 +822,14 @@
- " FORMAT/ADR .. Allelic depths on the reverse strand (Number=R,Type=Integer)\n"
- " FORMAT/DP .. Number of high-quality bases (Number=1,Type=Integer)\n"
- " FORMAT/SP .. Phred-scaled strand bias P-value (Number=1,Type=Integer)\n"
-+" FORMAT/SCR .. Number of soft-clipped reads (Number=1,Type=Integer)\n"
- "\n"
- "INFO annotation tags available:\n"
- "\n"
- " INFO/AD .. Total allelic depth (Number=R,Type=Integer)\n"
- " INFO/ADF .. Total allelic depths on the forward strand (Number=R,Type=Integer)\n"
- " INFO/ADR .. Total allelic depths on the reverse strand (Number=R,Type=Integer)\n"
-+" INFO/SCR .. Number of soft-clipped reads (Number=1,Type=Integer)\n"
- "\n");
- }
-
-@@ -818,7 +852,7 @@
- " -b, --bam-list FILE list of input BAM filenames, one per line\n"
- " -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n"
- " -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n"
--" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth);
-+" -d, --max-depth INT max raw per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth);
- fprintf(fp,
- " -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n"
- " -f, --fasta-ref FILE faidx indexed reference sequence file\n"
-@@ -850,7 +884,7 @@
- " -o, --output FILE write output to FILE [standard output]\n"
- " -O, --output-type TYPE 'b' compressed BCF; 'u' uncompressed BCF;\n"
- " 'z' compressed VCF; 'v' uncompressed VCF [v]\n"
--" --threads INT number of extra output compression threads [0]\n"
-+" --threads INT use multithreading with INT worker threads [0]\n"
- "\n"
- "SNP/INDEL genotype likelihoods options:\n"
- " -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ);
-@@ -870,6 +904,10 @@
- " -P, --platforms STR comma separated list of platforms for indels [all]\n"
- "\n"
- "Notes: Assuming diploid individuals.\n"
-+"\n"
-+"Example:\n"
-+" # See also http://samtools.github.io/bcftools/howtos/variant-calling.html\n"
-+" bcftools mpileup -f reference.fa alignments.bam | bcftools call -mv -Ob -o calls.bcf\n"
- "\n");
-
- free(tmp_require);
-@@ -897,6 +935,7 @@
- mplp.record_cmd_line = 1;
- mplp.n_threads = 0;
- mplp.bsmpl = bam_smpl_init();
-+ mplp.fmt_flag = B2B_INFO_VDB|B2B_INFO_RPB; // the default to be changed in future, see also parse_format_flag()
-
- static const struct option lopts[] =
- {
-@@ -1049,7 +1088,7 @@
-
- if ( mplp.gvcf && !(mplp.fmt_flag&B2B_FMT_DP) )
- {
-- fprintf(stderr,"[warning] The -t DP option is required with --gvcf, switching on.\n");
-+ fprintf(stderr,"[warning] The -a DP option is required with --gvcf, switching on.\n");
- mplp.fmt_flag |= B2B_FMT_DP;
- }
- if ( mplp.flag&(MPLP_BCF|MPLP_VCF|MPLP_NO_COMP) )
---- python-pysam.orig/bcftools/mpileup.c.pysam.c
-+++ python-pysam/bcftools/mpileup.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* mpileup.c -- mpileup subcommand. Previously bam_plcmd.c from samtools
-
-- Copyright (C) 2008-2017 Genome Research Ltd.
-+ Copyright (C) 2008-2018 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -33,6 +33,7 @@
- #include <string.h>
- #include <strings.h>
- #include <limits.h>
-+#include <inttypes.h>
- #include <errno.h>
- #include <sys/stat.h>
- #include <getopt.h>
-@@ -224,8 +225,8 @@
- if (ma->conf->fai && b->core.tid >= 0) {
- has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len);
- if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence
-- fprintf(bcftools_stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n",
-- __func__, b->core.pos, ref_len, b->core.tid);
-+ fprintf(bcftools_stderr,"[%s] Skipping because %"PRId64" is outside of %d [ref:%d]\n",
-+ __func__, (int64_t) b->core.pos, ref_len, b->core.tid);
- continue;
- }
- } else {
-@@ -248,13 +249,28 @@
-
- // Called once per new bam added to the pileup.
- // We cache sample information here so we don't have to keep recomputing this
--// on each and every pileup column.
-+// on each and every pileup column. If FMT/SCR annotation is requested, a flag
-+// is set to indicate the presence of a soft clip.
- //
- // Cd is an arbitrary block of data we can write into, which ends up in
--// the pileup structures. We stash the sample ID there.
--static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd) {
-+// the pileup structures. We stash the sample ID there:
-+// has_soft_clip .. cd->i & 1
-+// sample_id .. cd->i >> 1
-+static int pileup_constructor(void *data, const bam1_t *b, bam_pileup_cd *cd)
-+{
- mplp_aux_t *ma = (mplp_aux_t *)data;
-- cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b);
-+ cd->i = bam_smpl_get_sample_id(ma->conf->bsmpl, ma->bam_id, (bam1_t *)b) << 1;
-+ if ( ma->conf->fmt_flag & (B2B_INFO_SCR|B2B_FMT_SCR) )
-+ {
-+ int i;
-+ for (i=0; i<b->core.n_cigar; i++)
-+ {
-+ int cig = bam_get_cigar(b)[i] & BAM_CIGAR_MASK;
-+ if ( cig!=BAM_CSOFT_CLIP ) continue;
-+ cd->i |= 1;
-+ break;
-+ }
-+ }
- return 0;
- }
-
-@@ -267,7 +283,7 @@
- for (j = 0; j < n_plp[i]; ++j) // iterate over all reads available at this position
- {
- const bam_pileup1_t *p = plp[i] + j;
-- int id = p->cd.i;
-+ int id = PLP_SAMPLE_ID(p->cd.i);
- if (m->n_plp[id] == m->m_plp[id])
- {
- m->m_plp[id] = m->m_plp[id]? m->m_plp[id]<<1 : 8;
-@@ -282,7 +298,7 @@
- {
- if ( !conf->gvcf )
- {
-- if ( rec ) bcf_write1(fp, hdr, rec);
-+ if ( rec && bcf_write1(fp, hdr, rec)!=0 ) error("[%s] Error: failed to write the record to %s\n", __func__,conf->output_fname?conf->output_fname:"standard output");
- return;
- }
-
-@@ -300,7 +316,7 @@
- if ( rec->d.allele[1][0]=='<' && rec->d.allele[1][1]=='*' && rec->d.allele[1][2]=='>' ) is_ref = 1;
- }
- rec = gvcf_write(conf->gvcf, fp, hdr, rec, is_ref);
-- if ( rec ) bcf_write1(fp,hdr,rec);
-+ if ( rec && bcf_write1(fp,hdr,rec)!=0 ) error("[%s] Error: failed to write the record to %s\n", __func__,conf->output_fname?conf->output_fname:"standard output");
- }
-
- static int mpileup_reg(mplp_conf_t *conf, uint32_t beg, uint32_t end)
-@@ -312,7 +328,7 @@
-
- while ( (ret=bam_mplp_auto(conf->iter, &tid, &pos, conf->n_plp, conf->plp)) > 0)
- {
-- if ( end && (pos<beg || pos>end) ) continue;
-+ if ( pos<beg || pos>end ) continue;
- if ( conf->bed && tid >= 0 )
- {
- int overlap = regidx_overlap(conf->bed, hdr->target_name[tid], pos, pos, NULL);
-@@ -523,11 +539,13 @@
-
- bcf_hdr_append(conf->bcf_hdr,"##ALT=<ID=*,Description=\"Represents allele(s) other than observed.\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=INDEL,Number=0,Type=Flag,Description=\"Indicates that the variant is an INDEL.\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IDV,Number=1,Type=Integer,Description=\"Maximum number of reads supporting an indel\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IMF,Number=1,Type=Float,Description=\"Maximum fraction of reads supporting an indel\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IDV,Number=1,Type=Integer,Description=\"Maximum number of raw reads supporting an indel\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=IMF,Number=1,Type=Float,Description=\"Maximum fraction of raw reads supporting an indel\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=DP,Number=1,Type=Integer,Description=\"Raw read depth\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=VDB,Number=1,Type=Float,Description=\"Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)\",Version=\"3\">");
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=RPB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Read Position Bias (bigger is better)\">");
-+ if ( conf->fmt_flag&B2B_INFO_VDB )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=VDB,Number=1,Type=Float,Description=\"Variant Distance Bias for filtering splice-site artefacts in RNA-seq data (bigger is better)\",Version=\"3\">");
-+ if ( conf->fmt_flag&B2B_INFO_RPB )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=RPB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Read Position Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=MQB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Mapping Quality Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=BQB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Base Quality Bias (bigger is better)\">");
- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=MQSB,Number=1,Type=Float,Description=\"Mann-Whitney U test of Mapping Quality vs Strand Bias (bigger is better)\">");
-@@ -555,17 +573,21 @@
- if ( conf->fmt_flag&B2B_FMT_SP )
- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=SP,Number=1,Type=Integer,Description=\"Phred-scaled strand bias P-value\">");
- if ( conf->fmt_flag&B2B_FMT_AD )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=AD,Number=R,Type=Integer,Description=\"Allelic depths\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=AD,Number=R,Type=Integer,Description=\"Allelic depths (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_FMT_ADF )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADF,Number=R,Type=Integer,Description=\"Allelic depths on the forward strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADF,Number=R,Type=Integer,Description=\"Allelic depths on the forward strand (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_FMT_ADR )
-- bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADR,Number=R,Type=Integer,Description=\"Allelic depths on the reverse strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=ADR,Number=R,Type=Integer,Description=\"Allelic depths on the reverse strand (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_AD )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=AD,Number=R,Type=Integer,Description=\"Total allelic depths\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=AD,Number=R,Type=Integer,Description=\"Total allelic depths (high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_ADF )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADF,Number=R,Type=Integer,Description=\"Total allelic depths on the forward strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADF,Number=R,Type=Integer,Description=\"Total allelic depths on the forward strand (high-quality bases)\">");
-+ if ( conf->fmt_flag&B2B_INFO_SCR )
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=SCR,Number=1,Type=Integer,Description=\"Number of soft-clipped reads (at high-quality bases)\">");
-+ if ( conf->fmt_flag&B2B_FMT_SCR )
-+ bcf_hdr_append(conf->bcf_hdr,"##FORMAT=<ID=SCR,Number=1,Type=Integer,Description=\"Per-sample number of soft-clipped reads (at high-quality bases)\">");
- if ( conf->fmt_flag&B2B_INFO_ADR )
-- bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADR,Number=R,Type=Integer,Description=\"Total allelic depths on the reverse strand\">");
-+ bcf_hdr_append(conf->bcf_hdr,"##INFO=<ID=ADR,Number=R,Type=Integer,Description=\"Total allelic depths on the reverse strand (high-quality bases)\">");
- if ( conf->gvcf )
- gvcf_update_header(conf->gvcf, conf->bcf_hdr);
-
-@@ -573,7 +595,7 @@
- const char **smpl = bam_smpl_get_samples(conf->bsmpl, &nsmpl);
- for (i=0; i<nsmpl; i++)
- bcf_hdr_add_sample(conf->bcf_hdr, smpl[i]);
-- bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr);
-+ if ( bcf_hdr_write(conf->bcf_fp, conf->bcf_hdr)!=0 ) error("[%s] Error: failed to write the header to %s\n",__func__,conf->output_fname?conf->output_fname:"standard output");
-
- conf->bca = bcf_call_init(-1., conf->min_baseQ);
- conf->bcr = (bcf_callret1_t*) calloc(nsmpl, sizeof(bcf_callret1_t));
-@@ -581,6 +603,7 @@
- conf->bca->min_frac = conf->min_frac;
- conf->bca->min_support = conf->min_support;
- conf->bca->per_sample_flt = conf->flag & MPLP_PER_SAMPLE;
-+ conf->bca->fmt_flag = conf->fmt_flag;
-
- conf->bc.bcf_hdr = conf->bcf_hdr;
- conf->bc.n = nsmpl;
-@@ -601,11 +624,14 @@
- conf->bcr[i].ADF = conf->bc.ADF + (i+1)*B2B_MAX_ALLELES;
- }
- }
-+ if ( conf->fmt_flag&(B2B_INFO_SCR|B2B_FMT_SCR) )
-+ conf->bc.SCR = (int32_t*) malloc((nsmpl+1)*sizeof(*conf->bc.SCR));
- }
-
- // init mpileup
- conf->iter = bam_mplp_init(conf->nfiles, mplp_func, (void**)conf->mplp_data);
- if ( conf->flag & MPLP_SMART_OVERLAPS ) bam_mplp_init_overlaps(conf->iter);
-+ fprintf(bcftools_stderr, "[%s] maximum number of reads per input file set to -d %d\n", __func__, conf->max_depth);
- if ( (double)conf->max_depth * conf->nfiles > 1<<20)
- fprintf(bcftools_stderr, "Warning: Potential memory hog, up to %.0fM reads in the pileup!\n", (double)conf->max_depth*conf->nfiles);
- if ( (double)conf->max_depth * conf->nfiles / nsmpl < 250 )
-@@ -625,7 +651,7 @@
- if ( ireg++ > 0 )
- {
- conf->buf.l = 0;
-- ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg,conf->reg_itr->end);
-+ ksprintf(&conf->buf,"%s:%u-%u",conf->reg_itr->seq,conf->reg_itr->beg+1,conf->reg_itr->end+1);
-
- for (i=0; i<conf->nfiles; i++)
- {
-@@ -649,7 +675,7 @@
- while ( regitr_loop(conf->reg_itr) );
- }
- else
-- mpileup_reg(conf,0,0);
-+ mpileup_reg(conf,0,UINT32_MAX);
-
- flush_bcf_records(conf, conf->bcf_fp, conf->bcf_hdr, NULL);
-
-@@ -658,13 +684,14 @@
- bcf_destroy1(conf->bcf_rec);
- if (conf->bcf_fp)
- {
-- hts_close(conf->bcf_fp);
-+ if ( hts_close(conf->bcf_fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,conf->output_fname);
- bcf_hdr_destroy(conf->bcf_hdr);
- bcf_call_destroy(conf->bca);
- free(conf->bc.PL);
- free(conf->bc.DP4);
- free(conf->bc.ADR);
- free(conf->bc.ADF);
-+ free(conf->bc.SCR);
- free(conf->bc.fmt_arr);
- free(conf->bcr);
- }
-@@ -740,7 +767,7 @@
- files = (char**) realloc(files,nfiles*sizeof(char*));
- files[nfiles-1] = strdup(buf);
- }
-- fclose(fh);
-+ if ( fclose(fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,file_list);
- if ( !nfiles )
- {
- fprintf(bcftools_stderr,"No files read from %s\n", file_list);
-@@ -767,6 +794,8 @@
- else if ( !strcasecmp(tags[i],"AD") || !strcasecmp(tags[i],"FORMAT/AD") || !strcasecmp(tags[i],"FMT/AD") ) flag |= B2B_FMT_AD;
- else if ( !strcasecmp(tags[i],"ADF") || !strcasecmp(tags[i],"FORMAT/ADF") || !strcasecmp(tags[i],"FMT/ADF") ) flag |= B2B_FMT_ADF;
- else if ( !strcasecmp(tags[i],"ADR") || !strcasecmp(tags[i],"FORMAT/ADR") || !strcasecmp(tags[i],"FMT/ADR") ) flag |= B2B_FMT_ADR;
-+ else if ( !strcasecmp(tags[i],"SCR") || !strcasecmp(tags[i],"FORMAT/SCR") || !strcasecmp(tags[i],"FMT/SCR") ) flag |= B2B_FMT_SCR;
-+ else if ( !strcasecmp(tags[i],"INFO/SCR") ) flag |= B2B_INFO_SCR;
- else if ( !strcasecmp(tags[i],"INFO/AD") ) flag |= B2B_INFO_AD;
- else if ( !strcasecmp(tags[i],"INFO/ADF") ) flag |= B2B_INFO_ADF;
- else if ( !strcasecmp(tags[i],"INFO/ADR") ) flag |= B2B_INFO_ADR;
-@@ -781,6 +810,9 @@
- return flag;
- }
-
-+// todo: make it possible to turn off some annotations or change the defaults,
-+// specifically RPB, VDB, MWU, SGB tests. It would be good to do some
-+// benchmarking first to see if it's worth it.
- static void list_annotations(FILE *fp)
- {
- fprintf(fp,
-@@ -792,12 +824,14 @@
- " FORMAT/ADR .. Allelic depths on the reverse strand (Number=R,Type=Integer)\n"
- " FORMAT/DP .. Number of high-quality bases (Number=1,Type=Integer)\n"
- " FORMAT/SP .. Phred-scaled strand bias P-value (Number=1,Type=Integer)\n"
-+" FORMAT/SCR .. Number of soft-clipped reads (Number=1,Type=Integer)\n"
- "\n"
- "INFO annotation tags available:\n"
- "\n"
- " INFO/AD .. Total allelic depth (Number=R,Type=Integer)\n"
- " INFO/ADF .. Total allelic depths on the forward strand (Number=R,Type=Integer)\n"
- " INFO/ADR .. Total allelic depths on the reverse strand (Number=R,Type=Integer)\n"
-+" INFO/SCR .. Number of soft-clipped reads (Number=1,Type=Integer)\n"
- "\n");
- }
-
-@@ -820,7 +854,7 @@
- " -b, --bam-list FILE list of input BAM filenames, one per line\n"
- " -B, --no-BAQ disable BAQ (per-Base Alignment Quality)\n"
- " -C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]\n"
--" -d, --max-depth INT max per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth);
-+" -d, --max-depth INT max raw per-file depth; avoids excessive memory usage [%d]\n", mplp->max_depth);
- fprintf(fp,
- " -E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs\n"
- " -f, --fasta-ref FILE faidx indexed reference sequence file\n"
-@@ -852,7 +886,7 @@
- " -o, --output FILE write output to FILE [standard output]\n"
- " -O, --output-type TYPE 'b' compressed BCF; 'u' uncompressed BCF;\n"
- " 'z' compressed VCF; 'v' uncompressed VCF [v]\n"
--" --threads INT number of extra output compression threads [0]\n"
-+" --threads INT use multithreading with INT worker threads [0]\n"
- "\n"
- "SNP/INDEL genotype likelihoods options:\n"
- " -e, --ext-prob INT Phred-scaled gap extension seq error probability [%d]\n", mplp->extQ);
-@@ -872,6 +906,10 @@
- " -P, --platforms STR comma separated list of platforms for indels [all]\n"
- "\n"
- "Notes: Assuming diploid individuals.\n"
-+"\n"
-+"Example:\n"
-+" # See also http://samtools.github.io/bcftools/howtos/variant-calling.html\n"
-+" bcftools mpileup -f reference.fa alignments.bam | bcftools call -mv -Ob -o calls.bcf\n"
- "\n");
-
- free(tmp_require);
-@@ -899,6 +937,7 @@
- mplp.record_cmd_line = 1;
- mplp.n_threads = 0;
- mplp.bsmpl = bam_smpl_init();
-+ mplp.fmt_flag = B2B_INFO_VDB|B2B_INFO_RPB; // the default to be changed in future, see also parse_format_flag()
-
- static const struct option lopts[] =
- {
-@@ -1051,7 +1090,7 @@
-
- if ( mplp.gvcf && !(mplp.fmt_flag&B2B_FMT_DP) )
- {
-- fprintf(bcftools_stderr,"[warning] The -t DP option is required with --gvcf, switching on.\n");
-+ fprintf(bcftools_stderr,"[warning] The -a DP option is required with --gvcf, switching on.\n");
- mplp.fmt_flag |= B2B_FMT_DP;
- }
- if ( mplp.flag&(MPLP_BCF|MPLP_VCF|MPLP_NO_COMP) )
---- python-pysam.orig/bcftools/plugins/GTisec.c
-+++ python-pysam/bcftools/plugins/GTisec.c
-@@ -320,7 +320,7 @@
- int gte_smp = 0; // number GT array entries per sample (should be 2, one entry per allele)
- if ( (gte_smp = bcf_get_genotypes(args.hdr, rec, &(args.gt_arr), &(args.ngt_arr) ) ) <= 0 )
- {
-- error("GT not present at %s: %d\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, rec->pos+1);
-+ error("GT not present at %s: %"PRId64"\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, (int64_t) rec->pos+1);
- }
-
- gte_smp /= args.nsmp; // divide total number of genotypes array entries (= args.ngt_arr) by number of samples
---- python-pysam.orig/bcftools/plugins/GTisec.c.pysam.c
-+++ python-pysam/bcftools/plugins/GTisec.c.pysam.c
-@@ -322,7 +322,7 @@
- int gte_smp = 0; // number GT array entries per sample (should be 2, one entry per allele)
- if ( (gte_smp = bcf_get_genotypes(args.hdr, rec, &(args.gt_arr), &(args.ngt_arr) ) ) <= 0 )
- {
-- error("GT not present at %s: %d\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, rec->pos+1);
-+ error("GT not present at %s: %"PRId64"\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, (int64_t) rec->pos+1);
- }
-
- gte_smp /= args.nsmp; // divide total number of genotypes array entries (= args.ngt_arr) by number of samples
---- python-pysam.orig/bcftools/plugins/GTsubset.c
-+++ python-pysam/bcftools/plugins/GTsubset.c
-@@ -163,7 +163,7 @@
- args.ngt_arr = 0; /*! hold the number of current GT array entries */
- if ( (gte_smp = bcf_get_genotypes(args.hdr, rec, &(args.gt_arr), &(args.ngt_arr) ) ) <= 0 )
- {
-- error("GT not present at %s: %d\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, rec->pos+1);
-+ error("GT not present at %s: %"PRId64"\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, (int64_t) rec->pos+1);
- }
-
- gte_smp /= args.nsmp; // divide total number of genotypes array entries (= args.ngt_arr) by number of samples
---- python-pysam.orig/bcftools/plugins/GTsubset.c.pysam.c
-+++ python-pysam/bcftools/plugins/GTsubset.c.pysam.c
-@@ -165,7 +165,7 @@
- args.ngt_arr = 0; /*! hold the number of current GT array entries */
- if ( (gte_smp = bcf_get_genotypes(args.hdr, rec, &(args.gt_arr), &(args.ngt_arr) ) ) <= 0 )
- {
-- error("GT not present at %s: %d\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, rec->pos+1);
-+ error("GT not present at %s: %"PRId64"\n", args.hdr->id[BCF_DT_CTG][rec->rid].key, (int64_t) rec->pos+1);
- }
-
- gte_smp /= args.nsmp; // divide total number of genotypes array entries (= args.ngt_arr) by number of samples
---- python-pysam.orig/bcftools/plugins/ad-bias.c
-+++ python-pysam/bcftools/plugins/ad-bias.c
-@@ -26,6 +26,7 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <math.h>
- #include <htslib/hts.h>
-@@ -55,6 +56,7 @@
- convert_t *convert;
- kstring_t str;
- uint64_t nsite,ncmp;
-+ int variant_type;
- }
- args_t;
-
-@@ -75,11 +77,12 @@
- " run \"bcftools plugin\" for a list of common options\n"
- "\n"
- "Plugin options:\n"
-- " -a, --min-alt-dp <int> Minimum required alternate allele depth [1]\n"
-- " -d, --min-dp <int> Minimum required depth [0]\n"
-- " -f, --format <string> Optional tags to append to output (`bcftools query` style of format)\n"
-- " -s, --samples <file> List of sample pairs, one tab-delimited pair per line\n"
-- " -t, --threshold <float> Output only hits with p-value smaller than <float> [1e-3]\n"
-+ " -a, --min-alt-dp <int> Minimum required alternate allele depth [1]\n"
-+ " -d, --min-dp <int> Minimum required depth [0]\n"
-+ " -f, --format <string> Optional tags to append to output (`bcftools query` style of format)\n"
-+ " -s, --samples <file> List of sample pairs, one tab-delimited pair per line\n"
-+ " -t, --threshold <float> Output only hits with p-value smaller than <float> [1e-3]\n"
-+ " -v, --variant-type <snp|indel> Consider only variants of this type. (By default all variants are considered.)\n"
- "\n"
- "Example:\n"
- " bcftools +ad-bias file.bcf -- -t 1e-3 -s samples.txt\n"
-@@ -117,7 +120,7 @@
-
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-@@ -134,11 +137,12 @@
- {"format",required_argument,NULL,'f'},
- {"samples",required_argument,NULL,'s'},
- {"threshold",required_argument,NULL,'t'},
-+ {"variant-type",required_argument,NULL,'v'},
- {NULL,0,NULL,0}
- };
- int c;
- char *tmp;
-- while ((c = getopt_long(argc, argv, "?hs:t:f:d:a:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "?hs:t:f:d:a:v:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-@@ -155,6 +159,11 @@
- if ( *tmp ) error("Could not parse: -t %s\n", optarg);
- break;
- case 's': fname = optarg; break;
-+ case 'v':
-+ if ( !strcasecmp(optarg,"snp") || !strcasecmp(optarg,"snps") ) args.variant_type = VCF_SNP;
-+ else if ( !strcasecmp(optarg,"indel") || !strcasecmp(optarg,"indels") ) args.variant_type = VCF_INDEL;
-+ else error("Error: Variant type \"%s\" is not supported\n",optarg);
-+ break;
- case 'f': format = optarg; break;
- case 'h':
- case '?':
-@@ -168,14 +177,29 @@
- printf("# The command line was:\tbcftools +ad-bias %s", argv[0]);
- for (c=1; c<argc; c++) printf(" %s",argv[c]);
- printf("\n#\n");
-- printf("# FT, Fisher Test\t[2]Sample\t[3]Control\t[4]Chrom\t[5]Pos\t[6]smpl.nREF\t[7]smpl.nALT\t[8]ctrl.nREF\t[9]ctrl.nALT\t[10]P-value");
-- if ( format ) printf("\t[11-]User data: %s", format);
-+
-+ int i = 1;
-+ printf("# FT, Fisher Test");
-+ printf("\t[%d]Sample", ++i);
-+ printf("\t[%d]Control", ++i);
-+ printf("\t[%d]Chrom", ++i);
-+ printf("\t[%d]Pos", ++i);
-+ printf("\t[%d]REF", ++i);
-+ printf("\t[%d]ALT", ++i);
-+ printf("\t[%d]smpl.nREF", ++i);
-+ printf("\t[%d]smpl.nALT", ++i);
-+ printf("\t[%d]ctrl.nREF", ++i);
-+ printf("\t[%d]ctrl.nALT", ++i);
-+ printf("\t[%d]P-value", ++i);
-+ if ( format ) printf("\t[%d-]User data: %s", ++i, format);
- printf("\n");
- return 1;
- }
-
- bcf1_t *process(bcf1_t *rec)
- {
-+ if ( rec->n_allele < 2 ) return NULL;
-+
- int nad = bcf_get_format_int32(args.hdr, rec, "AD", &args.ad_arr, &args.mad_arr);
- if ( nad<0 ) return NULL;
- nad /= bcf_hdr_nsamples(args.hdr);
-@@ -183,30 +207,78 @@
- if ( args.convert ) convert_line(args.convert, rec, &args.str);
- args.nsite++;
-
-- int i;
-+ int i,j;
- for (i=0; i<args.npair; i++)
- {
- pair_t *pair = &args.pair[i];
- int32_t *aptr = args.ad_arr + nad*pair->smpl;
- int32_t *bptr = args.ad_arr + nad*pair->ctrl;
-
-- if ( aptr[0]==bcf_int32_missing ) continue;
-- if ( bptr[0]==bcf_int32_missing ) continue;
-- if ( aptr[0]+aptr[1] < args.min_dp ) continue;
-- if ( bptr[0]+bptr[1] < args.min_dp ) continue;
-- if ( aptr[1] < args.min_alt_dp && bptr[1] < args.min_alt_dp ) continue;
-+ // Find the two most frequent alleles
-+ int nbig=-1,nsmall=-1,ibig=-1,ismall=-1;
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( aptr[j]==bcf_int32_missing ) continue;
-+ if ( aptr[j]==bcf_int32_vector_end ) break;
-+ if ( ibig==-1 ) { ibig = j, nbig = aptr[j]; continue; }
-+ if ( nbig < aptr[j] )
-+ {
-+ if ( ismall==-1 || nsmall < nbig ) ismall = ibig, nsmall = nbig;
-+ ibig = j, nbig = aptr[j];
-+ continue;
-+ }
-+ if ( ismall==-1 || nsmall < aptr[j] ) ismall = j, nsmall = aptr[j];
-+ }
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( bptr[j]==bcf_int32_missing ) continue;
-+ if ( bptr[j]==bcf_int32_vector_end ) break;
-+ if ( ibig==-1 ) { ibig = j, nbig = bptr[j]; continue; }
-+ if ( ibig==j )
-+ {
-+ if ( nbig < bptr[j] ) nbig = bptr[j];
-+ continue;
-+ }
-+ if ( nbig < bptr[j] )
-+ {
-+ if ( ismall==-1 || nsmall < nbig ) ismall = ibig, nsmall = nbig;
-+ ibig = j, nbig = bptr[j];
-+ continue;
-+ }
-+ if ( ismall==-1 || nsmall < bptr[j] ) ismall = j, nsmall = bptr[j];
-+ }
-+ if ( ibig==-1 || ismall==-1 ) continue; // only one non-missing allele
-+ if ( nbig + nsmall < args.min_dp ) continue; // low depth
-+
-+ if ( aptr[ibig]==bcf_int32_missing || aptr[ibig]==bcf_int32_vector_end ) continue;
-+ if ( bptr[ibig]==bcf_int32_missing || bptr[ibig]==bcf_int32_vector_end ) continue;
-+ if ( aptr[ismall]==bcf_int32_missing || aptr[ismall]==bcf_int32_vector_end ) continue;
-+ if ( bptr[ismall]==bcf_int32_missing || bptr[ismall]==bcf_int32_vector_end ) continue;
-+
-+ if ( args.variant_type )
-+ {
-+ if ( args.variant_type==VCF_SNP && strlen(rec->d.allele[ibig])!=strlen(rec->d.allele[ismall]) ) continue;
-+ if ( args.variant_type==VCF_INDEL && strlen(rec->d.allele[ibig])==strlen(rec->d.allele[ismall]) ) continue;
-+ }
-+
-+ int iref,ialt,nalt;
-+ if ( ibig > ismall ) ialt = ibig, iref = ismall, nalt = nbig;
-+ else ialt = ismall, iref = ibig, nalt = nsmall;
-+
-+ if ( nalt < args.min_alt_dp ) continue;
-
- args.ncmp++;
-
-- int n11 = aptr[0], n12 = aptr[1];
-- int n21 = bptr[0], n22 = bptr[1];
-+ int n11 = aptr[iref], n12 = aptr[ialt];
-+ int n21 = bptr[iref], n22 = bptr[ialt];
- double left, right, fisher;
- kt_fisher_exact(n11,n12,n21,n22, &left,&right,&fisher);
- if ( fisher >= args.th ) continue;
-
-- printf("FT\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%e",
-+ printf("FT\t%s\t%s\t%s\t%"PRId64"\t%s\t%s\t%d\t%d\t%d\t%d\t%e",
- pair->smpl_name,pair->ctrl_name,
-- bcf_hdr_id2name(args.hdr,rec->rid), rec->pos+1,
-+ bcf_hdr_id2name(args.hdr,rec->rid), (int64_t) rec->pos+1,
-+ rec->d.allele[iref],rec->d.allele[ialt],
- n11,n12,n21,n22, fisher
- );
- if ( args.convert ) printf("\t%s", args.str.s);
---- python-pysam.orig/bcftools/plugins/ad-bias.c.pysam.c
-+++ python-pysam/bcftools/plugins/ad-bias.c.pysam.c
-@@ -28,6 +28,7 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <math.h>
- #include <htslib/hts.h>
-@@ -57,6 +58,7 @@
- convert_t *convert;
- kstring_t str;
- uint64_t nsite,ncmp;
-+ int variant_type;
- }
- args_t;
-
-@@ -77,11 +79,12 @@
- " run \"bcftools plugin\" for a list of common options\n"
- "\n"
- "Plugin options:\n"
-- " -a, --min-alt-dp <int> Minimum required alternate allele depth [1]\n"
-- " -d, --min-dp <int> Minimum required depth [0]\n"
-- " -f, --format <string> Optional tags to append to output (`bcftools query` style of format)\n"
-- " -s, --samples <file> List of sample pairs, one tab-delimited pair per line\n"
-- " -t, --threshold <float> Output only hits with p-value smaller than <float> [1e-3]\n"
-+ " -a, --min-alt-dp <int> Minimum required alternate allele depth [1]\n"
-+ " -d, --min-dp <int> Minimum required depth [0]\n"
-+ " -f, --format <string> Optional tags to append to output (`bcftools query` style of format)\n"
-+ " -s, --samples <file> List of sample pairs, one tab-delimited pair per line\n"
-+ " -t, --threshold <float> Output only hits with p-value smaller than <float> [1e-3]\n"
-+ " -v, --variant-type <snp|indel> Consider only variants of this type. (By default all variants are considered.)\n"
- "\n"
- "Example:\n"
- " bcftools +ad-bias file.bcf -- -t 1e-3 -s samples.txt\n"
-@@ -119,7 +122,7 @@
-
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-@@ -136,11 +139,12 @@
- {"format",required_argument,NULL,'f'},
- {"samples",required_argument,NULL,'s'},
- {"threshold",required_argument,NULL,'t'},
-+ {"variant-type",required_argument,NULL,'v'},
- {NULL,0,NULL,0}
- };
- int c;
- char *tmp;
-- while ((c = getopt_long(argc, argv, "?hs:t:f:d:a:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "?hs:t:f:d:a:v:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-@@ -157,6 +161,11 @@
- if ( *tmp ) error("Could not parse: -t %s\n", optarg);
- break;
- case 's': fname = optarg; break;
-+ case 'v':
-+ if ( !strcasecmp(optarg,"snp") || !strcasecmp(optarg,"snps") ) args.variant_type = VCF_SNP;
-+ else if ( !strcasecmp(optarg,"indel") || !strcasecmp(optarg,"indels") ) args.variant_type = VCF_INDEL;
-+ else error("Error: Variant type \"%s\" is not supported\n",optarg);
-+ break;
- case 'f': format = optarg; break;
- case 'h':
- case '?':
-@@ -170,14 +179,29 @@
- fprintf(bcftools_stdout, "# The command line was:\tbcftools +ad-bias %s", argv[0]);
- for (c=1; c<argc; c++) fprintf(bcftools_stdout, " %s",argv[c]);
- fprintf(bcftools_stdout, "\n#\n");
-- fprintf(bcftools_stdout, "# FT, Fisher Test\t[2]Sample\t[3]Control\t[4]Chrom\t[5]Pos\t[6]smpl.nREF\t[7]smpl.nALT\t[8]ctrl.nREF\t[9]ctrl.nALT\t[10]P-value");
-- if ( format ) fprintf(bcftools_stdout, "\t[11-]User data: %s", format);
-+
-+ int i = 1;
-+ fprintf(bcftools_stdout, "# FT, Fisher Test");
-+ fprintf(bcftools_stdout, "\t[%d]Sample", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]Control", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]Chrom", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]Pos", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]REF", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]ALT", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]smpl.nREF", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]smpl.nALT", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]ctrl.nREF", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]ctrl.nALT", ++i);
-+ fprintf(bcftools_stdout, "\t[%d]P-value", ++i);
-+ if ( format ) fprintf(bcftools_stdout, "\t[%d-]User data: %s", ++i, format);
- fprintf(bcftools_stdout, "\n");
- return 1;
- }
-
- bcf1_t *process(bcf1_t *rec)
- {
-+ if ( rec->n_allele < 2 ) return NULL;
-+
- int nad = bcf_get_format_int32(args.hdr, rec, "AD", &args.ad_arr, &args.mad_arr);
- if ( nad<0 ) return NULL;
- nad /= bcf_hdr_nsamples(args.hdr);
-@@ -185,30 +209,78 @@
- if ( args.convert ) convert_line(args.convert, rec, &args.str);
- args.nsite++;
-
-- int i;
-+ int i,j;
- for (i=0; i<args.npair; i++)
- {
- pair_t *pair = &args.pair[i];
- int32_t *aptr = args.ad_arr + nad*pair->smpl;
- int32_t *bptr = args.ad_arr + nad*pair->ctrl;
-
-- if ( aptr[0]==bcf_int32_missing ) continue;
-- if ( bptr[0]==bcf_int32_missing ) continue;
-- if ( aptr[0]+aptr[1] < args.min_dp ) continue;
-- if ( bptr[0]+bptr[1] < args.min_dp ) continue;
-- if ( aptr[1] < args.min_alt_dp && bptr[1] < args.min_alt_dp ) continue;
-+ // Find the two most frequent alleles
-+ int nbig=-1,nsmall=-1,ibig=-1,ismall=-1;
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( aptr[j]==bcf_int32_missing ) continue;
-+ if ( aptr[j]==bcf_int32_vector_end ) break;
-+ if ( ibig==-1 ) { ibig = j, nbig = aptr[j]; continue; }
-+ if ( nbig < aptr[j] )
-+ {
-+ if ( ismall==-1 || nsmall < nbig ) ismall = ibig, nsmall = nbig;
-+ ibig = j, nbig = aptr[j];
-+ continue;
-+ }
-+ if ( ismall==-1 || nsmall < aptr[j] ) ismall = j, nsmall = aptr[j];
-+ }
-+ for (j=0; j<nad; j++)
-+ {
-+ if ( bptr[j]==bcf_int32_missing ) continue;
-+ if ( bptr[j]==bcf_int32_vector_end ) break;
-+ if ( ibig==-1 ) { ibig = j, nbig = bptr[j]; continue; }
-+ if ( ibig==j )
-+ {
-+ if ( nbig < bptr[j] ) nbig = bptr[j];
-+ continue;
-+ }
-+ if ( nbig < bptr[j] )
-+ {
-+ if ( ismall==-1 || nsmall < nbig ) ismall = ibig, nsmall = nbig;
-+ ibig = j, nbig = bptr[j];
-+ continue;
-+ }
-+ if ( ismall==-1 || nsmall < bptr[j] ) ismall = j, nsmall = bptr[j];
-+ }
-+ if ( ibig==-1 || ismall==-1 ) continue; // only one non-missing allele
-+ if ( nbig + nsmall < args.min_dp ) continue; // low depth
-+
-+ if ( aptr[ibig]==bcf_int32_missing || aptr[ibig]==bcf_int32_vector_end ) continue;
-+ if ( bptr[ibig]==bcf_int32_missing || bptr[ibig]==bcf_int32_vector_end ) continue;
-+ if ( aptr[ismall]==bcf_int32_missing || aptr[ismall]==bcf_int32_vector_end ) continue;
-+ if ( bptr[ismall]==bcf_int32_missing || bptr[ismall]==bcf_int32_vector_end ) continue;
-+
-+ if ( args.variant_type )
-+ {
-+ if ( args.variant_type==VCF_SNP && strlen(rec->d.allele[ibig])!=strlen(rec->d.allele[ismall]) ) continue;
-+ if ( args.variant_type==VCF_INDEL && strlen(rec->d.allele[ibig])==strlen(rec->d.allele[ismall]) ) continue;
-+ }
-+
-+ int iref,ialt,nalt;
-+ if ( ibig > ismall ) ialt = ibig, iref = ismall, nalt = nbig;
-+ else ialt = ismall, iref = ibig, nalt = nsmall;
-+
-+ if ( nalt < args.min_alt_dp ) continue;
-
- args.ncmp++;
-
-- int n11 = aptr[0], n12 = aptr[1];
-- int n21 = bptr[0], n22 = bptr[1];
-+ int n11 = aptr[iref], n12 = aptr[ialt];
-+ int n21 = bptr[iref], n22 = bptr[ialt];
- double left, right, fisher;
- kt_fisher_exact(n11,n12,n21,n22, &left,&right,&fisher);
- if ( fisher >= args.th ) continue;
-
-- fprintf(bcftools_stdout, "FT\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%e",
-+ fprintf(bcftools_stdout, "FT\t%s\t%s\t%s\t%"PRId64"\t%s\t%s\t%d\t%d\t%d\t%d\t%e",
- pair->smpl_name,pair->ctrl_name,
-- bcf_hdr_id2name(args.hdr,rec->rid), rec->pos+1,
-+ bcf_hdr_id2name(args.hdr,rec->rid), (int64_t) rec->pos+1,
-+ rec->d.allele[iref],rec->d.allele[ialt],
- n11,n12,n21,n22, fisher
- );
- if ( args.convert ) fprintf(bcftools_stdout, "\t%s", args.str.s);
---- /dev/null
-+++ python-pysam/bcftools/plugins/add-variantkey.c
-@@ -0,0 +1,86 @@
-+/* plugins/add-variantkey.c -- add VariantKey INFO field.
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <inttypes.h>
-+#include "../variantkey.h"
-+
-+bcf_hdr_t *in_hdr, *out_hdr;
-+
-+const char *about(void)
-+{
-+ return "Add VariantKey INFO fields VKX and RSX.\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Add VKX and RSX columns.\n"
-+ "Usage: bcftools +add-variantkey [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +add-variantkey in.vcf\n"
-+ "\n";
-+}
-+
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ in_hdr = in;
-+ out_hdr = out;
-+ bcf_hdr_append(out_hdr, "##INFO=<ID=VKX,Number=1,Type=String,Description=\"Hexadecimal representation of 64 bit VariantKey\">");
-+ bcf_hdr_append(out_hdr, "##INFO=<ID=RSX,Number=1,Type=String,Description=\"Hexadecimal representation of ID minus the 'rs' prefix (32bit)\">");
-+ return 0;
-+}
-+
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ uint64_t vk = variantkey(
-+ in_hdr->id[BCF_DT_CTG][rec->rid].key,
-+ strlen(in_hdr->id[BCF_DT_CTG][rec->rid].key),
-+ rec->pos,
-+ rec->d.allele[0],
-+ strlen(rec->d.allele[0]),
-+ rec->d.allele[1],
-+ strlen(rec->d.allele[1]));
-+ char vs[17];
-+ variantkey_hex(vk, vs);
-+ bcf_update_info_string(out_hdr, rec, "VKX", vs);
-+ char rsid[9];
-+ char *ptr = rec->d.id;
-+ ptr += 2; // remove 'rs'
-+ sprintf(rsid, "%08" PRIx32, (uint32_t)strtoul(ptr, NULL, 10));
-+ bcf_update_info_string(out_hdr, rec, "RSX", rsid);
-+ return rec;
-+}
-+
-+void destroy(void)
-+{
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/add-variantkey.c.pysam.c
-@@ -0,0 +1,88 @@
-+#include "bcftools.pysam.h"
-+
-+/* plugins/add-variantkey.c -- add VariantKey INFO field.
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <inttypes.h>
-+#include "../variantkey.h"
-+
-+bcf_hdr_t *in_hdr, *out_hdr;
-+
-+const char *about(void)
-+{
-+ return "Add VariantKey INFO fields VKX and RSX.\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Add VKX and RSX columns.\n"
-+ "Usage: bcftools +add-variantkey [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +add-variantkey in.vcf\n"
-+ "\n";
-+}
-+
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ in_hdr = in;
-+ out_hdr = out;
-+ bcf_hdr_append(out_hdr, "##INFO=<ID=VKX,Number=1,Type=String,Description=\"Hexadecimal representation of 64 bit VariantKey\">");
-+ bcf_hdr_append(out_hdr, "##INFO=<ID=RSX,Number=1,Type=String,Description=\"Hexadecimal representation of ID minus the 'rs' prefix (32bit)\">");
-+ return 0;
-+}
-+
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ uint64_t vk = variantkey(
-+ in_hdr->id[BCF_DT_CTG][rec->rid].key,
-+ strlen(in_hdr->id[BCF_DT_CTG][rec->rid].key),
-+ rec->pos,
-+ rec->d.allele[0],
-+ strlen(rec->d.allele[0]),
-+ rec->d.allele[1],
-+ strlen(rec->d.allele[1]));
-+ char vs[17];
-+ variantkey_hex(vk, vs);
-+ bcf_update_info_string(out_hdr, rec, "VKX", vs);
-+ char rsid[9];
-+ char *ptr = rec->d.id;
-+ ptr += 2; // remove 'rs'
-+ sprintf(rsid, "%08" PRIx32, (uint32_t)strtoul(ptr, NULL, 10));
-+ bcf_update_info_string(out_hdr, rec, "RSX", rsid);
-+ return rec;
-+}
-+
-+void destroy(void)
-+{
-+}
---- python-pysam.orig/bcftools/plugins/af-dist.c
-+++ python-pysam/bcftools/plugins/af-dist.c
-@@ -170,12 +170,12 @@
- if ( dosage==1 )
- {
- args->prob_dist[iRA]++;
-- if ( list_RA ) printf("GT\t%s\t%d\t%s\t1\t%f\n",chr,rec->pos+1,args->hdr->samples[i],pRA);
-+ if ( list_RA ) printf("GT\t%s\t%"PRId64"\t%s\t1\t%f\n",chr,(int64_t) rec->pos+1,args->hdr->samples[i],pRA);
- }
- else if ( dosage==2 )
- {
- args->prob_dist[iAA]++;
-- if ( list_AA ) printf("GT\t%s\t%d\t%s\t2\t%f\n",chr,rec->pos+1,args->hdr->samples[i],pAA);
-+ if ( list_AA ) printf("GT\t%s\t%"PRId64"\t%s\t2\t%f\n",chr,(int64_t) rec->pos+1,args->hdr->samples[i],pAA);
- }
- }
-
---- python-pysam.orig/bcftools/plugins/af-dist.c.pysam.c
-+++ python-pysam/bcftools/plugins/af-dist.c.pysam.c
-@@ -172,12 +172,12 @@
- if ( dosage==1 )
- {
- args->prob_dist[iRA]++;
-- if ( list_RA ) fprintf(bcftools_stdout, "GT\t%s\t%d\t%s\t1\t%f\n",chr,rec->pos+1,args->hdr->samples[i],pRA);
-+ if ( list_RA ) fprintf(bcftools_stdout, "GT\t%s\t%"PRId64"\t%s\t1\t%f\n",chr,(int64_t) rec->pos+1,args->hdr->samples[i],pRA);
- }
- else if ( dosage==2 )
- {
- args->prob_dist[iAA]++;
-- if ( list_AA ) fprintf(bcftools_stdout, "GT\t%s\t%d\t%s\t2\t%f\n",chr,rec->pos+1,args->hdr->samples[i],pAA);
-+ if ( list_AA ) fprintf(bcftools_stdout, "GT\t%s\t%"PRId64"\t%s\t2\t%f\n",chr,(int64_t) rec->pos+1,args->hdr->samples[i],pAA);
- }
- }
-
---- /dev/null
-+++ python-pysam/bcftools/plugins/allele-length.c
-@@ -0,0 +1,113 @@
-+/* plugins/allele-length.c -- Calculate stats about the length of alleles
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/vcf.h>
-+#include <inttypes.h>
-+
-+#define MAXLEN 512
-+
-+static uint64_t numvar;
-+static uint64_t numxvar;
-+static uint64_t reflen[MAXLEN];
-+static uint64_t altlen[MAXLEN];
-+static uint64_t refaltlen[MAXLEN];
-+static uint64_t xrefaltlen[MAXLEN];
-+
-+const char *about(void)
-+{
-+ return "Count the frequency of the length of REF, ALT and REF+ALT\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Count the frequency of the length of alleles.\n"
-+ "Usage: bcftools +allele-length [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +allele-length in.vcf\n"
-+ "\n";
-+}
-+
-+// return 0 if the string contains characters other than standard ACGT base letters
-+int contain_non_base(const char *str)
-+{
-+ int c;
-+ while ((c = *str++))
-+ {
-+ if ((c != 'A') && (c != 'a') && (c != 'C') && (c != 'c') && (c != 'G') && (c != 'g') && (c != 'T') && (c != 't'))
-+ {
-+ return 1;
-+ }
-+ }
-+ return 0;
-+}
-+
-+// Called once at startup, allows to initialize local variables.
-+// Return 1 to suppress VCF/BCF header from printing, 0 otherwise.
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ numvar = 0;
-+ int i = 0;
-+ for(i = 0; i < MAXLEN; i++) {
-+ reflen[i] = 0;
-+ altlen[i] = 0;
-+ refaltlen[i] = 0;
-+ xrefaltlen[i] = 0;
-+ }
-+ return 1;
-+}
-+
-+// Called for each VCF record. Return rec to output the line or NULL to suppress output.
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ int rl = strlen(rec->d.allele[0]);
-+ int al = strlen(rec->d.allele[1]);
-+ reflen[rl] += 1;
-+ altlen[al] += 1;
-+ refaltlen[(rl + al)] += 1;
-+ if ((contain_non_base(rec->d.allele[0])) || (contain_non_base(rec->d.allele[1])))
-+ {
-+ xrefaltlen[(rl + al)] += 1;
-+ numxvar++;
-+ }
-+ numvar++;
-+ return NULL;
-+}
-+
-+// Print final output
-+void destroy(void)
-+{
-+ int i = 0;
-+ printf("LENGTH\tREF\tALT\tREF+ALT\tREF+ALT WITH NON-BASE NUCLEOTIDES\n");
-+ for(i = 0; i < MAXLEN; i++) {
-+ printf("%d\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\n", i, reflen[i], altlen[i], refaltlen[i], xrefaltlen[i]);
-+ }
-+ printf("\t\t\t%"PRIu64"\t%"PRIu64"\n", numvar, numxvar);
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/allele-length.c.pysam.c
-@@ -0,0 +1,115 @@
-+#include "bcftools.pysam.h"
-+
-+/* plugins/allele-length.c -- Calculate stats about the length of alleles
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/vcf.h>
-+#include <inttypes.h>
-+
-+#define MAXLEN 512
-+
-+static uint64_t numvar;
-+static uint64_t numxvar;
-+static uint64_t reflen[MAXLEN];
-+static uint64_t altlen[MAXLEN];
-+static uint64_t refaltlen[MAXLEN];
-+static uint64_t xrefaltlen[MAXLEN];
-+
-+const char *about(void)
-+{
-+ return "Count the frequency of the length of REF, ALT and REF+ALT\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Count the frequency of the length of alleles.\n"
-+ "Usage: bcftools +allele-length [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +allele-length in.vcf\n"
-+ "\n";
-+}
-+
-+// return 0 if the string contains characters other than standard ACGT base letters
-+int contain_non_base(const char *str)
-+{
-+ int c;
-+ while ((c = *str++))
-+ {
-+ if ((c != 'A') && (c != 'a') && (c != 'C') && (c != 'c') && (c != 'G') && (c != 'g') && (c != 'T') && (c != 't'))
-+ {
-+ return 1;
-+ }
-+ }
-+ return 0;
-+}
-+
-+// Called once at startup, allows to initialize local variables.
-+// Return 1 to suppress VCF/BCF header from printing, 0 otherwise.
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ numvar = 0;
-+ int i = 0;
-+ for(i = 0; i < MAXLEN; i++) {
-+ reflen[i] = 0;
-+ altlen[i] = 0;
-+ refaltlen[i] = 0;
-+ xrefaltlen[i] = 0;
-+ }
-+ return 1;
-+}
-+
-+// Called for each VCF record. Return rec to output the line or NULL to suppress output.
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ int rl = strlen(rec->d.allele[0]);
-+ int al = strlen(rec->d.allele[1]);
-+ reflen[rl] += 1;
-+ altlen[al] += 1;
-+ refaltlen[(rl + al)] += 1;
-+ if ((contain_non_base(rec->d.allele[0])) || (contain_non_base(rec->d.allele[1])))
-+ {
-+ xrefaltlen[(rl + al)] += 1;
-+ numxvar++;
-+ }
-+ numvar++;
-+ return NULL;
-+}
-+
-+// Print final output
-+void destroy(void)
-+{
-+ int i = 0;
-+ fprintf(bcftools_stdout, "LENGTH\tREF\tALT\tREF+ALT\tREF+ALT WITH NON-BASE NUCLEOTIDES\n");
-+ for(i = 0; i < MAXLEN; i++) {
-+ fprintf(bcftools_stdout, "%d\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\n", i, reflen[i], altlen[i], refaltlen[i], xrefaltlen[i]);
-+ }
-+ fprintf(bcftools_stdout, "\t\t\t%"PRIu64"\t%"PRIu64"\n", numvar, numxvar);
-+}
---- python-pysam.orig/bcftools/plugins/check-ploidy.c
-+++ python-pysam/bcftools/plugins/check-ploidy.c
-@@ -101,7 +101,7 @@
- if ( !fmt_gt ) return NULL; // no GT tag
-
- if ( args->ndat != rec->n_sample )
-- error("Incorrect number of samples at %s:%d .. found %d, expected %d\n",bcf_seqname(args->hdr,rec),rec->pos+1,rec->n_sample,args->ndat);
-+ error("Incorrect number of samples at %s:%"PRId64" .. found %d, expected %d\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_sample,args->ndat);
-
- if ( args->rid!=rec->rid && args->rid!=-1 )
- {
-@@ -143,7 +143,7 @@
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not recognised: %d at %s:%d\n",fmt_gt->type, bcf_seqname(args->hdr,rec),rec->pos+1); break;
-+ default: error("The GT type is not recognised: %d at %s:%"PRId64"\n",fmt_gt->type, bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1); break;
- }
- #undef BRANCH_INT
-
---- python-pysam.orig/bcftools/plugins/check-ploidy.c.pysam.c
-+++ python-pysam/bcftools/plugins/check-ploidy.c.pysam.c
-@@ -103,7 +103,7 @@
- if ( !fmt_gt ) return NULL; // no GT tag
-
- if ( args->ndat != rec->n_sample )
-- error("Incorrect number of samples at %s:%d .. found %d, expected %d\n",bcf_seqname(args->hdr,rec),rec->pos+1,rec->n_sample,args->ndat);
-+ error("Incorrect number of samples at %s:%"PRId64" .. found %d, expected %d\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_sample,args->ndat);
-
- if ( args->rid!=rec->rid && args->rid!=-1 )
- {
-@@ -145,7 +145,7 @@
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not recognised: %d at %s:%d\n",fmt_gt->type, bcf_seqname(args->hdr,rec),rec->pos+1); break;
-+ default: error("The GT type is not recognised: %d at %s:%"PRId64"\n",fmt_gt->type, bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1); break;
- }
- #undef BRANCH_INT
-
---- python-pysam.orig/bcftools/plugins/check-sparsity.c
-+++ python-pysam/bcftools/plugins/check-sparsity.c
-@@ -129,7 +129,7 @@
- if ( args->itr ) hts_itr_destroy(args->itr);
- if ( args->tbx ) tbx_destroy(args->tbx);
- if ( args->idx ) hts_idx_destroy(args->idx);
-- hts_close(args->fp);
-+ if ( hts_close(args->fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
- }
-
- static void report(args_t *args, const char *reg)
-@@ -247,7 +247,7 @@
- args->min_sites = strtol(optarg,&tmp,10);
- if ( *tmp ) error("Could not parse: -n %s\n", optarg);
- break;
-- case 'R': args->region_is_file = 1;
-+ case 'R': args->region_is_file = 1; // fall-through
- case 'r': args->region = optarg; break;
- case 'h':
- case '?':
---- python-pysam.orig/bcftools/plugins/check-sparsity.c.pysam.c
-+++ python-pysam/bcftools/plugins/check-sparsity.c.pysam.c
-@@ -131,7 +131,7 @@
- if ( args->itr ) hts_itr_destroy(args->itr);
- if ( args->tbx ) tbx_destroy(args->tbx);
- if ( args->idx ) hts_idx_destroy(args->idx);
-- hts_close(args->fp);
-+ if ( hts_close(args->fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
- }
-
- static void report(args_t *args, const char *reg)
-@@ -249,7 +249,7 @@
- args->min_sites = strtol(optarg,&tmp,10);
- if ( *tmp ) error("Could not parse: -n %s\n", optarg);
- break;
-- case 'R': args->region_is_file = 1;
-+ case 'R': args->region_is_file = 1; // fall-through
- case 'r': args->region = optarg; break;
- case 'h':
- case '?':
---- python-pysam.orig/bcftools/plugins/contrast.c
-+++ python-pysam/bcftools/plugins/contrast.c
-@@ -27,12 +27,15 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
-+#include <strings.h>
- #include <errno.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
- #include <htslib/kseq.h>
-+#include <htslib/kfunc.h>
- #include <htslib/synced_bcf_reader.h>
- #include "bcftools.h"
- #include "filter.h"
-@@ -42,21 +45,29 @@
- #define FLT_INCLUDE 1
- #define FLT_EXCLUDE 2
-
-+#define PRINT_PASSOC (1<<0)
-+#define PRINT_FASSOC (1<<1)
-+#define PRINT_NASSOC (1<<2)
-+#define PRINT_NOVELAL (1<<3)
-+#define PRINT_NOVELGT (1<<4)
-+
- typedef struct
- {
-- int argc, filter_logic, regions_is_file, targets_is_file, output_type;
-- char **argv, *output_fname, *fname, *regions, *targets, *filter_str;
-- char *bg_samples_str, *novel_samples_str;
-- int *bg_smpl, *novel_smpl, nbg_smpl, nnovel_smpl;
-+ int argc, filter_logic, regions_is_file, targets_is_file, output_type, force_samples;
-+ uint32_t annots;
-+ char **argv, *output_fname, *fname, *regions, *targets, *filter_str, *annots_str;
-+ char *control_samples_str, *case_samples_str, *max_AC_str;
-+ int *control_smpl, *case_smpl, ncontrol_smpl, ncase_smpl;
- filter_t *filter;
- bcf_srs_t *sr;
- bcf_hdr_t *hdr, *hdr_out;
- htsFile *out_fh;
- int32_t *gts;
- int mgts;
-- uint32_t *bg_gts;
-- int nbg_gts, mbg_gts, ntotal, nskipped, ntested, nnovel_al, nnovel_gt;
-- kstring_t novel_als_smpl, novel_gts_smpl;
-+ uint32_t *control_gts;
-+ int ncontrol_gts, mcontrol_gts, ntotal, nskipped, ntested, ncase_al, ncase_gt;
-+ kstring_t case_als_smpl, case_gts_smpl;
-+ int max_AC, nals[4]; // nals: number of control-ref, control-alt, case-ref and case-alt alleles in the region
- }
- args_t;
-
-@@ -71,30 +82,110 @@
- {
- return
- "\n"
-- "About: Finds novel alleles and genotypes in two groups of samples. Adds\n"
-- " an annotation which lists samples with a novel allele (INFO/NOVELAL)\n"
-- " or a novel genotype (INFO/NOVELGT)\n"
-+ "About: Runs a basic association test, per-site or in a region, and checks for novel alleles and\n"
-+ " genotypes in two groups of samples. Adds the following INFO annotations:\n"
-+ " - PASSOC .. Fisher's exact test probability of genotypic association (REF vs non-REF allele)\n"
-+ " - FASSOC .. proportion of non-REF allele in controls and cases\n"
-+ " - NASSOC .. number of control-ref, control-alt, case-ref and case-alt alleles\n"
-+ " - NOVELAL .. lists samples with a novel allele not observed in the control group\n"
-+ " - NOVELGT .. lists samples with a novel genotype not observed in the control group\n"
- "Usage: bcftools +contrast [Plugin Options]\n"
- "Plugin options:\n"
-- " -0, --bg-samples <list> list of background samples\n"
-- " -1, --novel-samples <list> list of samples where novel allele or genotype are expected\n"
-- " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-- " -i, --include EXPR include sites and samples for which the expression is true\n"
-- " -o, --output FILE output file name [stdout]\n"
-- " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-- " -r, --regions REG restrict to comma-separated list of regions\n"
-- " -R, --regions-file FILE restrict to regions listed in a file\n"
-- " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-- " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ " -a, --annots <list> list of annotations to output [PASSOC,FASSOC,NOVELAL]\n"
-+ " -0, --control-samples <list|file> file or comma-separated list of control (background) samples\n"
-+ " -1, --case-samples <list|file> file or comma-separated list of samples where novel allele or genotype is expected\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -f, --max-allele-freq NUM calculate enrichment of rare alleles. Floating point numbers between 0 and 1 are\n"
-+ " interpreted as ALT allele frequencies, integers as ALT allele counts\n"
-+ " --force-samples continue even if some samples listed in the -0,-1 files are missing from the VCF\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -o, --output FILE output file name [stdout]\n"
-+ " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
- "\n"
- "Example:\n"
- " # Test if any of the samples a,b is different from the samples c,d,e\n"
- " bcftools +contrast -0 c,d,e -1 a,b file.bcf\n"
-+ "\n"
-+ " # Same as above, but read samples from a file. In case of a name collision, the sample name\n"
-+ " # has precedence: the existence of a file with a list of samples is not checked unless no such\n"
-+ " # sample exists in the VCF. Use a full path (e.g. \"./string\" instead of \"string\") to avoid\n"
-+ " # name clashes\n"
-+ " bcftools +contrast -0 samples0.txt -1 samples1.txt file.bcf\n"
-+ "\n"
-+ " # The same as above but checks for enrichment of rare alleles, AF<0.001 in this example, in a region\n"
-+ " bcftools +contrast -r 20:1000-2000 -f 0.001 -0 samples0.txt -1 samples1.txt file.bcf\n"
- "\n";
- }
-
-+static int cmp_int(const void *a, const void *b)
-+{
-+ if ( *((int*)a) < *((int*)b) ) return -1;
-+ if ( *((int*)a) > *((int*)b) ) return -1;
-+ return 0;
-+}
-+static void read_sample_list_or_file(bcf_hdr_t *hdr, const char *str, int **smpl, int *nsmpl, int force_samples)
-+{
-+ char **str_list = NULL;
-+ int i,j, *list, nlist = 0, is_file, nskipped = 0;
-+
-+ for (is_file=0; is_file<=1; is_file++)
-+ {
-+ if ( str_list )
-+ {
-+ for (i=0; i<nlist; i++) free(str_list[i]);
-+ free(str_list);
-+ free(list);
-+ }
-+
-+ str_list = hts_readlist(str, is_file, &nlist);
-+ if ( !str_list ) error("The sample \"%s\", is not present in the VCF\n", str);
-+
-+ list = (int*) malloc(sizeof(int)*nlist);
-+ for (i=0,j=0; i<nlist; i++,j++)
-+ {
-+ list[j] = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, str_list[i]);
-+ if ( list[j] >= 0 ) continue;
-+ if ( is_file )
-+ {
-+ if ( !force_samples ) error("The sample \"%s\" is not present in the VCF. Use --force-samples to proceed anyway.\n", str_list[i]);
-+ j--;
-+ nskipped++;
-+ continue;
-+ }
-+ break;
-+ }
-+ if ( i==nlist ) break;
-+ }
-+ for (i=0; i<nlist; i++) free(str_list[i]);
-+ nlist -= nskipped;
-+ if ( !nlist ) error("None of the samples are present in the VCF: %s\n", str);
-+ if ( nskipped ) fprintf(stderr,"Warning: using %d sample%s, %d from %s %s not present in the VCF\n", nlist,nlist>1?"s":"",nskipped,str,nskipped>1?"are":"is");
-+ free(str_list);
-+ qsort(list,nlist,sizeof(*list),cmp_int);
-+ *smpl = list;
-+ *nsmpl = nlist;
-+}
-+
- static void init_data(args_t *args)
- {
-+ int ntmp, i;
-+ char **tmp = hts_readlist(args->annots_str, 0, &ntmp);
-+ for (i=0; i<ntmp; i++)
-+ {
-+ if ( !strcasecmp("PASSOC",tmp[i]) ) args->annots |= PRINT_PASSOC;
-+ else if ( !strcasecmp("FASSOC",tmp[i]) ) args->annots |= PRINT_FASSOC;
-+ else if ( !strcasecmp("NASSOC",tmp[i]) ) args->annots |= PRINT_NASSOC;
-+ else if ( !strcasecmp("NOVELAL",tmp[i]) ) args->annots |= PRINT_NOVELAL;
-+ else if ( !strcasecmp("NOVELGT",tmp[i]) ) args->annots |= PRINT_NOVELGT;
-+ else error("The annotation is not recognised: %s\n", tmp[i]);
-+ free(tmp[i]);
-+ }
-+ free(tmp);
-+
- args->sr = bcf_sr_init();
- if ( args->regions )
- {
-@@ -105,47 +196,51 @@
- if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
- args->hdr_out = bcf_hdr_dup(args->hdr);
-- bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELAL,Number=.,Type=String,Description=\"List of samples with novel alleles\">");
-- bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELGT,Number=.,Type=String,Description=\"List of samples with novel genotypes. Note that only samples w/o a novel allele are listed.\">");
-+ if ( args->annots & PRINT_PASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=PASSOC,Number=1,Type=Float,Description=\"Fisher's exact test probability of genotypic assocation (REF vs non-REF allele)\">");
-+ if ( args->annots & PRINT_FASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=FASSOC,Number=2,Type=Float,Description=\"Proportion of non-REF allele in controls and cases\">");
-+ if ( args->annots & PRINT_NASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NASSOC,Number=4,Type=Integer,Description=\"Number of control-ref, control-alt, case-ref and case-alt alleles\">");
-+ if ( args->annots & PRINT_NOVELAL )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELAL,Number=.,Type=String,Description=\"List of samples with novel alleles\">");
-+ if ( args->annots & PRINT_NOVELGT )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELGT,Number=.,Type=String,Description=\"List of samples with novel genotypes. Note that only samples w/o a novel allele are listed.\">");
-
- if ( args->filter_str )
- args->filter = filter_init(args->hdr, args->filter_str);
-
-- int i;
-- char **smpl = hts_readlist(args->bg_samples_str, 0, &args->nbg_smpl);
-- args->bg_smpl = (int*) malloc(sizeof(int)*args->nbg_smpl);
-- for (i=0; i<args->nbg_smpl; i++)
-- {
-- args->bg_smpl[i] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, smpl[i]);
-- if ( args->bg_smpl[i]<0 ) error("The sample not present in the VCF: \"%s\"\n", smpl[i]);
-- free(smpl[i]);
-- }
-- free(smpl);
--
-- smpl = hts_readlist(args->novel_samples_str, 0, &args->nnovel_smpl);
-- args->novel_smpl = (int*) malloc(sizeof(int)*args->nnovel_smpl);
-- for (i=0; i<args->nnovel_smpl; i++)
-- {
-- args->novel_smpl[i] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, smpl[i]);
-- if ( args->novel_smpl[i]<0 ) error("The sample not present in the VCF: \"%s\"\n", smpl[i]);
-- free(smpl[i]);
-- }
-- free(smpl);
-+ read_sample_list_or_file(args->hdr, args->control_samples_str, &args->control_smpl, &args->ncontrol_smpl, args->force_samples);
-+ read_sample_list_or_file(args->hdr, args->case_samples_str, &args->case_smpl, &args->ncase_smpl, args->force_samples);
-
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ if ( args->max_AC_str )
-+ {
-+ char *tmp;
-+ args->max_AC = strtol(args->max_AC_str, &tmp, 10);
-+ if ( tmp==args->max_AC_str || *tmp )
-+ {
-+ double val = strtod(args->max_AC_str, &tmp);
-+ if ( tmp==args->max_AC_str || *tmp ) error("Could not parse the argument: -f, --max-allele-freq %s\n", args->max_AC_str);
-+ if ( val<0 || val>1 ) error("Expected integer or float from the range [0,1]: -f, --max-allele-freq %s\n", args->max_AC_str);
-+ args->max_AC = val * bcf_hdr_nsamples(args->hdr);
-+ if ( !args->max_AC ) args->max_AC = 1;
-+ }
-+ }
- }
- static void destroy_data(args_t *args)
- {
- bcf_hdr_destroy(args->hdr_out);
-- hts_close(args->out_fh);
-- free(args->novel_als_smpl.s);
-- free(args->novel_gts_smpl.s);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ free(args->case_als_smpl.s);
-+ free(args->case_gts_smpl.s);
- free(args->gts);
-- free(args->bg_gts);
-- free(args->bg_smpl);
-- free(args->novel_smpl);
-+ free(args->control_gts);
-+ free(args->control_smpl);
-+ free(args->case_smpl);
- if ( args->filter ) filter_destroy(args->filter);
- bcf_sr_destroy(args->sr);
- free(args);
-@@ -191,13 +286,14 @@
- ngts /= rec->n_sample;
- if ( ngts>2 ) error("todo: ploidy=%d\n", ngts);
-
-- args->nbg_gts = 0;
-- uint32_t bg_als = 0;
-+ args->ncontrol_gts = 0;
-+ uint32_t control_als = 0;
-+ int32_t nals[4] = {0,0,0,0}; // ctrl-ref, ctrl-alt, case-ref, case-alt
- int i,j;
-- for (i=0; i<args->nbg_smpl; i++)
-+ for (i=0; i<args->ncontrol_smpl; i++)
- {
- uint32_t gt = 0;
-- int32_t *ptr = args->gts + args->bg_smpl[i]*ngts;
-+ int32_t *ptr = args->gts + args->control_smpl[i]*ngts;
- for (j=0; j<ngts; j++)
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
-@@ -207,33 +303,36 @@
- {
- if ( !warned )
- {
-- fprintf(stderr,"Too many alleles (>32) at %s:%d, skipping. (todo?)\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Too many alleles (>32) at %s:%"PRId64", skipping the site.\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
- args->nskipped++;
- return -1;
- }
-- bg_als |= 1<<ial;
-+ control_als |= 1<<ial;
- gt |= 1<<ial;
-+ if ( ial ) nals[1]++;
-+ else nals[0]++;
- }
-- binary_insert(gt, &args->bg_gts, &args->nbg_gts, &args->mbg_gts);
-+ if ( args->annots & PRINT_NOVELGT )
-+ binary_insert(gt, &args->control_gts, &args->ncontrol_gts, &args->mcontrol_gts);
- }
-- if ( !bg_als )
-+ if ( !control_als )
- {
- // all are missing
- args->nskipped++;
- return -1;
- }
-
-- args->novel_als_smpl.l = 0;
-- args->novel_gts_smpl.l = 0;
-+ args->case_als_smpl.l = 0;
-+ args->case_gts_smpl.l = 0;
-
- int has_gt = 0;
-- for (i=0; i<args->nnovel_smpl; i++)
-+ for (i=0; i<args->ncase_smpl; i++)
- {
-- int novel_al = 0;
-+ int case_al = 0;
- uint32_t gt = 0;
-- int32_t *ptr = args->gts + args->novel_smpl[i]*ngts;
-+ int32_t *ptr = args->gts + args->case_smpl[i]*ngts;
- for (j=0; j<ngts; j++)
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
-@@ -243,28 +342,33 @@
- {
- if ( !warned )
- {
-- fprintf(stderr,"Too many alleles (>32) at %s:%d, skipping. (todo?)\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Too many alleles (>32) at %s:%"PRId64", skipping. (todo?)\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
- args->nskipped++;
- return -1;
- }
-- if ( !(bg_als & (1<<ial)) ) novel_al = 1;
-+ if ( !(control_als & (1<<ial)) ) case_al = 1;
- gt |= 1<<ial;
-+ if ( ial ) nals[3]++;
-+ else nals[2]++;
- }
- if ( !gt ) continue;
- has_gt = 1;
-
-- char *smpl = args->hdr->samples[ args->novel_smpl[i] ];
-- if ( novel_al )
-+ char *smpl = args->hdr->samples[ args->case_smpl[i] ];
-+ if ( case_al )
- {
-- if ( args->novel_als_smpl.l ) kputc(',', &args->novel_als_smpl);
-- kputs(smpl, &args->novel_als_smpl);
-+ if ( args->annots & PRINT_NOVELAL )
-+ {
-+ if ( args->case_als_smpl.l ) kputc(',', &args->case_als_smpl);
-+ kputs(smpl, &args->case_als_smpl);
-+ }
- }
-- else if ( !binary_search(gt, args->bg_gts, args->nbg_gts) )
-+ else if ( (args->annots & PRINT_NOVELGT) && !binary_search(gt, args->control_gts, args->ncontrol_gts) )
- {
-- if ( args->novel_gts_smpl.l ) kputc(',', &args->novel_gts_smpl);
-- kputs(smpl, &args->novel_gts_smpl);
-+ if ( args->case_gts_smpl.l ) kputc(',', &args->case_gts_smpl);
-+ kputs(smpl, &args->case_gts_smpl);
- }
- }
- if ( !has_gt )
-@@ -273,15 +377,54 @@
- args->nskipped++;
- return -1;
- }
-- if ( args->novel_als_smpl.l )
-+
-+ if ( args->max_AC )
- {
-- bcf_update_info_string(args->hdr_out, rec, "NOVELAL", args->novel_als_smpl.s);
-- args->nnovel_al++;
-+ if ( nals[0]+nals[2] > nals[1]+nals[3] )
-+ {
-+ if ( nals[1]+nals[3] <= args->max_AC )
-+ for (i=0; i<4; i++) args->nals[i] += nals[i];
-+ }
-+ else
-+ {
-+ if ( nals[0]+nals[2] <= args->max_AC )
-+ {
-+ args->nals[0] += nals[1];
-+ args->nals[1] += nals[0];
-+ args->nals[2] += nals[3];
-+ args->nals[3] += nals[2];
-+ }
-+ }
-+ }
-+
-+ float vals[2];
-+ if ( args->annots & PRINT_PASSOC )
-+ {
-+ double left, right, fisher;
-+ kt_fisher_exact(nals[0],nals[1],nals[2],nals[3], &left,&right,&fisher);
-+ vals[0] = fisher;
-+ bcf_update_info_float(args->hdr_out, rec, "PASSOC", vals, 1);
- }
-- if ( args->novel_gts_smpl.l )
-+ if ( args->annots & PRINT_FASSOC )
- {
-- bcf_update_info_string(args->hdr_out, rec, "NOVELGT", args->novel_gts_smpl.s);
-- args->nnovel_gt++;
-+ if ( nals[0]+nals[1] ) vals[0] = (float)nals[1]/(nals[0]+nals[1]);
-+ else bcf_float_set_missing(vals[0]);
-+ if ( nals[2]+nals[3] ) vals[1] = (float)nals[3]/(nals[2]+nals[3]);
-+ else bcf_float_set_missing(vals[1]);
-+ bcf_update_info_float(args->hdr_out, rec, "FASSOC", vals, 2);
-+ }
-+ if ( args->annots & PRINT_NASSOC )
-+ bcf_update_info_int32(args->hdr_out, rec, "NASSOC", nals, 4);
-+
-+ if ( args->case_als_smpl.l )
-+ {
-+ bcf_update_info_string(args->hdr_out, rec, "NOVELAL", args->case_als_smpl.s);
-+ args->ncase_al++;
-+ }
-+ if ( args->case_gts_smpl.l )
-+ {
-+ bcf_update_info_string(args->hdr_out, rec, "NOVELGT", args->case_gts_smpl.s);
-+ args->ncase_gt++;
- }
- args->ntested++;
- return 0;
-@@ -292,10 +435,16 @@
- args_t *args = (args_t*) calloc(1,sizeof(args_t));
- args->argc = argc; args->argv = argv;
- args->output_fname = "-";
-+ args->annots_str = "PASSOC,FASSOC";
- static struct option loptions[] =
- {
-- {"bg-samples",required_argument,0,'0'},
-- {"novel-samples",required_argument,0,'1'},
-+ {"max-allele-freq",required_argument,0,'f'},
-+ {"annots",required_argument,0,'a'},
-+ {"force-samples",no_argument,0,1},
-+ {"bg-samples",required_argument,0,'0'}, // renamed to --control-samples, leaving it in for backward compatibility
-+ {"control-samples",required_argument,0,'0'},
-+ {"novel-samples",required_argument,0,'1'}, // renamed to --case-samples, leaving it in for backward compatibility
-+ {"case-samples",required_argument,0,'1'},
- {"include",required_argument,0,'i'},
- {"exclude",required_argument,0,'e'},
- {"output",required_argument,NULL,'o'},
-@@ -307,12 +456,15 @@
- {NULL,0,NULL,0}
- };
- int c;
-- while ((c = getopt_long(argc, argv, "O:o:i:e:r:R:t:T:0:1:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "O:o:i:e:r:R:t:T:0:1:a:f:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-- case '0': args->bg_samples_str = optarg; break;
-- case '1': args->novel_samples_str = optarg; break;
-+ case 1 : args->force_samples = 1; break;
-+ case 'f': args->max_AC_str = optarg; break;
-+ case 'a': args->annots_str = optarg; break;
-+ case '0': args->control_samples_str = optarg; break;
-+ case '1': args->case_samples_str = optarg; break;
- case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 't': args->targets = optarg; break;
-@@ -354,10 +506,18 @@
- if ( !pass ) continue;
- }
- process_record(args, rec);
-- bcf_write(args->out_fh, args->hdr_out, rec);
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
-
-- fprintf(stderr,"Total/processed/skipped/novel_allele/novel_gt:\t%d\t%d\t%d\t%d\t%d\n", args->ntotal, args->ntested, args->nskipped, args->nnovel_al, args->nnovel_gt);
-+ fprintf(stderr,"Total/processed/skipped/case_allele/case_gt:\t%d\t%d\t%d\t%d\t%d\n", args->ntotal, args->ntested, args->nskipped, args->ncase_al, args->ncase_gt);
-+ if ( args->max_AC )
-+ {
-+ double val1, val2, fisher;
-+ kt_fisher_exact(args->nals[0],args->nals[1],args->nals[2],args->nals[3], &val1,&val2,&fisher);
-+ val1 = args->nals[0]+args->nals[1] ? (float)args->nals[1]/(args->nals[0]+args->nals[1]) : 0;
-+ val2 = args->nals[2]+args->nals[3] ? (float)args->nals[3]/(args->nals[2]+args->nals[3]) : 0;
-+ fprintf(stderr,"max_AC/PASSOC/FASSOC/NASSOC:\t%d\t%e\t%f,%f\t%d,%d,%d,%d\n",args->max_AC,fisher,val1,val2,args->nals[0],args->nals[1],args->nals[2],args->nals[3]);
-+ }
- destroy_data(args);
-
- return 0;
---- python-pysam.orig/bcftools/plugins/contrast.c.pysam.c
-+++ python-pysam/bcftools/plugins/contrast.c.pysam.c
-@@ -29,12 +29,15 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
-+#include <strings.h>
- #include <errno.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
- #include <htslib/kseq.h>
-+#include <htslib/kfunc.h>
- #include <htslib/synced_bcf_reader.h>
- #include "bcftools.h"
- #include "filter.h"
-@@ -44,21 +47,29 @@
- #define FLT_INCLUDE 1
- #define FLT_EXCLUDE 2
-
-+#define PRINT_PASSOC (1<<0)
-+#define PRINT_FASSOC (1<<1)
-+#define PRINT_NASSOC (1<<2)
-+#define PRINT_NOVELAL (1<<3)
-+#define PRINT_NOVELGT (1<<4)
-+
- typedef struct
- {
-- int argc, filter_logic, regions_is_file, targets_is_file, output_type;
-- char **argv, *output_fname, *fname, *regions, *targets, *filter_str;
-- char *bg_samples_str, *novel_samples_str;
-- int *bg_smpl, *novel_smpl, nbg_smpl, nnovel_smpl;
-+ int argc, filter_logic, regions_is_file, targets_is_file, output_type, force_samples;
-+ uint32_t annots;
-+ char **argv, *output_fname, *fname, *regions, *targets, *filter_str, *annots_str;
-+ char *control_samples_str, *case_samples_str, *max_AC_str;
-+ int *control_smpl, *case_smpl, ncontrol_smpl, ncase_smpl;
- filter_t *filter;
- bcf_srs_t *sr;
- bcf_hdr_t *hdr, *hdr_out;
- htsFile *out_fh;
- int32_t *gts;
- int mgts;
-- uint32_t *bg_gts;
-- int nbg_gts, mbg_gts, ntotal, nskipped, ntested, nnovel_al, nnovel_gt;
-- kstring_t novel_als_smpl, novel_gts_smpl;
-+ uint32_t *control_gts;
-+ int ncontrol_gts, mcontrol_gts, ntotal, nskipped, ntested, ncase_al, ncase_gt;
-+ kstring_t case_als_smpl, case_gts_smpl;
-+ int max_AC, nals[4]; // nals: number of control-ref, control-alt, case-ref and case-alt alleles in the region
- }
- args_t;
-
-@@ -73,30 +84,110 @@
- {
- return
- "\n"
-- "About: Finds novel alleles and genotypes in two groups of samples. Adds\n"
-- " an annotation which lists samples with a novel allele (INFO/NOVELAL)\n"
-- " or a novel genotype (INFO/NOVELGT)\n"
-+ "About: Runs a basic association test, per-site or in a region, and checks for novel alleles and\n"
-+ " genotypes in two groups of samples. Adds the following INFO annotations:\n"
-+ " - PASSOC .. Fisher's exact test probability of genotypic association (REF vs non-REF allele)\n"
-+ " - FASSOC .. proportion of non-REF allele in controls and cases\n"
-+ " - NASSOC .. number of control-ref, control-alt, case-ref and case-alt alleles\n"
-+ " - NOVELAL .. lists samples with a novel allele not observed in the control group\n"
-+ " - NOVELGT .. lists samples with a novel genotype not observed in the control group\n"
- "Usage: bcftools +contrast [Plugin Options]\n"
- "Plugin options:\n"
-- " -0, --bg-samples <list> list of background samples\n"
-- " -1, --novel-samples <list> list of samples where novel allele or genotype are expected\n"
-- " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-- " -i, --include EXPR include sites and samples for which the expression is true\n"
-- " -o, --output FILE output file name [bcftools_stdout]\n"
-- " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-- " -r, --regions REG restrict to comma-separated list of regions\n"
-- " -R, --regions-file FILE restrict to regions listed in a file\n"
-- " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-- " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ " -a, --annots <list> list of annotations to output [PASSOC,FASSOC,NOVELAL]\n"
-+ " -0, --control-samples <list|file> file or comma-separated list of control (background) samples\n"
-+ " -1, --case-samples <list|file> file or comma-separated list of samples where novel allele or genotype is expected\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -f, --max-allele-freq NUM calculate enrichment of rare alleles. Floating point numbers between 0 and 1 are\n"
-+ " interpreted as ALT allele frequencies, integers as ALT allele counts\n"
-+ " --force-samples continue even if some samples listed in the -0,-1 files are missing from the VCF\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -o, --output FILE output file name [bcftools_stdout]\n"
-+ " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
- "\n"
- "Example:\n"
- " # Test if any of the samples a,b is different from the samples c,d,e\n"
- " bcftools +contrast -0 c,d,e -1 a,b file.bcf\n"
-+ "\n"
-+ " # Same as above, but read samples from a file. In case of a name collision, the sample name\n"
-+ " # has precedence: the existence of a file with a list of samples is not checked unless no such\n"
-+ " # sample exists in the VCF. Use a full path (e.g. \"./string\" instead of \"string\") to avoid\n"
-+ " # name clashes\n"
-+ " bcftools +contrast -0 samples0.txt -1 samples1.txt file.bcf\n"
-+ "\n"
-+ " # The same as above but checks for enrichment of rare alleles, AF<0.001 in this example, in a region\n"
-+ " bcftools +contrast -r 20:1000-2000 -f 0.001 -0 samples0.txt -1 samples1.txt file.bcf\n"
- "\n";
- }
-
-+static int cmp_int(const void *a, const void *b)
-+{
-+ if ( *((int*)a) < *((int*)b) ) return -1;
-+ if ( *((int*)a) > *((int*)b) ) return -1;
-+ return 0;
-+}
-+static void read_sample_list_or_file(bcf_hdr_t *hdr, const char *str, int **smpl, int *nsmpl, int force_samples)
-+{
-+ char **str_list = NULL;
-+ int i,j, *list, nlist = 0, is_file, nskipped = 0;
-+
-+ for (is_file=0; is_file<=1; is_file++)
-+ {
-+ if ( str_list )
-+ {
-+ for (i=0; i<nlist; i++) free(str_list[i]);
-+ free(str_list);
-+ free(list);
-+ }
-+
-+ str_list = hts_readlist(str, is_file, &nlist);
-+ if ( !str_list ) error("The sample \"%s\", is not present in the VCF\n", str);
-+
-+ list = (int*) malloc(sizeof(int)*nlist);
-+ for (i=0,j=0; i<nlist; i++,j++)
-+ {
-+ list[j] = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, str_list[i]);
-+ if ( list[j] >= 0 ) continue;
-+ if ( is_file )
-+ {
-+ if ( !force_samples ) error("The sample \"%s\" is not present in the VCF. Use --force-samples to proceed anyway.\n", str_list[i]);
-+ j--;
-+ nskipped++;
-+ continue;
-+ }
-+ break;
-+ }
-+ if ( i==nlist ) break;
-+ }
-+ for (i=0; i<nlist; i++) free(str_list[i]);
-+ nlist -= nskipped;
-+ if ( !nlist ) error("None of the samples are present in the VCF: %s\n", str);
-+ if ( nskipped ) fprintf(bcftools_stderr,"Warning: using %d sample%s, %d from %s %s not present in the VCF\n", nlist,nlist>1?"s":"",nskipped,str,nskipped>1?"are":"is");
-+ free(str_list);
-+ qsort(list,nlist,sizeof(*list),cmp_int);
-+ *smpl = list;
-+ *nsmpl = nlist;
-+}
-+
- static void init_data(args_t *args)
- {
-+ int ntmp, i;
-+ char **tmp = hts_readlist(args->annots_str, 0, &ntmp);
-+ for (i=0; i<ntmp; i++)
-+ {
-+ if ( !strcasecmp("PASSOC",tmp[i]) ) args->annots |= PRINT_PASSOC;
-+ else if ( !strcasecmp("FASSOC",tmp[i]) ) args->annots |= PRINT_FASSOC;
-+ else if ( !strcasecmp("NASSOC",tmp[i]) ) args->annots |= PRINT_NASSOC;
-+ else if ( !strcasecmp("NOVELAL",tmp[i]) ) args->annots |= PRINT_NOVELAL;
-+ else if ( !strcasecmp("NOVELGT",tmp[i]) ) args->annots |= PRINT_NOVELGT;
-+ else error("The annotation is not recognised: %s\n", tmp[i]);
-+ free(tmp[i]);
-+ }
-+ free(tmp);
-+
- args->sr = bcf_sr_init();
- if ( args->regions )
- {
-@@ -107,47 +198,51 @@
- if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
- args->hdr_out = bcf_hdr_dup(args->hdr);
-- bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELAL,Number=.,Type=String,Description=\"List of samples with novel alleles\">");
-- bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELGT,Number=.,Type=String,Description=\"List of samples with novel genotypes. Note that only samples w/o a novel allele are listed.\">");
-+ if ( args->annots & PRINT_PASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=PASSOC,Number=1,Type=Float,Description=\"Fisher's exact test probability of genotypic assocation (REF vs non-REF allele)\">");
-+ if ( args->annots & PRINT_FASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=FASSOC,Number=2,Type=Float,Description=\"Proportion of non-REF allele in controls and cases\">");
-+ if ( args->annots & PRINT_NASSOC )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NASSOC,Number=4,Type=Integer,Description=\"Number of control-ref, control-alt, case-ref and case-alt alleles\">");
-+ if ( args->annots & PRINT_NOVELAL )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELAL,Number=.,Type=String,Description=\"List of samples with novel alleles\">");
-+ if ( args->annots & PRINT_NOVELGT )
-+ bcf_hdr_append(args->hdr_out, "##INFO=<ID=NOVELGT,Number=.,Type=String,Description=\"List of samples with novel genotypes. Note that only samples w/o a novel allele are listed.\">");
-
- if ( args->filter_str )
- args->filter = filter_init(args->hdr, args->filter_str);
-
-- int i;
-- char **smpl = hts_readlist(args->bg_samples_str, 0, &args->nbg_smpl);
-- args->bg_smpl = (int*) malloc(sizeof(int)*args->nbg_smpl);
-- for (i=0; i<args->nbg_smpl; i++)
-- {
-- args->bg_smpl[i] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, smpl[i]);
-- if ( args->bg_smpl[i]<0 ) error("The sample not present in the VCF: \"%s\"\n", smpl[i]);
-- free(smpl[i]);
-- }
-- free(smpl);
--
-- smpl = hts_readlist(args->novel_samples_str, 0, &args->nnovel_smpl);
-- args->novel_smpl = (int*) malloc(sizeof(int)*args->nnovel_smpl);
-- for (i=0; i<args->nnovel_smpl; i++)
-- {
-- args->novel_smpl[i] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, smpl[i]);
-- if ( args->novel_smpl[i]<0 ) error("The sample not present in the VCF: \"%s\"\n", smpl[i]);
-- free(smpl[i]);
-- }
-- free(smpl);
-+ read_sample_list_or_file(args->hdr, args->control_samples_str, &args->control_smpl, &args->ncontrol_smpl, args->force_samples);
-+ read_sample_list_or_file(args->hdr, args->case_samples_str, &args->case_smpl, &args->ncase_smpl, args->force_samples);
-
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ if ( args->max_AC_str )
-+ {
-+ char *tmp;
-+ args->max_AC = strtol(args->max_AC_str, &tmp, 10);
-+ if ( tmp==args->max_AC_str || *tmp )
-+ {
-+ double val = strtod(args->max_AC_str, &tmp);
-+ if ( tmp==args->max_AC_str || *tmp ) error("Could not parse the argument: -f, --max-allele-freq %s\n", args->max_AC_str);
-+ if ( val<0 || val>1 ) error("Expected integer or float from the range [0,1]: -f, --max-allele-freq %s\n", args->max_AC_str);
-+ args->max_AC = val * bcf_hdr_nsamples(args->hdr);
-+ if ( !args->max_AC ) args->max_AC = 1;
-+ }
-+ }
- }
- static void destroy_data(args_t *args)
- {
- bcf_hdr_destroy(args->hdr_out);
-- hts_close(args->out_fh);
-- free(args->novel_als_smpl.s);
-- free(args->novel_gts_smpl.s);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ free(args->case_als_smpl.s);
-+ free(args->case_gts_smpl.s);
- free(args->gts);
-- free(args->bg_gts);
-- free(args->bg_smpl);
-- free(args->novel_smpl);
-+ free(args->control_gts);
-+ free(args->control_smpl);
-+ free(args->case_smpl);
- if ( args->filter ) filter_destroy(args->filter);
- bcf_sr_destroy(args->sr);
- free(args);
-@@ -193,13 +288,14 @@
- ngts /= rec->n_sample;
- if ( ngts>2 ) error("todo: ploidy=%d\n", ngts);
-
-- args->nbg_gts = 0;
-- uint32_t bg_als = 0;
-+ args->ncontrol_gts = 0;
-+ uint32_t control_als = 0;
-+ int32_t nals[4] = {0,0,0,0}; // ctrl-ref, ctrl-alt, case-ref, case-alt
- int i,j;
-- for (i=0; i<args->nbg_smpl; i++)
-+ for (i=0; i<args->ncontrol_smpl; i++)
- {
- uint32_t gt = 0;
-- int32_t *ptr = args->gts + args->bg_smpl[i]*ngts;
-+ int32_t *ptr = args->gts + args->control_smpl[i]*ngts;
- for (j=0; j<ngts; j++)
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
-@@ -209,33 +305,36 @@
- {
- if ( !warned )
- {
-- fprintf(bcftools_stderr,"Too many alleles (>32) at %s:%d, skipping. (todo?)\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Too many alleles (>32) at %s:%"PRId64", skipping the site.\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
- args->nskipped++;
- return -1;
- }
-- bg_als |= 1<<ial;
-+ control_als |= 1<<ial;
- gt |= 1<<ial;
-+ if ( ial ) nals[1]++;
-+ else nals[0]++;
- }
-- binary_insert(gt, &args->bg_gts, &args->nbg_gts, &args->mbg_gts);
-+ if ( args->annots & PRINT_NOVELGT )
-+ binary_insert(gt, &args->control_gts, &args->ncontrol_gts, &args->mcontrol_gts);
- }
-- if ( !bg_als )
-+ if ( !control_als )
- {
- // all are missing
- args->nskipped++;
- return -1;
- }
-
-- args->novel_als_smpl.l = 0;
-- args->novel_gts_smpl.l = 0;
-+ args->case_als_smpl.l = 0;
-+ args->case_gts_smpl.l = 0;
-
- int has_gt = 0;
-- for (i=0; i<args->nnovel_smpl; i++)
-+ for (i=0; i<args->ncase_smpl; i++)
- {
-- int novel_al = 0;
-+ int case_al = 0;
- uint32_t gt = 0;
-- int32_t *ptr = args->gts + args->novel_smpl[i]*ngts;
-+ int32_t *ptr = args->gts + args->case_smpl[i]*ngts;
- for (j=0; j<ngts; j++)
- {
- if ( ptr[j]==bcf_int32_vector_end ) break;
-@@ -245,28 +344,33 @@
- {
- if ( !warned )
- {
-- fprintf(bcftools_stderr,"Too many alleles (>32) at %s:%d, skipping. (todo?)\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Too many alleles (>32) at %s:%"PRId64", skipping. (todo?)\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
- args->nskipped++;
- return -1;
- }
-- if ( !(bg_als & (1<<ial)) ) novel_al = 1;
-+ if ( !(control_als & (1<<ial)) ) case_al = 1;
- gt |= 1<<ial;
-+ if ( ial ) nals[3]++;
-+ else nals[2]++;
- }
- if ( !gt ) continue;
- has_gt = 1;
-
-- char *smpl = args->hdr->samples[ args->novel_smpl[i] ];
-- if ( novel_al )
-+ char *smpl = args->hdr->samples[ args->case_smpl[i] ];
-+ if ( case_al )
- {
-- if ( args->novel_als_smpl.l ) kputc(',', &args->novel_als_smpl);
-- kputs(smpl, &args->novel_als_smpl);
-+ if ( args->annots & PRINT_NOVELAL )
-+ {
-+ if ( args->case_als_smpl.l ) kputc(',', &args->case_als_smpl);
-+ kputs(smpl, &args->case_als_smpl);
-+ }
- }
-- else if ( !binary_search(gt, args->bg_gts, args->nbg_gts) )
-+ else if ( (args->annots & PRINT_NOVELGT) && !binary_search(gt, args->control_gts, args->ncontrol_gts) )
- {
-- if ( args->novel_gts_smpl.l ) kputc(',', &args->novel_gts_smpl);
-- kputs(smpl, &args->novel_gts_smpl);
-+ if ( args->case_gts_smpl.l ) kputc(',', &args->case_gts_smpl);
-+ kputs(smpl, &args->case_gts_smpl);
- }
- }
- if ( !has_gt )
-@@ -275,15 +379,54 @@
- args->nskipped++;
- return -1;
- }
-- if ( args->novel_als_smpl.l )
-+
-+ if ( args->max_AC )
- {
-- bcf_update_info_string(args->hdr_out, rec, "NOVELAL", args->novel_als_smpl.s);
-- args->nnovel_al++;
-+ if ( nals[0]+nals[2] > nals[1]+nals[3] )
-+ {
-+ if ( nals[1]+nals[3] <= args->max_AC )
-+ for (i=0; i<4; i++) args->nals[i] += nals[i];
-+ }
-+ else
-+ {
-+ if ( nals[0]+nals[2] <= args->max_AC )
-+ {
-+ args->nals[0] += nals[1];
-+ args->nals[1] += nals[0];
-+ args->nals[2] += nals[3];
-+ args->nals[3] += nals[2];
-+ }
-+ }
-+ }
-+
-+ float vals[2];
-+ if ( args->annots & PRINT_PASSOC )
-+ {
-+ double left, right, fisher;
-+ kt_fisher_exact(nals[0],nals[1],nals[2],nals[3], &left,&right,&fisher);
-+ vals[0] = fisher;
-+ bcf_update_info_float(args->hdr_out, rec, "PASSOC", vals, 1);
- }
-- if ( args->novel_gts_smpl.l )
-+ if ( args->annots & PRINT_FASSOC )
- {
-- bcf_update_info_string(args->hdr_out, rec, "NOVELGT", args->novel_gts_smpl.s);
-- args->nnovel_gt++;
-+ if ( nals[0]+nals[1] ) vals[0] = (float)nals[1]/(nals[0]+nals[1]);
-+ else bcf_float_set_missing(vals[0]);
-+ if ( nals[2]+nals[3] ) vals[1] = (float)nals[3]/(nals[2]+nals[3]);
-+ else bcf_float_set_missing(vals[1]);
-+ bcf_update_info_float(args->hdr_out, rec, "FASSOC", vals, 2);
-+ }
-+ if ( args->annots & PRINT_NASSOC )
-+ bcf_update_info_int32(args->hdr_out, rec, "NASSOC", nals, 4);
-+
-+ if ( args->case_als_smpl.l )
-+ {
-+ bcf_update_info_string(args->hdr_out, rec, "NOVELAL", args->case_als_smpl.s);
-+ args->ncase_al++;
-+ }
-+ if ( args->case_gts_smpl.l )
-+ {
-+ bcf_update_info_string(args->hdr_out, rec, "NOVELGT", args->case_gts_smpl.s);
-+ args->ncase_gt++;
- }
- args->ntested++;
- return 0;
-@@ -294,10 +437,16 @@
- args_t *args = (args_t*) calloc(1,sizeof(args_t));
- args->argc = argc; args->argv = argv;
- args->output_fname = "-";
-+ args->annots_str = "PASSOC,FASSOC";
- static struct option loptions[] =
- {
-- {"bg-samples",required_argument,0,'0'},
-- {"novel-samples",required_argument,0,'1'},
-+ {"max-allele-freq",required_argument,0,'f'},
-+ {"annots",required_argument,0,'a'},
-+ {"force-samples",no_argument,0,1},
-+ {"bg-samples",required_argument,0,'0'}, // renamed to --control-samples, leaving it in for backward compatibility
-+ {"control-samples",required_argument,0,'0'},
-+ {"novel-samples",required_argument,0,'1'}, // renamed to --case-samples, leaving it in for backward compatibility
-+ {"case-samples",required_argument,0,'1'},
- {"include",required_argument,0,'i'},
- {"exclude",required_argument,0,'e'},
- {"output",required_argument,NULL,'o'},
-@@ -309,12 +458,15 @@
- {NULL,0,NULL,0}
- };
- int c;
-- while ((c = getopt_long(argc, argv, "O:o:i:e:r:R:t:T:0:1:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "O:o:i:e:r:R:t:T:0:1:a:f:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-- case '0': args->bg_samples_str = optarg; break;
-- case '1': args->novel_samples_str = optarg; break;
-+ case 1 : args->force_samples = 1; break;
-+ case 'f': args->max_AC_str = optarg; break;
-+ case 'a': args->annots_str = optarg; break;
-+ case '0': args->control_samples_str = optarg; break;
-+ case '1': args->case_samples_str = optarg; break;
- case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 't': args->targets = optarg; break;
-@@ -356,10 +508,18 @@
- if ( !pass ) continue;
- }
- process_record(args, rec);
-- bcf_write(args->out_fh, args->hdr_out, rec);
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
-
-- fprintf(bcftools_stderr,"Total/processed/skipped/novel_allele/novel_gt:\t%d\t%d\t%d\t%d\t%d\n", args->ntotal, args->ntested, args->nskipped, args->nnovel_al, args->nnovel_gt);
-+ fprintf(bcftools_stderr,"Total/processed/skipped/case_allele/case_gt:\t%d\t%d\t%d\t%d\t%d\n", args->ntotal, args->ntested, args->nskipped, args->ncase_al, args->ncase_gt);
-+ if ( args->max_AC )
-+ {
-+ double val1, val2, fisher;
-+ kt_fisher_exact(args->nals[0],args->nals[1],args->nals[2],args->nals[3], &val1,&val2,&fisher);
-+ val1 = args->nals[0]+args->nals[1] ? (float)args->nals[1]/(args->nals[0]+args->nals[1]) : 0;
-+ val2 = args->nals[2]+args->nals[3] ? (float)args->nals[3]/(args->nals[2]+args->nals[3]) : 0;
-+ fprintf(bcftools_stderr,"max_AC/PASSOC/FASSOC/NASSOC:\t%d\t%e\t%f,%f\t%d,%d,%d,%d\n",args->max_AC,fisher,val1,val2,args->nals[0],args->nals[1],args->nals[2],args->nals[3]);
-+ }
- destroy_data(args);
-
- return 0;
---- python-pysam.orig/bcftools/plugins/counts.c
-+++ python-pysam/bcftools/plugins/counts.c
-@@ -1,6 +1,6 @@
- /* plugins/counts.c -- counts SNPs, Indels, and total number of sites.
-
-- Copyright (C) 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2013-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -24,9 +24,10 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
-
--int nsamples, nsnps, nindels, nmnps, nothers, nsites;
-+uint64_t nsamples, nsnps, nindels, nmnps, nothers, nsites;
-
- /*
- This short description is used to generate the output of `bcftools plugin -l`.
-@@ -71,12 +72,12 @@
- */
- void destroy(void)
- {
-- printf("Number of samples: %d\n", nsamples);
-- printf("Number of SNPs: %d\n", nsnps);
-- printf("Number of INDELs: %d\n", nindels);
-- printf("Number of MNPs: %d\n", nmnps);
-- printf("Number of others: %d\n", nothers);
-- printf("Number of sites: %d\n", nsites);
-+ printf("Number of samples: %"PRIu64"\n", nsamples);
-+ printf("Number of SNPs: %"PRIu64"\n", nsnps);
-+ printf("Number of INDELs: %"PRIu64"\n", nindels);
-+ printf("Number of MNPs: %"PRIu64"\n", nmnps);
-+ printf("Number of others: %"PRIu64"\n", nothers);
-+ printf("Number of sites: %"PRIu64"\n", nsites);
- }
-
-
---- python-pysam.orig/bcftools/plugins/counts.c.pysam.c
-+++ python-pysam/bcftools/plugins/counts.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* plugins/counts.c -- counts SNPs, Indels, and total number of sites.
-
-- Copyright (C) 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2013-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -26,9 +26,10 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
-
--int nsamples, nsnps, nindels, nmnps, nothers, nsites;
-+uint64_t nsamples, nsnps, nindels, nmnps, nothers, nsites;
-
- /*
- This short description is used to generate the output of `bcftools plugin -l`.
-@@ -73,12 +74,12 @@
- */
- void destroy(void)
- {
-- fprintf(bcftools_stdout, "Number of samples: %d\n", nsamples);
-- fprintf(bcftools_stdout, "Number of SNPs: %d\n", nsnps);
-- fprintf(bcftools_stdout, "Number of INDELs: %d\n", nindels);
-- fprintf(bcftools_stdout, "Number of MNPs: %d\n", nmnps);
-- fprintf(bcftools_stdout, "Number of others: %d\n", nothers);
-- fprintf(bcftools_stdout, "Number of sites: %d\n", nsites);
-+ fprintf(bcftools_stdout, "Number of samples: %"PRIu64"\n", nsamples);
-+ fprintf(bcftools_stdout, "Number of SNPs: %"PRIu64"\n", nsnps);
-+ fprintf(bcftools_stdout, "Number of INDELs: %"PRIu64"\n", nindels);
-+ fprintf(bcftools_stdout, "Number of MNPs: %"PRIu64"\n", nmnps);
-+ fprintf(bcftools_stdout, "Number of others: %"PRIu64"\n", nothers);
-+ fprintf(bcftools_stdout, "Number of sites: %"PRIu64"\n", nsites);
- }
-
-
---- python-pysam.orig/bcftools/plugins/dosage.c
-+++ python-pysam/bcftools/plugins/dosage.c
-@@ -1,6 +1,6 @@
- /* plugins/dosage.c -- prints genotype dosage.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -27,6 +27,7 @@
- #include <htslib/vcf.h>
- #include <math.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include "bcftools.h"
-
-
-@@ -87,7 +88,7 @@
- for (j=0; j<nret; j++) \
- { \
- if ( is_missing || is_vector_end ) break; \
-- vals[j] = exp(-0.1*ptr[j]); \
-+ vals[j] = pow(10,-0.1*ptr[j]); \
- sum += vals[j]; \
- } \
- if ( j<nret ) \
-@@ -95,6 +96,7 @@
- else \
- { \
- if ( sum ) for (j=0; j<nret; j++) vals[j] /= sum; \
-+ vals[0] = 0; \
- memset(dsg, 0, sizeof(float)*rec->n_allele); \
- int k, l = 0; \
- for (j=0; j<rec->n_allele; j++) \
-@@ -103,11 +105,12 @@
- { \
- dsg[j] += vals[l]; \
- dsg[k] += vals[l]; \
-+ l++; \
- } \
- } \
- } \
- for (j=1; j<rec->n_allele; j++) \
-- printf("%c%.1f",j==1?'\t':',',dsg[j]); \
-+ printf("%c%f",j==1?'\t':',',dsg[j]); \
- ptr += nret; \
- } \
- }
-@@ -122,7 +125,7 @@
-
- int calc_dosage_GL(bcf1_t *rec)
- {
-- int i, j, nret = bcf_get_format_values(in_hdr,rec,"GL",(void**)&buf,&nbuf,pl_type);
-+ int i, j, nret = bcf_get_format_values(in_hdr,rec,"GL",(void**)&buf,&nbuf,gl_type);
- if ( nret<0 ) return -1;
-
- nret /= rec->n_sample;
-@@ -138,15 +141,15 @@
- for (j=0; j<nret; j++) \
- { \
- if ( is_missing || is_vector_end ) break; \
-- vals[j] = exp(ptr[j]); \
-+ vals[j] = pow(10,ptr[j]); \
- sum += vals[j]; \
- } \
- if ( j<nret ) \
- for (j=0; j<rec->n_allele; j++) dsg[j] = -1; \
- else \
- { \
-- for (; j<nret; j++) vals[j] = 0; \
- if ( sum ) for (j=0; j<nret; j++) vals[j] /= sum; \
-+ vals[0] = 0; \
- memset(dsg, 0, sizeof(float)*rec->n_allele); \
- int k, l = 0; \
- for (j=0; j<rec->n_allele; j++) \
-@@ -155,15 +158,16 @@
- { \
- dsg[j] += vals[l]; \
- dsg[k] += vals[l]; \
-+ l++; \
- } \
- } \
- } \
- for (j=1; j<rec->n_allele; j++) \
-- printf("%c%.1f",j==1?'\t':',',dsg[j]); \
-+ printf("%c%f",j==1?'\t':',',dsg[j]); \
- ptr += nret; \
- } \
- }
-- switch (pl_type)
-+ switch (gl_type)
- {
- case BCF_HT_INT: BRANCH(int32_t,ptr[j]==bcf_int32_missing,ptr[j]==bcf_int32_vector_end); break;
- case BCF_HT_REAL: BRANCH(float,bcf_float_is_missing(ptr[j]),bcf_float_is_vector_end(ptr[j])); break;
-@@ -187,7 +191,7 @@
- {
- if ( ptr[j]==bcf_int32_vector_end || bcf_gt_is_missing(ptr[j]) ) break;
- int idx = bcf_gt_allele(ptr[j]);
-- if ( idx > rec->n_allele ) error("The allele index is out of range at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ if ( idx > rec->n_allele ) error("The allele index is out of range at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- dsg[idx] += 1;
- }
- if ( !j )
-@@ -300,7 +304,7 @@
- {
- int i,j, ret;
-
-- printf("%s\t%d\t%s", bcf_seqname(in_hdr,rec),rec->pos+1,rec->d.allele[0]);
-+ printf("%s\t%"PRId64"\t%s", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1,rec->d.allele[0]);
- if ( rec->n_allele == 1 ) printf("\t.");
- else for (i=1; i<rec->n_allele; i++) printf("%c%s", i==1?'\t':',', rec->d.allele[i]);
- if ( rec->n_allele==1 )
---- python-pysam.orig/bcftools/plugins/dosage.c.pysam.c
-+++ python-pysam/bcftools/plugins/dosage.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* plugins/dosage.c -- prints genotype dosage.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -29,6 +29,7 @@
- #include <htslib/vcf.h>
- #include <math.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include "bcftools.h"
-
-
-@@ -89,7 +90,7 @@
- for (j=0; j<nret; j++) \
- { \
- if ( is_missing || is_vector_end ) break; \
-- vals[j] = exp(-0.1*ptr[j]); \
-+ vals[j] = pow(10,-0.1*ptr[j]); \
- sum += vals[j]; \
- } \
- if ( j<nret ) \
-@@ -97,6 +98,7 @@
- else \
- { \
- if ( sum ) for (j=0; j<nret; j++) vals[j] /= sum; \
-+ vals[0] = 0; \
- memset(dsg, 0, sizeof(float)*rec->n_allele); \
- int k, l = 0; \
- for (j=0; j<rec->n_allele; j++) \
-@@ -105,11 +107,12 @@
- { \
- dsg[j] += vals[l]; \
- dsg[k] += vals[l]; \
-+ l++; \
- } \
- } \
- } \
- for (j=1; j<rec->n_allele; j++) \
-- fprintf(bcftools_stdout, "%c%.1f",j==1?'\t':',',dsg[j]); \
-+ fprintf(bcftools_stdout, "%c%f",j==1?'\t':',',dsg[j]); \
- ptr += nret; \
- } \
- }
-@@ -124,7 +127,7 @@
-
- int calc_dosage_GL(bcf1_t *rec)
- {
-- int i, j, nret = bcf_get_format_values(in_hdr,rec,"GL",(void**)&buf,&nbuf,pl_type);
-+ int i, j, nret = bcf_get_format_values(in_hdr,rec,"GL",(void**)&buf,&nbuf,gl_type);
- if ( nret<0 ) return -1;
-
- nret /= rec->n_sample;
-@@ -140,15 +143,15 @@
- for (j=0; j<nret; j++) \
- { \
- if ( is_missing || is_vector_end ) break; \
-- vals[j] = exp(ptr[j]); \
-+ vals[j] = pow(10,ptr[j]); \
- sum += vals[j]; \
- } \
- if ( j<nret ) \
- for (j=0; j<rec->n_allele; j++) dsg[j] = -1; \
- else \
- { \
-- for (; j<nret; j++) vals[j] = 0; \
- if ( sum ) for (j=0; j<nret; j++) vals[j] /= sum; \
-+ vals[0] = 0; \
- memset(dsg, 0, sizeof(float)*rec->n_allele); \
- int k, l = 0; \
- for (j=0; j<rec->n_allele; j++) \
-@@ -157,15 +160,16 @@
- { \
- dsg[j] += vals[l]; \
- dsg[k] += vals[l]; \
-+ l++; \
- } \
- } \
- } \
- for (j=1; j<rec->n_allele; j++) \
-- fprintf(bcftools_stdout, "%c%.1f",j==1?'\t':',',dsg[j]); \
-+ fprintf(bcftools_stdout, "%c%f",j==1?'\t':',',dsg[j]); \
- ptr += nret; \
- } \
- }
-- switch (pl_type)
-+ switch (gl_type)
- {
- case BCF_HT_INT: BRANCH(int32_t,ptr[j]==bcf_int32_missing,ptr[j]==bcf_int32_vector_end); break;
- case BCF_HT_REAL: BRANCH(float,bcf_float_is_missing(ptr[j]),bcf_float_is_vector_end(ptr[j])); break;
-@@ -189,7 +193,7 @@
- {
- if ( ptr[j]==bcf_int32_vector_end || bcf_gt_is_missing(ptr[j]) ) break;
- int idx = bcf_gt_allele(ptr[j]);
-- if ( idx > rec->n_allele ) error("The allele index is out of range at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ if ( idx > rec->n_allele ) error("The allele index is out of range at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- dsg[idx] += 1;
- }
- if ( !j )
-@@ -302,7 +306,7 @@
- {
- int i,j, ret;
-
-- fprintf(bcftools_stdout, "%s\t%d\t%s", bcf_seqname(in_hdr,rec),rec->pos+1,rec->d.allele[0]);
-+ fprintf(bcftools_stdout, "%s\t%"PRId64"\t%s", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1,rec->d.allele[0]);
- if ( rec->n_allele == 1 ) fprintf(bcftools_stdout, "\t.");
- else for (i=1; i<rec->n_allele; i++) fprintf(bcftools_stdout, "%c%s", i==1?'\t':',', rec->d.allele[i]);
- if ( rec->n_allele==1 )
---- python-pysam.orig/bcftools/plugins/fill-AN-AC.c
-+++ python-pysam/bcftools/plugins/fill-AN-AC.c
-@@ -33,7 +33,7 @@
-
- const char *about(void)
- {
-- return "Fill INFO fields AN and AC.\n";
-+ return "Fill INFO fields AN and AC. This plugin is DEPRECATED, use fill-tags instead.\n";
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
---- python-pysam.orig/bcftools/plugins/fill-AN-AC.c.pysam.c
-+++ python-pysam/bcftools/plugins/fill-AN-AC.c.pysam.c
-@@ -35,7 +35,7 @@
-
- const char *about(void)
- {
-- return "Fill INFO fields AN and AC.\n";
-+ return "Fill INFO fields AN and AC. This plugin is DEPRECATED, use fill-tags instead.\n";
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
---- python-pysam.orig/bcftools/plugins/fill-from-fasta.c
-+++ python-pysam/bcftools/plugins/fill-from-fasta.c
-@@ -26,6 +26,7 @@
- #include <stdlib.h>
- #include <strings.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/faidx.h>
- #include <htslib/kseq.h>
-@@ -54,6 +55,7 @@
- " -h, --header-lines <file> optional file containing header lines to append\n"
- " -i, --include <expr> annotate only records passing filter expression\n"
- " -e, --exclude <expr> annotate only records failing filter expression\n"
-+" -N, --replace-non-ACGTN replace non-ACGTN characters with N\n"
-
- "\n"
- "Examples:\n"
-@@ -74,6 +76,7 @@
- faidx_t *faidx;
- int anno = 0;
- char *column = NULL;
-+int replace_nonACGTN = 0;
-
- #define ANNO_REF 1
- #define ANNO_STRING 2
-@@ -92,6 +95,7 @@
- char *ref_fname = NULL, *header_fname = NULL;
- static struct option loptions[] =
- {
-+ {"replace-non-ACGTN",no_argument,NULL,'N'},
- {"exclude",required_argument,NULL,'e'},
- {"include",required_argument,NULL,'i'},
- {"column",required_argument,NULL,'c'},
-@@ -99,12 +103,13 @@
- {"header-lines",required_argument,NULL,'h'},
- {NULL,0,NULL,0}
- };
-- while ((c = getopt_long(argc, argv, "c:f:?h:i:e:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "c:f:?h:i:e:N",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 'e': filter_str = optarg; filter_logic |= FLT_EXCLUDE; break;
- case 'i': filter_str = optarg; filter_logic |= FLT_INCLUDE; break;
-+ case 'N': replace_nonACGTN = 1; break;
- case 'c': column = optarg; break;
- case 'f': ref_fname = optarg; break;
- case 'h': header_fname = optarg; break;
-@@ -132,7 +137,8 @@
- }
- hts_close(file);
- free(str.s);
-- bcf_hdr_sync(out_hdr);
-+ if (bcf_hdr_sync(out_hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- if (!strcasecmp("REF", column)) anno = ANNO_REF;
- else {
-@@ -181,9 +187,12 @@
- // could be sped up here by fetching the whole chromosome? could assume
- // sorted, but revert to this when non-sorted records found?
- char *fa = faidx_fetch_seq(faidx, bcf_seqname(in_hdr,rec), rec->pos, rec->pos+ref_len-1, &fa_len);
-- if ( !fa ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(in_hdr,rec->rid), rec->pos+1);
-+ if ( !fa ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(in_hdr,rec->rid),(int64_t) rec->pos+1);
- for (i=0; i<fa_len; i++)
-+ {
- if ( (int)fa[i]>96 ) fa[i] -= 32;
-+ if ( replace_nonACGTN && fa[i]!='A' && fa[i]!='C' && fa[i]!='G' && fa[i]!='T' && fa[i]!='N' ) fa[i] = 'N';
-+ }
-
- assert(ref_len == fa_len);
- if (anno==ANNO_REF)
---- python-pysam.orig/bcftools/plugins/fill-from-fasta.c.pysam.c
-+++ python-pysam/bcftools/plugins/fill-from-fasta.c.pysam.c
-@@ -28,6 +28,7 @@
- #include <stdlib.h>
- #include <strings.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/faidx.h>
- #include <htslib/kseq.h>
-@@ -56,6 +57,7 @@
- " -h, --header-lines <file> optional file containing header lines to append\n"
- " -i, --include <expr> annotate only records passing filter expression\n"
- " -e, --exclude <expr> annotate only records failing filter expression\n"
-+" -N, --replace-non-ACGTN replace non-ACGTN characters with N\n"
-
- "\n"
- "Examples:\n"
-@@ -76,6 +78,7 @@
- faidx_t *faidx;
- int anno = 0;
- char *column = NULL;
-+int replace_nonACGTN = 0;
-
- #define ANNO_REF 1
- #define ANNO_STRING 2
-@@ -94,6 +97,7 @@
- char *ref_fname = NULL, *header_fname = NULL;
- static struct option loptions[] =
- {
-+ {"replace-non-ACGTN",no_argument,NULL,'N'},
- {"exclude",required_argument,NULL,'e'},
- {"include",required_argument,NULL,'i'},
- {"column",required_argument,NULL,'c'},
-@@ -101,12 +105,13 @@
- {"header-lines",required_argument,NULL,'h'},
- {NULL,0,NULL,0}
- };
-- while ((c = getopt_long(argc, argv, "c:f:?h:i:e:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "c:f:?h:i:e:N",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 'e': filter_str = optarg; filter_logic |= FLT_EXCLUDE; break;
- case 'i': filter_str = optarg; filter_logic |= FLT_INCLUDE; break;
-+ case 'N': replace_nonACGTN = 1; break;
- case 'c': column = optarg; break;
- case 'f': ref_fname = optarg; break;
- case 'h': header_fname = optarg; break;
-@@ -134,7 +139,8 @@
- }
- hts_close(file);
- free(str.s);
-- bcf_hdr_sync(out_hdr);
-+ if (bcf_hdr_sync(out_hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- if (!strcasecmp("REF", column)) anno = ANNO_REF;
- else {
-@@ -183,9 +189,12 @@
- // could be sped up here by fetching the whole chromosome? could assume
- // sorted, but revert to this when non-sorted records found?
- char *fa = faidx_fetch_seq(faidx, bcf_seqname(in_hdr,rec), rec->pos, rec->pos+ref_len-1, &fa_len);
-- if ( !fa ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(in_hdr,rec->rid), rec->pos+1);
-+ if ( !fa ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(in_hdr,rec->rid),(int64_t) rec->pos+1);
- for (i=0; i<fa_len; i++)
-+ {
- if ( (int)fa[i]>96 ) fa[i] -= 32;
-+ if ( replace_nonACGTN && fa[i]!='A' && fa[i]!='C' && fa[i]!='G' && fa[i]!='T' && fa[i]!='N' ) fa[i] = 'N';
-+ }
-
- assert(ref_len == fa_len);
- if (anno==ANNO_REF)
---- python-pysam.orig/bcftools/plugins/fill-tags.c
-+++ python-pysam/bcftools/plugins/fill-tags.c
-@@ -1,6 +1,6 @@
- /* The MIT License
-
-- Copyright (c) 2015 Genome Research Ltd.
-+ Copyright (c) 2015-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -29,10 +29,12 @@
- #include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/kseq.h>
- #include <htslib/vcf.h>
- #include <htslib/khash_str2int.h>
-+#include <htslib/kbitset.h>
- #include "bcftools.h"
-
- #define SET_AN (1<<0)
-@@ -45,6 +47,17 @@
- #define SET_MAF (1<<7)
- #define SET_HWE (1<<8)
- #define SET_ExcHet (1<<9)
-+#define SET_FUNC (1<<10)
-+
-+typedef struct _args_t args_t;
-+typedef struct _ftf_t ftf_t;
-+typedef int (*fill_tag_f)(args_t *, bcf1_t *, ftf_t *);
-+struct _ftf_t
-+{
-+ char *src_tag, *dst_tag;
-+ fill_tag_f func;
-+ int *pop_vals; // for now assuming only 1 integer value per annotation
-+};
-
- typedef struct
- {
-@@ -62,7 +75,7 @@
- }
- pop_t;
-
--typedef struct
-+struct _args_t
- {
- bcf_hdr_t *in_hdr, *out_hdr;
- int npop, tags, drop_missing, gt_id;
-@@ -72,21 +85,24 @@
- double *hwe_probs;
- int mhwe_probs;
- kstring_t str;
--}
--args_t;
-+ kbitset_t *bset;
-+ ftf_t *ftf;
-+ int nftf;
-+};
-
- static args_t *args;
-
- const char *about(void)
- {
-- return "Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS.\n";
-+ return "Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS and more.\n";
- }
-
- const char *usage(void)
- {
- return
- "\n"
-- "About: Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS.\n"
-+ "About: Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS\n"
-+ " or custom INFO/TAG=func(FMT/TAG), use -l for detailed description\n"
- "Usage: bcftools +fill-tags [General Options] -- [Plugin Options]\n"
- "Options:\n"
- " run \"bcftools plugin\" for a list of common options\n"
-@@ -94,14 +110,24 @@
- "Plugin options:\n"
- " -d, --drop-missing do not count half-missing genotypes \"./1\" as hemizygous\n"
- " -l, --list-tags list available tags with description\n"
-- " -t, --tags LIST list of output tags. By default, all tags are filled.\n"
-+ " -t, --tags LIST list of output tags, \"all\" for all tags\n"
- " -S, --samples-file FILE list of samples (first column) and comma-separated list of populations (second column)\n"
- "\n"
- "Example:\n"
-- " bcftools +fill-tags in.bcf -Ob -o out.bcf\n"
-+ " # Print a detailed list of available tags\n"
-+ " bcftools +fill-tags -- -l\n"
-+ "\n"
-+ " # Fill INFO/AN and INFO/AC\n"
- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t AN,AC\n"
-- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -d\n"
-+ "\n"
-+ " # Fill all available tags\n"
-+ " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t all\n"
-+ "\n"
-+ " # Calculate HWE for sample groups (possibly multiple) read from a file\n"
- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -S sample-group.txt -t HWE\n"
-+ "\n"
-+ " # Calculate total read depth (INFO/DP) from per-sample depths (FORMAT/DP)\n"
-+ " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t 'DP=sum(DP)'\n"
- "\n";
- }
-
-@@ -180,7 +206,7 @@
- khash_str2int_destroy_free(smpli);
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- void init_pops(args_t *args)
-@@ -211,13 +237,118 @@
- }
- }
-
-+void ftf_destroy(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nftf; i++)
-+ {
-+ ftf_t *ftf = &args->ftf[i];
-+ free(ftf->src_tag);
-+ free(ftf->dst_tag);
-+ free(ftf->pop_vals);
-+ }
-+ free(args->ftf);
-+}
-+int ftf_sum(args_t *args, bcf1_t *rec, ftf_t *ftf)
-+{
-+ int nsmpl = bcf_hdr_nsamples(args->in_hdr);
-+ int nval = bcf_get_format_int32(args->in_hdr, rec, ftf->src_tag, &args->iarr, &args->miarr);
-+ if ( nval<=0 ) return 0;
-+ nval /= nsmpl;
-+
-+ int i;
-+ for (i=0; i<args->npop; i++)
-+ ftf->pop_vals[i] = -1;
-+
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( args->iarr[i*nval]==bcf_int32_missing || args->iarr[i*nval]==bcf_int32_vector_end ) continue;
-+
-+ pop_t **pop = &args->smpl2pop[i*(args->npop+1)];
-+ while ( *pop )
-+ {
-+ int ipop = (int)(*pop - args->pop);
-+ if ( ftf->pop_vals[ipop]<0 ) ftf->pop_vals[ipop] = 0;
-+ ftf->pop_vals[ipop] += args->iarr[i*nval];
-+ pop++;
-+ }
-+ }
-+
-+ for (i=0; i<args->npop; i++)
-+ {
-+ if ( ftf->pop_vals[i]<0 ) continue;
-+ args->str.l = 0;
-+ ksprintf(&args->str, "%s%s", ftf->dst_tag,args->pop[i].suffix);
-+ if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,ftf->pop_vals+i,1)!=0 )
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-+ }
-+
-+ return 0;
-+}
-+
-+void hdr_append(args_t *args, char *fmt)
-+{
-+ int i;
-+ for (i=0; i<args->npop; i++)
-+ bcf_hdr_printf(args->out_hdr, fmt, args->pop[i].suffix,*args->pop[i].name ? " in " : "",args->pop[i].name);
-+}
-+
-+int parse_func(args_t *args, char *tag, char *expr)
-+{
-+ args->nftf++;
-+ args->ftf = (ftf_t *)realloc(args->ftf,sizeof(*args->ftf)*args->nftf);
-+ ftf_t *ftf = &args->ftf[ args->nftf - 1 ];
-+
-+ ftf->pop_vals = (int*)calloc(args->npop,sizeof(*ftf->pop_vals));
-+ ftf->dst_tag = (char*)calloc(expr-tag,1);
-+ memcpy(ftf->dst_tag, tag, expr-tag-1);
-+
-+ if ( !strncasecmp(expr,"sum(",4) ) { ftf->func = ftf_sum; expr += 4; }
-+ else error("Error: the expression not recognised: %s\n",tag);
-+
-+ char *tmp = expr;
-+ while ( *tmp && *tmp!=')' ) tmp++;
-+ if ( !*tmp ) error("Error: could not parse: %s\n",tag);
-+
-+ ftf->src_tag = (char*)calloc(tmp-expr+2,1);
-+ memcpy(ftf->src_tag, expr, tmp-expr);
-+
-+ int id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,ftf->src_tag);
-+ if ( !bcf_hdr_idinfo_exists(args->in_hdr,BCF_HL_FMT,id) ) error("Error: the field FORMAT/%s is not present\n",ftf->src_tag);
-+
-+ int i = 0;
-+ for (i=0; i<args->npop; i++)
-+ {
-+ args->str.l = 0;
-+ ksprintf(&args->str, "%s%s", ftf->dst_tag,args->pop[i].suffix);
-+ id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,args->str.s);
-+ if ( bcf_hdr_idinfo_exists(args->in_hdr,BCF_HL_FMT,id) )
-+ {
-+ if ( bcf_hdr_id2length(args->in_hdr,BCF_HL_FMT,id)!=BCF_VL_FIXED )
-+ error("Error: the field INFO/%s already exists with a definition different from Number=1\n",args->str.s);
-+ if ( bcf_hdr_id2number(args->in_hdr,BCF_HL_FMT,id)!=1 )
-+ error("Error: the field INFO/%s already exists with a definition different from Number=1\n",args->str.s);
-+ if ( bcf_hdr_id2type(args->in_hdr,BCF_HT_INT,id)!=BCF_HT_INT )
-+ error("Error: the field INFO/%s already exists with a definition different from Type=Integer\n",args->str.s);
-+ }
-+ else
-+ bcf_hdr_printf(args->out_hdr, "##INFO=<ID=%s,Number=1,Type=Integer,Description=\"%s%s%s\">",args->str.s,tag,*args->pop[i].name ? " in " : "",args->pop[i].name);
-+ }
-+ return SET_FUNC;
-+}
- int parse_tags(args_t *args, const char *str)
- {
-- int i, flag = 0, n_tags;
-- char **tags = hts_readlist(str, 0, &n_tags);
-+ if ( !args->in_hdr ) error("%s", usage());
-+
-+ int i,j, flag = 0, n_tags;
-+ char **tags = hts_readlist(str, 0, &n_tags), *ptr;
- for(i=0; i<n_tags; i++)
- {
-- if ( !strcasecmp(tags[i],"AN") ) flag |= SET_AN;
-+ if ( !strcasecmp(tags[i],"all") )
-+ {
-+ for (j=0; j<=10; j++) flag |= 1<<j;
-+ }
-+ else if ( !strcasecmp(tags[i],"AN") ) flag |= SET_AN;
- else if ( !strcasecmp(tags[i],"AC") ) flag |= SET_AC;
- else if ( !strcasecmp(tags[i],"NS") ) flag |= SET_NS;
- else if ( !strcasecmp(tags[i],"AC_Hom") ) flag |= SET_AC_Hom;
-@@ -227,6 +358,7 @@
- else if ( !strcasecmp(tags[i],"MAF") ) flag |= SET_MAF;
- else if ( !strcasecmp(tags[i],"HWE") ) flag |= SET_HWE;
- else if ( !strcasecmp(tags[i],"ExcHet") ) flag |= SET_ExcHet;
-+ else if ( (ptr=strchr(tags[i],'=')) ) flag |= parse_func(args,tags[i],ptr+1);
- else
- {
- fprintf(stderr,"Error parsing \"--tags %s\": the tag \"%s\" is not supported\n", str,tags[i]);
-@@ -238,13 +370,6 @@
- return flag;
- }
-
--void hdr_append(args_t *args, char *fmt)
--{
-- int i;
-- for (i=0; i<args->npop; i++)
-- bcf_hdr_printf(args->out_hdr, fmt, args->pop[i].suffix,*args->pop[i].name ? " in " : "",args->pop[i].name);
--}
--
- void list_tags(void)
- {
- error(
-@@ -256,8 +381,10 @@
- "INFO/AC_Hemi Number:A Type:Integer .. Allele counts in hemizygous genotypes\n"
- "INFO/AF Number:A Type:Float .. Allele frequency\n"
- "INFO/MAF Number:A Type:Float .. Minor Allele frequency\n"
-- "INFO/HWE Number:A Type:Float .. HWE test (PMID:15789306)\n"
-- "INFO/ExcHet Number:A Type:Float .. Probability of excess heterozygosity\n"
-+ "INFO/HWE Number:A Type:Float .. HWE test (PMID:15789306); 1=good, 0=bad\n"
-+ "INFO/ExcHet Number:A Type:Float .. Test excess heterozygosity; 1=good, 0=bad\n"
-+ "TAG=func(TAG) Number:1 Type:Integer .. Experimental support for user-defined\n"
-+ " expressions such as \"DP=sum(DP)\". This is currently very basic, to be extended.\n"
- );
- }
-
-@@ -266,7 +393,7 @@
- args = (args_t*) calloc(1,sizeof(args_t));
- args->in_hdr = in;
- args->out_hdr = out;
-- char *samples_fname = NULL;
-+ char *samples_fname = NULL, *tags_str = "all";
- static struct option loptions[] =
- {
- {"list-tags",0,0,'l'},
-@@ -282,7 +409,7 @@
- {
- case 'l': list_tags(); break;
- case 'd': args->drop_missing = 1; break;
-- case 't': args->tags |= parse_tags(args,optarg); break;
-+ case 't': tags_str = optarg; break;
- case 'S': samples_fname = optarg; break;
- case 'h':
- case '?':
-@@ -295,12 +422,11 @@
- args->gt_id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,"GT");
- if ( args->gt_id<0 ) error("Error: GT field is not present\n");
-
-- if ( !args->tags )
-- for (c=0; c<=9; c++) args->tags |= 1<<c; // by default all tags will be filled
--
- if ( samples_fname ) parse_samples(args, samples_fname);
- init_pops(args);
-
-+ args->tags |= parse_tags(args,tags_str);
-+
- if ( args->tags & SET_AN ) hdr_append(args, "##INFO=<ID=AN%s,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes%s%s\">");
- if ( args->tags & SET_AC ) hdr_append(args, "##INFO=<ID=AC%s,Number=A,Type=Integer,Description=\"Allele count in genotypes%s%s\">");
- if ( args->tags & SET_NS ) hdr_append(args, "##INFO=<ID=NS%s,Number=1,Type=Integer,Description=\"Number of samples with data%s%s\">");
-@@ -309,8 +435,8 @@
- if ( args->tags & SET_AC_Hemi ) hdr_append(args, "##INFO=<ID=AC_Hemi%s,Number=A,Type=Integer,Description=\"Allele counts in hemizygous genotypes%s%s\">");
- if ( args->tags & SET_AF ) hdr_append(args, "##INFO=<ID=AF%s,Number=A,Type=Float,Description=\"Allele frequency%s%s\">");
- if ( args->tags & SET_MAF ) hdr_append(args, "##INFO=<ID=MAF%s,Number=A,Type=Float,Description=\"Minor Allele frequency%s%s\">");
-- if ( args->tags & SET_HWE ) hdr_append(args, "##INFO=<ID=HWE%s,Number=A,Type=Float,Description=\"HWE test%s%s (PMID:15789306)\">");
-- if ( args->tags & SET_ExcHet ) hdr_append(args, "##INFO=<ID=ExcHet%s,Number=A,Type=Float,Description=\"Probability of excess heterozygosity\">");
-+ if ( args->tags & SET_HWE ) hdr_append(args, "##INFO=<ID=HWE%s,Number=A,Type=Float,Description=\"HWE test%s%s (PMID:15789306); 1=good, 0=bad\">");
-+ if ( args->tags & SET_ExcHet ) hdr_append(args, "##INFO=<ID=ExcHet%s,Number=A,Type=Float,Description=\"Test excess heterozygosity%s%s; 1=good, 0=bad\">");
-
- return 0;
- }
-@@ -340,7 +466,7 @@
- double *probs = args->hwe_probs;
-
- // start at midpoint
-- int mid = nrare * (nref + nalt - nrare) / (nref + nalt);
-+ int mid = (double)nrare * (nref + nalt - nrare) / (nref + nalt);
-
- // check to ensure that midpoint and rare alleles have same parity
- if ( (nrare & 1) ^ (mid & 1) ) mid++;
-@@ -389,19 +515,17 @@
- *p_hwe = prob;
- }
-
--static inline void set_counts(pop_t *pop, int is_half, int is_hom, int is_hemi, int als)
-+static inline void set_counts(pop_t *pop, int is_half, int is_hom, int is_hemi, kbitset_t *bset)
- {
-- int ial;
-- for (ial=0; als; ial++)
-+ kbitset_iter_t itr;
-+ int i;
-+ kbs_start(&itr);
-+ while ((i = kbs_next(bset, &itr)) >= 0)
- {
-- if ( als&1 )
-- {
-- if ( is_half ) pop->counts[ial].nac++;
-- else if ( !is_hom ) pop->counts[ial].nhet++;
-- else if ( !is_hemi ) pop->counts[ial].nhom += 2;
-- else pop->counts[ial].nhemi++;
-- }
-- als >>= 1;
-+ if ( is_half ) pop->counts[i].nac++;
-+ else if ( !is_hom ) pop->counts[i].nhet++;
-+ else if ( !is_hemi ) pop->counts[i].nhom += 2;
-+ else pop->counts[i].nhemi++;
- }
- pop->ns++;
- }
-@@ -413,9 +537,13 @@
-
- bcf1_t *process(bcf1_t *rec)
- {
-+ bcf_unpack(rec, BCF_UN_FMT);
-+
- int i,j, nsmpl = bcf_hdr_nsamples(args->in_hdr);;
-
-- bcf_unpack(rec, BCF_UN_FMT);
-+ for (i=0; i<args->nftf; i++)
-+ args->ftf[i].func(args, rec, &args->ftf[i]);
-+
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<rec->n_fmt; i++)
- if ( rec->d.fmt[i].id==args->gt_id ) { fmt_gt = &rec->d.fmt[i]; break; }
-@@ -429,14 +557,15 @@
- for (i=0; i<args->npop; i++)
- clean_counts(&args->pop[i], rec->n_allele);
-
-- assert( rec->n_allele < 8*sizeof(int) );
-+ if ( kbs_resize(&args->bset, rec->n_allele) < 0 ) error("kbs_resize: failed to store %d bits\n", rec->n_allele);
-
- #define BRANCH_INT(type_t,vector_end) \
- { \
- for (i=0; i<nsmpl; i++) \
- { \
- type_t *p = (type_t*) (fmt_gt->p + i*fmt_gt->size); \
-- int ial, als = 0, nals = 0, is_half, is_hom, is_hemi; \
-+ int ial, nbits = 0, nals = 0, is_half, is_hom, is_hemi; \
-+ kbs_clear(args->bset); \
- for (ial=0; ial<fmt_gt->n; ial++) \
- { \
- if ( p[ial]==vector_end ) break; /* smaller ploidy */ \
-@@ -445,11 +574,12 @@
- nals++; \
- \
- if ( idx >= rec->n_allele ) \
-- error("Incorrect allele (\"%d\") in %s at %s:%d\n",idx,args->in_hdr->samples[i],bcf_seqname(args->in_hdr,rec),rec->pos+1); \
-- als |= (1<<idx); /* this breaks with too many alleles */ \
-+ error("Incorrect allele (\"%d\") in %s at %s:%"PRId64"\n",idx,args->in_hdr->samples[i],bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1); \
-+ if ( !kbs_exists(args->bset, idx) ) nbits++; \
-+ kbs_insert(args->bset, idx); \
- } \
- if ( nals==0 ) continue; /* missing genotype */ \
-- is_hom = als && !(als & (als-1)); /* only one bit is set */ \
-+ is_hom = nbits==1 ? 1 : 0; /* only one bit is set for homs */ \
- if ( nals!=ial ) \
- { \
- if ( args->drop_missing ) is_hemi = 0, is_half = 1; \
-@@ -458,14 +588,14 @@
- else if ( nals==1 ) is_hemi = 1, is_half = 0; \
- else is_hemi = 0, is_half = 0; \
- pop_t **pop = &args->smpl2pop[i*(args->npop+1)]; \
-- while ( *pop ) { set_counts(*pop,is_half,is_hom,is_hemi,als); pop++; }\
-+ while ( *pop ) { set_counts(*pop,is_half,is_hom,is_hemi,args->bset); pop++; } \
- } \
- }
- switch (fmt_gt->type) {
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not recognised: %d at %s:%d\n",fmt_gt->type, bcf_seqname(args->in_hdr,rec),rec->pos+1); break;
-+ default: error("The GT type is not recognised: %d at %s:%"PRId64"\n",fmt_gt->type, bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1); break;
- }
- #undef BRANCH_INT
-
-@@ -476,7 +606,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "NS%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,&args->pop[i].ns,1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AN )
-@@ -491,7 +621,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AN%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,&an,1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & (SET_AF | SET_MAF) )
-@@ -507,25 +637,29 @@
- args->farr[j-1] += pop->counts[j].nhet + pop->counts[j].nhom + pop->counts[j].nhemi + pop->counts[j].nac;
- an = pop->counts[0].nhet + pop->counts[0].nhom + pop->counts[0].nhemi + pop->counts[0].nac;
- for (j=1; j<rec->n_allele; j++) an += args->farr[j-1];
-- if ( !an ) continue;
-- for (j=1; j<rec->n_allele; j++) args->farr[j-1] /= an;
-+ if ( an )
-+ for (j=1; j<rec->n_allele; j++) args->farr[j-1] /= an;
-+ else
-+ for (j=1; j<rec->n_allele; j++) bcf_float_set_missing(args->farr[j-1]);
- }
- if ( args->tags & SET_AF )
- {
- args->str.l = 0;
- ksprintf(&args->str, "AF%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,args->farr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- if ( args->tags & SET_MAF )
- {
-- if ( !an ) continue;
-- for (j=1; j<rec->n_allele; j++)
-- if ( args->farr[j-1] > 0.5 ) args->farr[j-1] = 1 - args->farr[j-1]; // todo: this is incorrect for multiallelic sites
-+ if ( an )
-+ {
-+ for (j=1; j<rec->n_allele; j++)
-+ if ( args->farr[j-1] > 0.5 ) args->farr[j-1] = 1 - args->farr[j-1]; // todo: this is incorrect for multiallelic sites
-+ }
- args->str.l = 0;
- ksprintf(&args->str, "MAF%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,args->farr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- }
-@@ -543,7 +677,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Het )
-@@ -560,7 +694,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Het%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Hom )
-@@ -577,7 +711,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Hom%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Hemi && rec->n_allele > 1 )
-@@ -594,7 +728,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Hemi%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & (SET_HWE|SET_ExcHet) )
-@@ -625,14 +759,14 @@
- args->str.l = 0;
- ksprintf(&args->str, "HWE%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,fhwe,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- if ( args->tags & SET_ExcHet )
- {
- args->str.l = 0;
- ksprintf(&args->str, "ExcHet%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,fexc_het,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- }
-@@ -650,12 +784,14 @@
- free(args->pop[i].smpl);
- free(args->pop[i].counts);
- }
-+ kbs_destroy(args->bset);
- free(args->str.s);
- free(args->pop);
- free(args->smpl2pop);
- free(args->iarr);
- free(args->farr);
- free(args->hwe_probs);
-+ ftf_destroy(args);
- free(args);
- }
-
---- python-pysam.orig/bcftools/plugins/fill-tags.c.pysam.c
-+++ python-pysam/bcftools/plugins/fill-tags.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* The MIT License
-
-- Copyright (c) 2015 Genome Research Ltd.
-+ Copyright (c) 2015-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -31,10 +31,12 @@
- #include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/kseq.h>
- #include <htslib/vcf.h>
- #include <htslib/khash_str2int.h>
-+#include <htslib/kbitset.h>
- #include "bcftools.h"
-
- #define SET_AN (1<<0)
-@@ -47,6 +49,17 @@
- #define SET_MAF (1<<7)
- #define SET_HWE (1<<8)
- #define SET_ExcHet (1<<9)
-+#define SET_FUNC (1<<10)
-+
-+typedef struct _args_t args_t;
-+typedef struct _ftf_t ftf_t;
-+typedef int (*fill_tag_f)(args_t *, bcf1_t *, ftf_t *);
-+struct _ftf_t
-+{
-+ char *src_tag, *dst_tag;
-+ fill_tag_f func;
-+ int *pop_vals; // for now assuming only 1 integer value per annotation
-+};
-
- typedef struct
- {
-@@ -64,7 +77,7 @@
- }
- pop_t;
-
--typedef struct
-+struct _args_t
- {
- bcf_hdr_t *in_hdr, *out_hdr;
- int npop, tags, drop_missing, gt_id;
-@@ -74,21 +87,24 @@
- double *hwe_probs;
- int mhwe_probs;
- kstring_t str;
--}
--args_t;
-+ kbitset_t *bset;
-+ ftf_t *ftf;
-+ int nftf;
-+};
-
- static args_t *args;
-
- const char *about(void)
- {
-- return "Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS.\n";
-+ return "Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS and more.\n";
- }
-
- const char *usage(void)
- {
- return
- "\n"
-- "About: Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS.\n"
-+ "About: Set INFO tags AF, AC, AC_Hemi, AC_Hom, AC_Het, AN, ExcHet, HWE, MAF, NS\n"
-+ " or custom INFO/TAG=func(FMT/TAG), use -l for detailed description\n"
- "Usage: bcftools +fill-tags [General Options] -- [Plugin Options]\n"
- "Options:\n"
- " run \"bcftools plugin\" for a list of common options\n"
-@@ -96,14 +112,24 @@
- "Plugin options:\n"
- " -d, --drop-missing do not count half-missing genotypes \"./1\" as hemizygous\n"
- " -l, --list-tags list available tags with description\n"
-- " -t, --tags LIST list of output tags. By default, all tags are filled.\n"
-+ " -t, --tags LIST list of output tags, \"all\" for all tags\n"
- " -S, --samples-file FILE list of samples (first column) and comma-separated list of populations (second column)\n"
- "\n"
- "Example:\n"
-- " bcftools +fill-tags in.bcf -Ob -o out.bcf\n"
-+ " # Print a detailed list of available tags\n"
-+ " bcftools +fill-tags -- -l\n"
-+ "\n"
-+ " # Fill INFO/AN and INFO/AC\n"
- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t AN,AC\n"
-- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -d\n"
-+ "\n"
-+ " # Fill all available tags\n"
-+ " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t all\n"
-+ "\n"
-+ " # Calculate HWE for sample groups (possibly multiple) read from a file\n"
- " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -S sample-group.txt -t HWE\n"
-+ "\n"
-+ " # Calculate total read depth (INFO/DP) from per-sample depths (FORMAT/DP)\n"
-+ " bcftools +fill-tags in.bcf -Ob -o out.bcf -- -t 'DP=sum(DP)'\n"
- "\n";
- }
-
-@@ -182,7 +208,7 @@
- khash_str2int_destroy_free(smpli);
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- void init_pops(args_t *args)
-@@ -213,13 +239,118 @@
- }
- }
-
-+void ftf_destroy(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nftf; i++)
-+ {
-+ ftf_t *ftf = &args->ftf[i];
-+ free(ftf->src_tag);
-+ free(ftf->dst_tag);
-+ free(ftf->pop_vals);
-+ }
-+ free(args->ftf);
-+}
-+int ftf_sum(args_t *args, bcf1_t *rec, ftf_t *ftf)
-+{
-+ int nsmpl = bcf_hdr_nsamples(args->in_hdr);
-+ int nval = bcf_get_format_int32(args->in_hdr, rec, ftf->src_tag, &args->iarr, &args->miarr);
-+ if ( nval<=0 ) return 0;
-+ nval /= nsmpl;
-+
-+ int i;
-+ for (i=0; i<args->npop; i++)
-+ ftf->pop_vals[i] = -1;
-+
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( args->iarr[i*nval]==bcf_int32_missing || args->iarr[i*nval]==bcf_int32_vector_end ) continue;
-+
-+ pop_t **pop = &args->smpl2pop[i*(args->npop+1)];
-+ while ( *pop )
-+ {
-+ int ipop = (int)(*pop - args->pop);
-+ if ( ftf->pop_vals[ipop]<0 ) ftf->pop_vals[ipop] = 0;
-+ ftf->pop_vals[ipop] += args->iarr[i*nval];
-+ pop++;
-+ }
-+ }
-+
-+ for (i=0; i<args->npop; i++)
-+ {
-+ if ( ftf->pop_vals[i]<0 ) continue;
-+ args->str.l = 0;
-+ ksprintf(&args->str, "%s%s", ftf->dst_tag,args->pop[i].suffix);
-+ if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,ftf->pop_vals+i,1)!=0 )
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-+ }
-+
-+ return 0;
-+}
-+
-+void hdr_append(args_t *args, char *fmt)
-+{
-+ int i;
-+ for (i=0; i<args->npop; i++)
-+ bcf_hdr_printf(args->out_hdr, fmt, args->pop[i].suffix,*args->pop[i].name ? " in " : "",args->pop[i].name);
-+}
-+
-+int parse_func(args_t *args, char *tag, char *expr)
-+{
-+ args->nftf++;
-+ args->ftf = (ftf_t *)realloc(args->ftf,sizeof(*args->ftf)*args->nftf);
-+ ftf_t *ftf = &args->ftf[ args->nftf - 1 ];
-+
-+ ftf->pop_vals = (int*)calloc(args->npop,sizeof(*ftf->pop_vals));
-+ ftf->dst_tag = (char*)calloc(expr-tag,1);
-+ memcpy(ftf->dst_tag, tag, expr-tag-1);
-+
-+ if ( !strncasecmp(expr,"sum(",4) ) { ftf->func = ftf_sum; expr += 4; }
-+ else error("Error: the expression not recognised: %s\n",tag);
-+
-+ char *tmp = expr;
-+ while ( *tmp && *tmp!=')' ) tmp++;
-+ if ( !*tmp ) error("Error: could not parse: %s\n",tag);
-+
-+ ftf->src_tag = (char*)calloc(tmp-expr+2,1);
-+ memcpy(ftf->src_tag, expr, tmp-expr);
-+
-+ int id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,ftf->src_tag);
-+ if ( !bcf_hdr_idinfo_exists(args->in_hdr,BCF_HL_FMT,id) ) error("Error: the field FORMAT/%s is not present\n",ftf->src_tag);
-+
-+ int i = 0;
-+ for (i=0; i<args->npop; i++)
-+ {
-+ args->str.l = 0;
-+ ksprintf(&args->str, "%s%s", ftf->dst_tag,args->pop[i].suffix);
-+ id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,args->str.s);
-+ if ( bcf_hdr_idinfo_exists(args->in_hdr,BCF_HL_FMT,id) )
-+ {
-+ if ( bcf_hdr_id2length(args->in_hdr,BCF_HL_FMT,id)!=BCF_VL_FIXED )
-+ error("Error: the field INFO/%s already exists with a definition different from Number=1\n",args->str.s);
-+ if ( bcf_hdr_id2number(args->in_hdr,BCF_HL_FMT,id)!=1 )
-+ error("Error: the field INFO/%s already exists with a definition different from Number=1\n",args->str.s);
-+ if ( bcf_hdr_id2type(args->in_hdr,BCF_HT_INT,id)!=BCF_HT_INT )
-+ error("Error: the field INFO/%s already exists with a definition different from Type=Integer\n",args->str.s);
-+ }
-+ else
-+ bcf_hdr_printf(args->out_hdr, "##INFO=<ID=%s,Number=1,Type=Integer,Description=\"%s%s%s\">",args->str.s,tag,*args->pop[i].name ? " in " : "",args->pop[i].name);
-+ }
-+ return SET_FUNC;
-+}
- int parse_tags(args_t *args, const char *str)
- {
-- int i, flag = 0, n_tags;
-- char **tags = hts_readlist(str, 0, &n_tags);
-+ if ( !args->in_hdr ) error("%s", usage());
-+
-+ int i,j, flag = 0, n_tags;
-+ char **tags = hts_readlist(str, 0, &n_tags), *ptr;
- for(i=0; i<n_tags; i++)
- {
-- if ( !strcasecmp(tags[i],"AN") ) flag |= SET_AN;
-+ if ( !strcasecmp(tags[i],"all") )
-+ {
-+ for (j=0; j<=10; j++) flag |= 1<<j;
-+ }
-+ else if ( !strcasecmp(tags[i],"AN") ) flag |= SET_AN;
- else if ( !strcasecmp(tags[i],"AC") ) flag |= SET_AC;
- else if ( !strcasecmp(tags[i],"NS") ) flag |= SET_NS;
- else if ( !strcasecmp(tags[i],"AC_Hom") ) flag |= SET_AC_Hom;
-@@ -229,6 +360,7 @@
- else if ( !strcasecmp(tags[i],"MAF") ) flag |= SET_MAF;
- else if ( !strcasecmp(tags[i],"HWE") ) flag |= SET_HWE;
- else if ( !strcasecmp(tags[i],"ExcHet") ) flag |= SET_ExcHet;
-+ else if ( (ptr=strchr(tags[i],'=')) ) flag |= parse_func(args,tags[i],ptr+1);
- else
- {
- fprintf(bcftools_stderr,"Error parsing \"--tags %s\": the tag \"%s\" is not supported\n", str,tags[i]);
-@@ -240,13 +372,6 @@
- return flag;
- }
-
--void hdr_append(args_t *args, char *fmt)
--{
-- int i;
-- for (i=0; i<args->npop; i++)
-- bcf_hdr_printf(args->out_hdr, fmt, args->pop[i].suffix,*args->pop[i].name ? " in " : "",args->pop[i].name);
--}
--
- void list_tags(void)
- {
- error(
-@@ -258,8 +383,10 @@
- "INFO/AC_Hemi Number:A Type:Integer .. Allele counts in hemizygous genotypes\n"
- "INFO/AF Number:A Type:Float .. Allele frequency\n"
- "INFO/MAF Number:A Type:Float .. Minor Allele frequency\n"
-- "INFO/HWE Number:A Type:Float .. HWE test (PMID:15789306)\n"
-- "INFO/ExcHet Number:A Type:Float .. Probability of excess heterozygosity\n"
-+ "INFO/HWE Number:A Type:Float .. HWE test (PMID:15789306); 1=good, 0=bad\n"
-+ "INFO/ExcHet Number:A Type:Float .. Test excess heterozygosity; 1=good, 0=bad\n"
-+ "TAG=func(TAG) Number:1 Type:Integer .. Experimental support for user-defined\n"
-+ " expressions such as \"DP=sum(DP)\". This is currently very basic, to be extended.\n"
- );
- }
-
-@@ -268,7 +395,7 @@
- args = (args_t*) calloc(1,sizeof(args_t));
- args->in_hdr = in;
- args->out_hdr = out;
-- char *samples_fname = NULL;
-+ char *samples_fname = NULL, *tags_str = "all";
- static struct option loptions[] =
- {
- {"list-tags",0,0,'l'},
-@@ -284,7 +411,7 @@
- {
- case 'l': list_tags(); break;
- case 'd': args->drop_missing = 1; break;
-- case 't': args->tags |= parse_tags(args,optarg); break;
-+ case 't': tags_str = optarg; break;
- case 'S': samples_fname = optarg; break;
- case 'h':
- case '?':
-@@ -297,12 +424,11 @@
- args->gt_id = bcf_hdr_id2int(args->in_hdr,BCF_DT_ID,"GT");
- if ( args->gt_id<0 ) error("Error: GT field is not present\n");
-
-- if ( !args->tags )
-- for (c=0; c<=9; c++) args->tags |= 1<<c; // by default all tags will be filled
--
- if ( samples_fname ) parse_samples(args, samples_fname);
- init_pops(args);
-
-+ args->tags |= parse_tags(args,tags_str);
-+
- if ( args->tags & SET_AN ) hdr_append(args, "##INFO=<ID=AN%s,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes%s%s\">");
- if ( args->tags & SET_AC ) hdr_append(args, "##INFO=<ID=AC%s,Number=A,Type=Integer,Description=\"Allele count in genotypes%s%s\">");
- if ( args->tags & SET_NS ) hdr_append(args, "##INFO=<ID=NS%s,Number=1,Type=Integer,Description=\"Number of samples with data%s%s\">");
-@@ -311,8 +437,8 @@
- if ( args->tags & SET_AC_Hemi ) hdr_append(args, "##INFO=<ID=AC_Hemi%s,Number=A,Type=Integer,Description=\"Allele counts in hemizygous genotypes%s%s\">");
- if ( args->tags & SET_AF ) hdr_append(args, "##INFO=<ID=AF%s,Number=A,Type=Float,Description=\"Allele frequency%s%s\">");
- if ( args->tags & SET_MAF ) hdr_append(args, "##INFO=<ID=MAF%s,Number=A,Type=Float,Description=\"Minor Allele frequency%s%s\">");
-- if ( args->tags & SET_HWE ) hdr_append(args, "##INFO=<ID=HWE%s,Number=A,Type=Float,Description=\"HWE test%s%s (PMID:15789306)\">");
-- if ( args->tags & SET_ExcHet ) hdr_append(args, "##INFO=<ID=ExcHet%s,Number=A,Type=Float,Description=\"Probability of excess heterozygosity\">");
-+ if ( args->tags & SET_HWE ) hdr_append(args, "##INFO=<ID=HWE%s,Number=A,Type=Float,Description=\"HWE test%s%s (PMID:15789306); 1=good, 0=bad\">");
-+ if ( args->tags & SET_ExcHet ) hdr_append(args, "##INFO=<ID=ExcHet%s,Number=A,Type=Float,Description=\"Test excess heterozygosity%s%s; 1=good, 0=bad\">");
-
- return 0;
- }
-@@ -342,7 +468,7 @@
- double *probs = args->hwe_probs;
-
- // start at midpoint
-- int mid = nrare * (nref + nalt - nrare) / (nref + nalt);
-+ int mid = (double)nrare * (nref + nalt - nrare) / (nref + nalt);
-
- // check to ensure that midpoint and rare alleles have same parity
- if ( (nrare & 1) ^ (mid & 1) ) mid++;
-@@ -391,19 +517,17 @@
- *p_hwe = prob;
- }
-
--static inline void set_counts(pop_t *pop, int is_half, int is_hom, int is_hemi, int als)
-+static inline void set_counts(pop_t *pop, int is_half, int is_hom, int is_hemi, kbitset_t *bset)
- {
-- int ial;
-- for (ial=0; als; ial++)
-+ kbitset_iter_t itr;
-+ int i;
-+ kbs_start(&itr);
-+ while ((i = kbs_next(bset, &itr)) >= 0)
- {
-- if ( als&1 )
-- {
-- if ( is_half ) pop->counts[ial].nac++;
-- else if ( !is_hom ) pop->counts[ial].nhet++;
-- else if ( !is_hemi ) pop->counts[ial].nhom += 2;
-- else pop->counts[ial].nhemi++;
-- }
-- als >>= 1;
-+ if ( is_half ) pop->counts[i].nac++;
-+ else if ( !is_hom ) pop->counts[i].nhet++;
-+ else if ( !is_hemi ) pop->counts[i].nhom += 2;
-+ else pop->counts[i].nhemi++;
- }
- pop->ns++;
- }
-@@ -415,9 +539,13 @@
-
- bcf1_t *process(bcf1_t *rec)
- {
-+ bcf_unpack(rec, BCF_UN_FMT);
-+
- int i,j, nsmpl = bcf_hdr_nsamples(args->in_hdr);;
-
-- bcf_unpack(rec, BCF_UN_FMT);
-+ for (i=0; i<args->nftf; i++)
-+ args->ftf[i].func(args, rec, &args->ftf[i]);
-+
- bcf_fmt_t *fmt_gt = NULL;
- for (i=0; i<rec->n_fmt; i++)
- if ( rec->d.fmt[i].id==args->gt_id ) { fmt_gt = &rec->d.fmt[i]; break; }
-@@ -431,14 +559,15 @@
- for (i=0; i<args->npop; i++)
- clean_counts(&args->pop[i], rec->n_allele);
-
-- assert( rec->n_allele < 8*sizeof(int) );
-+ if ( kbs_resize(&args->bset, rec->n_allele) < 0 ) error("kbs_resize: failed to store %d bits\n", rec->n_allele);
-
- #define BRANCH_INT(type_t,vector_end) \
- { \
- for (i=0; i<nsmpl; i++) \
- { \
- type_t *p = (type_t*) (fmt_gt->p + i*fmt_gt->size); \
-- int ial, als = 0, nals = 0, is_half, is_hom, is_hemi; \
-+ int ial, nbits = 0, nals = 0, is_half, is_hom, is_hemi; \
-+ kbs_clear(args->bset); \
- for (ial=0; ial<fmt_gt->n; ial++) \
- { \
- if ( p[ial]==vector_end ) break; /* smaller ploidy */ \
-@@ -447,11 +576,12 @@
- nals++; \
- \
- if ( idx >= rec->n_allele ) \
-- error("Incorrect allele (\"%d\") in %s at %s:%d\n",idx,args->in_hdr->samples[i],bcf_seqname(args->in_hdr,rec),rec->pos+1); \
-- als |= (1<<idx); /* this breaks with too many alleles */ \
-+ error("Incorrect allele (\"%d\") in %s at %s:%"PRId64"\n",idx,args->in_hdr->samples[i],bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1); \
-+ if ( !kbs_exists(args->bset, idx) ) nbits++; \
-+ kbs_insert(args->bset, idx); \
- } \
- if ( nals==0 ) continue; /* missing genotype */ \
-- is_hom = als && !(als & (als-1)); /* only one bit is set */ \
-+ is_hom = nbits==1 ? 1 : 0; /* only one bit is set for homs */ \
- if ( nals!=ial ) \
- { \
- if ( args->drop_missing ) is_hemi = 0, is_half = 1; \
-@@ -460,14 +590,14 @@
- else if ( nals==1 ) is_hemi = 1, is_half = 0; \
- else is_hemi = 0, is_half = 0; \
- pop_t **pop = &args->smpl2pop[i*(args->npop+1)]; \
-- while ( *pop ) { set_counts(*pop,is_half,is_hom,is_hemi,als); pop++; }\
-+ while ( *pop ) { set_counts(*pop,is_half,is_hom,is_hemi,args->bset); pop++; } \
- } \
- }
- switch (fmt_gt->type) {
- case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_vector_end); break;
- case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_vector_end); break;
- case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_vector_end); break;
-- default: error("The GT type is not recognised: %d at %s:%d\n",fmt_gt->type, bcf_seqname(args->in_hdr,rec),rec->pos+1); break;
-+ default: error("The GT type is not recognised: %d at %s:%"PRId64"\n",fmt_gt->type, bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1); break;
- }
- #undef BRANCH_INT
-
-@@ -478,7 +608,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "NS%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,&args->pop[i].ns,1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AN )
-@@ -493,7 +623,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AN%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,&an,1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & (SET_AF | SET_MAF) )
-@@ -509,25 +639,29 @@
- args->farr[j-1] += pop->counts[j].nhet + pop->counts[j].nhom + pop->counts[j].nhemi + pop->counts[j].nac;
- an = pop->counts[0].nhet + pop->counts[0].nhom + pop->counts[0].nhemi + pop->counts[0].nac;
- for (j=1; j<rec->n_allele; j++) an += args->farr[j-1];
-- if ( !an ) continue;
-- for (j=1; j<rec->n_allele; j++) args->farr[j-1] /= an;
-+ if ( an )
-+ for (j=1; j<rec->n_allele; j++) args->farr[j-1] /= an;
-+ else
-+ for (j=1; j<rec->n_allele; j++) bcf_float_set_missing(args->farr[j-1]);
- }
- if ( args->tags & SET_AF )
- {
- args->str.l = 0;
- ksprintf(&args->str, "AF%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,args->farr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- if ( args->tags & SET_MAF )
- {
-- if ( !an ) continue;
-- for (j=1; j<rec->n_allele; j++)
-- if ( args->farr[j-1] > 0.5 ) args->farr[j-1] = 1 - args->farr[j-1]; // todo: this is incorrect for multiallelic sites
-+ if ( an )
-+ {
-+ for (j=1; j<rec->n_allele; j++)
-+ if ( args->farr[j-1] > 0.5 ) args->farr[j-1] = 1 - args->farr[j-1]; // todo: this is incorrect for multiallelic sites
-+ }
- args->str.l = 0;
- ksprintf(&args->str, "MAF%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,args->farr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- }
-@@ -545,7 +679,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Het )
-@@ -562,7 +696,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Het%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Hom )
-@@ -579,7 +713,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Hom%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & SET_AC_Hemi && rec->n_allele > 1 )
-@@ -596,7 +730,7 @@
- args->str.l = 0;
- ksprintf(&args->str, "AC_Hemi%s", args->pop[i].suffix);
- if ( bcf_update_info_int32(args->out_hdr,rec,args->str.s,args->iarr,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- if ( args->tags & (SET_HWE|SET_ExcHet) )
-@@ -627,14 +761,14 @@
- args->str.l = 0;
- ksprintf(&args->str, "HWE%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,fhwe,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- if ( args->tags & SET_ExcHet )
- {
- args->str.l = 0;
- ksprintf(&args->str, "ExcHet%s", args->pop[i].suffix);
- if ( bcf_update_info_float(args->out_hdr,rec,args->str.s,fexc_het,rec->n_allele-1)!=0 )
-- error("Error occurred while updating %s at %s:%d\n", args->str.s,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Error occurred while updating %s at %s:%"PRId64"\n", args->str.s,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
- }
- }
- }
-@@ -652,12 +786,14 @@
- free(args->pop[i].smpl);
- free(args->pop[i].counts);
- }
-+ kbs_destroy(args->bset);
- free(args->str.s);
- free(args->pop);
- free(args->smpl2pop);
- free(args->iarr);
- free(args->farr);
- free(args->hwe_probs);
-+ ftf_destroy(args);
- free(args);
- }
-
---- python-pysam.orig/bcftools/plugins/fixploidy.c
-+++ python-pysam/bcftools/plugins/fixploidy.c
-@@ -190,7 +190,7 @@
- return rec; // GT field not present
-
- if ( ngts % n_sample )
-- error("Error at %s:%d: wrong number of GT fields\n",bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Error at %s:%"PRId64": wrong number of GT fields\n",bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
-
- if ( force_ploidy==-1 )
- ploidy_query(ploidy, (char*)bcf_seqname(in_hdr,rec), rec->pos, sex2ploidy,NULL,&max_ploidy);
-@@ -215,7 +215,7 @@
- while ( j<max_ploidy ) { dst[j] = bcf_int32_vector_end; j++; }
- }
- if ( bcf_update_genotypes(out_hdr,rec,gt_arr2,n_sample*max_ploidy) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( ngts!=1 || max_ploidy!=1 )
- {
-@@ -232,7 +232,7 @@
- while ( j<ngts ) { gts[j] = bcf_int32_vector_end; j++; }
- }
- if ( bcf_update_genotypes(out_hdr,rec,gt_arr,n_sample*ngts) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- }
- return rec;
- }
---- python-pysam.orig/bcftools/plugins/fixploidy.c.pysam.c
-+++ python-pysam/bcftools/plugins/fixploidy.c.pysam.c
-@@ -192,7 +192,7 @@
- return rec; // GT field not present
-
- if ( ngts % n_sample )
-- error("Error at %s:%d: wrong number of GT fields\n",bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Error at %s:%"PRId64": wrong number of GT fields\n",bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
-
- if ( force_ploidy==-1 )
- ploidy_query(ploidy, (char*)bcf_seqname(in_hdr,rec), rec->pos, sex2ploidy,NULL,&max_ploidy);
-@@ -217,7 +217,7 @@
- while ( j<max_ploidy ) { dst[j] = bcf_int32_vector_end; j++; }
- }
- if ( bcf_update_genotypes(out_hdr,rec,gt_arr2,n_sample*max_ploidy) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( ngts!=1 || max_ploidy!=1 )
- {
-@@ -234,7 +234,7 @@
- while ( j<ngts ) { gts[j] = bcf_int32_vector_end; j++; }
- }
- if ( bcf_update_genotypes(out_hdr,rec,gt_arr,n_sample*ngts) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(in_hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1);
- }
- return rec;
- }
---- python-pysam.orig/bcftools/plugins/fixref.c
-+++ python-pysam/bcftools/plugins/fixref.c
-@@ -76,6 +76,7 @@
- #include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-@@ -90,6 +91,7 @@
- #define MODE_TOP2FWD 2
- #define MODE_FLIP2FWD 3
- #define MODE_USE_ID 4
-+#define MODE_REF_ALT 5
-
- typedef struct
- {
-@@ -128,16 +130,20 @@
- "\n"
- "About: This tool helps to determine and fix strand orientation.\n"
- " Currently the following modes are recognised:\n"
-- " flip .. flips non-ambiguous SNPs and ignores the rest\n"
-- " id .. swap REF/ALT and GTs using the ID column to determine the REF allele\n"
-- " stats .. collect and print stats\n"
-- " top .. converts from Illumina TOP strand to fwd\n"
-+ " flip .. flip REF/ALT columns and GTs for non-ambiguous SNPs and ignore the rest\n"
-+ " id .. swap REF/ALT columns and GTs using the ID column to determine the REF allele\n"
-+ " ref-alt .. swap REF/ALT columns to match the reference but not modify the genotypes\n"
-+ " stats .. collect and print stats\n"
-+ " top .. convert from Illumina TOP strand to fwd\n"
- "\n"
- " WARNING: Do not use the program blindly, make an effort to\n"
- " understand what strand convention your data uses! Make sure\n"
- " the reason for mismatching REF alleles is not a different\n"
- " reference build!!\n"
- "\n"
-+ " Please check this page before messing up your VCF even more\n"
-+ " http://samtools.github.io/bcftools/howtos/plugin.fixref.html\n"
-+ "\n"
- "Usage: bcftools +fixref [General Options] -- [Plugin Options]\n"
- "Options:\n"
- " run \"bcftools plugin\" for a list of common options\n"
-@@ -148,7 +154,7 @@
- " -i, --use-id <file.vcf> Swap REF/ALT using the ID column to determine the REF allele, implies -m id.\n"
- " Download the dbSNP file from\n"
- " https://www.ncbi.nlm.nih.gov/variation/docs/human_variation_vcf\n"
-- " -m, --mode <string> Collect stats (\"stats\") or convert (\"flip\", \"id\", \"top\") [stats]\n"
-+ " -m, --mode <string> Collect stats (\"stats\") or convert (\"flip\", \"id\", \"ref-alt\", \"top\") [stats]\n"
- "\n"
- "Examples:\n"
- " # run stats\n"
-@@ -189,6 +195,7 @@
- if ( !strcasecmp(optarg,"top") ) args.mode = MODE_TOP2FWD;
- else if ( !strcasecmp(optarg,"flip") ) args.mode = MODE_FLIP2FWD;
- else if ( !strcasecmp(optarg,"id") ) args.mode = MODE_USE_ID;
-+ else if ( !strcasecmp(optarg,"ref-alt") ) args.mode = MODE_REF_ALT;
- else if ( !strcasecmp(optarg,"stats") ) args.mode = MODE_STATS;
- else error("The source strand convention not recognised: %s\n", optarg);
- break;
-@@ -217,6 +224,8 @@
- if ( !swap ) return rec; // only fix the alleles, leaving GTs unchanged
-
- int ngts = bcf_get_genotypes(args->hdr, rec, &args->gts, &args->ngts);
-+ if ( ngts<=0 ) return rec; // no samples, no genotypes
-+
- int i, j, nsmpl = bcf_hdr_nsamples(args->hdr);
- ngts /= nsmpl;
- for (i=0; i<nsmpl; i++)
-@@ -275,7 +284,7 @@
- args->skip_rid = rec->rid;
- return -2;
- }
-- error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- int ir = nt2int(*ref);
- free(ref);
-@@ -288,6 +297,7 @@
- args->i2m = kh_init(i2m);
- bcf_srs_t *sr = bcf_sr_init();
- if ( bcf_sr_set_regions(sr, chr, 0) != 0 ) goto done;
-+ if ( !args->dbsnp_fname ) error("No ID file specified, use -i/--use-id\n");
- if ( !bcf_sr_add_reader(sr,args->dbsnp_fname) ) error("Failed to open %s: %s\n", args->dbsnp_fname,bcf_sr_strerror(sr->errnum));
- while ( bcf_sr_next_line(sr) )
- {
-@@ -330,7 +340,7 @@
-
- ref = kh_val(args->i2m, k).ref;
- if ( ref!=ir )
-- error("Reference base mismatch at %s:%d .. %c vs %c\n",bcf_seqname(args->hdr,rec),rec->pos+1,int2nt(ref),int2nt(ir));
-+ error("Reference base mismatch at %s:%"PRId64" .. %c vs %c\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,int2nt(ref),int2nt(ir));
-
- if ( ia==ref ) return rec;
- if ( ib==ref ) { args->nswap++; return set_ref_alt(args,rec,int2nt(ib),int2nt(ia),1); }
-@@ -408,14 +418,22 @@
- if ( !args.unsorted && args.pos > rec->pos )
- {
- fprintf(stderr,
-- "Warning: corrected position(s) results in unsorted VCF, for example %s:%d comes after %s:%d\n"
-+ "Warning: corrected position(s) results in unsorted VCF, for example %s:%"PRId64" comes after %s:%d\n"
- " The standard unix `sort` or `vcf-sort` from vcftools can be used to fix the order.\n",
-- bcf_seqname(args.hdr,rec),rec->pos+1,bcf_seqname(args.hdr,rec),args.pos);
-+ bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1,bcf_seqname(args.hdr,rec),args.pos);
- args.unsorted = 1;
- }
- args.pos = rec->pos;
- return ret;
- }
-+ else if ( args.mode==MODE_REF_ALT ) // only change the REF/ALT column, leave the genotypes as is
-+ {
-+ if ( ir==ia ) return ret;
-+ if ( ir==ib ) { args.nswap++; return set_ref_alt(&args,rec,int2nt(ib),int2nt(ia),0); }
-+ if ( ir==revint(ia) ) { args.nflip++; return set_ref_alt(&args,rec,int2nt(revint(ia)),int2nt(revint(ib)),0); }
-+ if ( ir==revint(ib) ) { args.nflip_swap++; return set_ref_alt(&args,rec,int2nt(revint(ib)),int2nt(revint(ia)),0); }
-+ error("FIXME: this should not happen %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-+ }
- else if ( args.mode==MODE_FLIP2FWD )
- {
- int pair = 1 << ia | 1 << ib;
-@@ -428,7 +446,7 @@
- if ( ir==ib ) { args.nswap++; return set_ref_alt(&args,rec,int2nt(ib),int2nt(ia),1); }
- if ( ir==revint(ia) ) { args.nflip++; return set_ref_alt(&args,rec,int2nt(revint(ia)),int2nt(revint(ib)),0); }
- if ( ir==revint(ib) ) { args.nflip_swap++; return set_ref_alt(&args,rec,int2nt(revint(ib)),int2nt(revint(ia)),1); }
-- error("FIXME: this should not happen %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ error("FIXME: this should not happen %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( args.mode==MODE_TOP2FWD )
- {
-@@ -457,8 +475,8 @@
- {
- int len, win = rec->pos > 100 ? 100 : rec->pos, beg = rec->pos - win, end = rec->pos + win;
- char *ref = faidx_fetch_seq(args.fai, (char*)bcf_seqname(args.hdr,rec), beg,end, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-- if ( end - beg + 1 != len ) error("FIXME: check win=%d,len=%d at %s:%d (%d %d)\n", win,len, bcf_seqname(args.hdr,rec),rec->pos+1, end,beg);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-+ if ( end - beg + 1 != len ) error("FIXME: check win=%d,len=%d at %s:%"PRId64" (%d %d)\n", win,len, bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1, end,beg);
-
- int i, mid = rec->pos - beg, strand = 0;
- for (i=1; i<=win; i++)
---- python-pysam.orig/bcftools/plugins/fixref.c.pysam.c
-+++ python-pysam/bcftools/plugins/fixref.c.pysam.c
-@@ -78,6 +78,7 @@
- #include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-@@ -92,6 +93,7 @@
- #define MODE_TOP2FWD 2
- #define MODE_FLIP2FWD 3
- #define MODE_USE_ID 4
-+#define MODE_REF_ALT 5
-
- typedef struct
- {
-@@ -130,16 +132,20 @@
- "\n"
- "About: This tool helps to determine and fix strand orientation.\n"
- " Currently the following modes are recognised:\n"
-- " flip .. flips non-ambiguous SNPs and ignores the rest\n"
-- " id .. swap REF/ALT and GTs using the ID column to determine the REF allele\n"
-- " stats .. collect and print stats\n"
-- " top .. converts from Illumina TOP strand to fwd\n"
-+ " flip .. flip REF/ALT columns and GTs for non-ambiguous SNPs and ignore the rest\n"
-+ " id .. swap REF/ALT columns and GTs using the ID column to determine the REF allele\n"
-+ " ref-alt .. swap REF/ALT columns to match the reference but not modify the genotypes\n"
-+ " stats .. collect and print stats\n"
-+ " top .. convert from Illumina TOP strand to fwd\n"
- "\n"
- " WARNING: Do not use the program blindly, make an effort to\n"
- " understand what strand convention your data uses! Make sure\n"
- " the reason for mismatching REF alleles is not a different\n"
- " reference build!!\n"
- "\n"
-+ " Please check this page before messing up your VCF even more\n"
-+ " http://samtools.github.io/bcftools/howtos/plugin.fixref.html\n"
-+ "\n"
- "Usage: bcftools +fixref [General Options] -- [Plugin Options]\n"
- "Options:\n"
- " run \"bcftools plugin\" for a list of common options\n"
-@@ -150,7 +156,7 @@
- " -i, --use-id <file.vcf> Swap REF/ALT using the ID column to determine the REF allele, implies -m id.\n"
- " Download the dbSNP file from\n"
- " https://www.ncbi.nlm.nih.gov/variation/docs/human_variation_vcf\n"
-- " -m, --mode <string> Collect stats (\"stats\") or convert (\"flip\", \"id\", \"top\") [stats]\n"
-+ " -m, --mode <string> Collect stats (\"stats\") or convert (\"flip\", \"id\", \"ref-alt\", \"top\") [stats]\n"
- "\n"
- "Examples:\n"
- " # run stats\n"
-@@ -191,6 +197,7 @@
- if ( !strcasecmp(optarg,"top") ) args.mode = MODE_TOP2FWD;
- else if ( !strcasecmp(optarg,"flip") ) args.mode = MODE_FLIP2FWD;
- else if ( !strcasecmp(optarg,"id") ) args.mode = MODE_USE_ID;
-+ else if ( !strcasecmp(optarg,"ref-alt") ) args.mode = MODE_REF_ALT;
- else if ( !strcasecmp(optarg,"stats") ) args.mode = MODE_STATS;
- else error("The source strand convention not recognised: %s\n", optarg);
- break;
-@@ -219,6 +226,8 @@
- if ( !swap ) return rec; // only fix the alleles, leaving GTs unchanged
-
- int ngts = bcf_get_genotypes(args->hdr, rec, &args->gts, &args->ngts);
-+ if ( ngts<=0 ) return rec; // no samples, no genotypes
-+
- int i, j, nsmpl = bcf_hdr_nsamples(args->hdr);
- ngts /= nsmpl;
- for (i=0; i<nsmpl; i++)
-@@ -277,7 +286,7 @@
- args->skip_rid = rec->rid;
- return -2;
- }
-- error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,rec),rec->pos+1);
-+ error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
- }
- int ir = nt2int(*ref);
- free(ref);
-@@ -290,6 +299,7 @@
- args->i2m = kh_init(i2m);
- bcf_srs_t *sr = bcf_sr_init();
- if ( bcf_sr_set_regions(sr, chr, 0) != 0 ) goto done;
-+ if ( !args->dbsnp_fname ) error("No ID file specified, use -i/--use-id\n");
- if ( !bcf_sr_add_reader(sr,args->dbsnp_fname) ) error("Failed to open %s: %s\n", args->dbsnp_fname,bcf_sr_strerror(sr->errnum));
- while ( bcf_sr_next_line(sr) )
- {
-@@ -332,7 +342,7 @@
-
- ref = kh_val(args->i2m, k).ref;
- if ( ref!=ir )
-- error("Reference base mismatch at %s:%d .. %c vs %c\n",bcf_seqname(args->hdr,rec),rec->pos+1,int2nt(ref),int2nt(ir));
-+ error("Reference base mismatch at %s:%"PRId64" .. %c vs %c\n",bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,int2nt(ref),int2nt(ir));
-
- if ( ia==ref ) return rec;
- if ( ib==ref ) { args->nswap++; return set_ref_alt(args,rec,int2nt(ib),int2nt(ia),1); }
-@@ -410,14 +420,22 @@
- if ( !args.unsorted && args.pos > rec->pos )
- {
- fprintf(bcftools_stderr,
-- "Warning: corrected position(s) results in unsorted VCF, for example %s:%d comes after %s:%d\n"
-+ "Warning: corrected position(s) results in unsorted VCF, for example %s:%"PRId64" comes after %s:%d\n"
- " The standard unix `sort` or `vcf-sort` from vcftools can be used to fix the order.\n",
-- bcf_seqname(args.hdr,rec),rec->pos+1,bcf_seqname(args.hdr,rec),args.pos);
-+ bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1,bcf_seqname(args.hdr,rec),args.pos);
- args.unsorted = 1;
- }
- args.pos = rec->pos;
- return ret;
- }
-+ else if ( args.mode==MODE_REF_ALT ) // only change the REF/ALT column, leave the genotypes as is
-+ {
-+ if ( ir==ia ) return ret;
-+ if ( ir==ib ) { args.nswap++; return set_ref_alt(&args,rec,int2nt(ib),int2nt(ia),0); }
-+ if ( ir==revint(ia) ) { args.nflip++; return set_ref_alt(&args,rec,int2nt(revint(ia)),int2nt(revint(ib)),0); }
-+ if ( ir==revint(ib) ) { args.nflip_swap++; return set_ref_alt(&args,rec,int2nt(revint(ib)),int2nt(revint(ia)),0); }
-+ error("FIXME: this should not happen %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-+ }
- else if ( args.mode==MODE_FLIP2FWD )
- {
- int pair = 1 << ia | 1 << ib;
-@@ -430,7 +448,7 @@
- if ( ir==ib ) { args.nswap++; return set_ref_alt(&args,rec,int2nt(ib),int2nt(ia),1); }
- if ( ir==revint(ia) ) { args.nflip++; return set_ref_alt(&args,rec,int2nt(revint(ia)),int2nt(revint(ib)),0); }
- if ( ir==revint(ib) ) { args.nflip_swap++; return set_ref_alt(&args,rec,int2nt(revint(ib)),int2nt(revint(ia)),1); }
-- error("FIXME: this should not happen %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ error("FIXME: this should not happen %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
- }
- else if ( args.mode==MODE_TOP2FWD )
- {
-@@ -459,8 +477,8 @@
- {
- int len, win = rec->pos > 100 ? 100 : rec->pos, beg = rec->pos - win, end = rec->pos + win;
- char *ref = faidx_fetch_seq(args.fai, (char*)bcf_seqname(args.hdr,rec), beg,end, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-- if ( end - beg + 1 != len ) error("FIXME: check win=%d,len=%d at %s:%d (%d %d)\n", win,len, bcf_seqname(args.hdr,rec),rec->pos+1, end,beg);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-+ if ( end - beg + 1 != len ) error("FIXME: check win=%d,len=%d at %s:%"PRId64" (%d %d)\n", win,len, bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1, end,beg);
-
- int i, mid = rec->pos - beg, strand = 0;
- for (i=1; i<=win; i++)
---- python-pysam.orig/bcftools/plugins/guess-ploidy.c
-+++ python-pysam/bcftools/plugins/guess-ploidy.c
-@@ -387,7 +387,7 @@
- counts->pdip += log(pdip);
- counts->ncount++;
- if ( args->verbose>1 )
-- printf("DBG\t%s\t%d\t%s\t%e\t%e\t%e\t%e\t%e\t%e\n", bcf_seqname(args->hdr,rec),rec->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,ismpl),
-+ printf("DBG\t%s\t%"PRId64"\t%s\t%e\t%e\t%e\t%e\t%e\t%e\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,ismpl),
- freq[1],tmp[0],tmp[1],tmp[2],phap,pdip);
- }
- }
-@@ -444,7 +444,7 @@
- else if ( !strcasecmp(optarg,"hg38") ) region = "chrX:2781480-155701381";
- else error("The argument not recognised, expected --genome b37, b38, hg19 or hg38: %s\n", optarg);
- break;
-- case 'R': region_is_file = 1;
-+ case 'R': region_is_file = 1; // fall-through
- case 'r': region = optarg; break;
- case 'v': args->verbose++; break;
- case 't':
---- python-pysam.orig/bcftools/plugins/guess-ploidy.c.pysam.c
-+++ python-pysam/bcftools/plugins/guess-ploidy.c.pysam.c
-@@ -389,7 +389,7 @@
- counts->pdip += log(pdip);
- counts->ncount++;
- if ( args->verbose>1 )
-- fprintf(bcftools_stdout, "DBG\t%s\t%d\t%s\t%e\t%e\t%e\t%e\t%e\t%e\n", bcf_seqname(args->hdr,rec),rec->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,ismpl),
-+ fprintf(bcftools_stdout, "DBG\t%s\t%"PRId64"\t%s\t%e\t%e\t%e\t%e\t%e\t%e\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_SAMPLE,ismpl),
- freq[1],tmp[0],tmp[1],tmp[2],phap,pdip);
- }
- }
-@@ -446,7 +446,7 @@
- else if ( !strcasecmp(optarg,"hg38") ) region = "chrX:2781480-155701381";
- else error("The argument not recognised, expected --genome b37, b38, hg19 or hg38: %s\n", optarg);
- break;
-- case 'R': region_is_file = 1;
-+ case 'R': region_is_file = 1; // fall-through
- case 'r': region = optarg; break;
- case 'v': args->verbose++; break;
- case 't':
---- /dev/null
-+++ python-pysam/bcftools/plugins/gvcfz.c
-@@ -0,0 +1,378 @@
-+/*
-+ Copyright (C) 2017 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+*/
-+/*
-+ Compress gVCF file by resizing gVCF blocks according to specified criteria.
-+*/
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <stdint.h>
-+#include <errno.h>
-+#include <ctype.h>
-+#include <inttypes.h>
-+#include <sys/stat.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define GQ_KEY_NONE NULL
-+#define GQ_KEY_GQ "GQ"
-+#define GQ_KEY_RGQ "RGQ"
-+
-+typedef struct
-+{
-+ int32_t end, min_dp, gq, pl[3], grp;
-+ char *gq_key;
-+ bcf1_t *rec;
-+}
-+block_t;
-+typedef struct
-+{
-+ char *expr; // expression
-+ int flt_id; // filter id, -1 for PASS
-+ filter_t *flt; // filter
-+}
-+grp_t;
-+typedef struct
-+{
-+ filter_t *filter;
-+ char *filter_str;
-+ int filter_logic;
-+ block_t gvcf;
-+ htsFile *fh_out;
-+ int ngrp;
-+ grp_t *grp;
-+ char *group_by;
-+ int argc, region_is_file, target_is_file, output_type, trim_alts;
-+ int32_t *tmpi, mtmpi, mean_min_dp_reported;
-+ char **argv, *region, *target, *fname, *output_fname, *keep_tags;
-+ bcf_hdr_t *hdr_in, *hdr_out;
-+ bcf_srs_t *sr;
-+}
-+args_t;
-+
-+const char *about(void)
-+{
-+ return "Compress gVCF file by resizing gVCF blocks according to specified criteria.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Compress gVCF file by resizing gVCF blocks according to specified criteria.\n"
-+ "\n"
-+ "Usage: bcftools +gvcfz [Options]\n"
-+ "Plugin options:\n"
-+ " -a, --trim-alt-alleles trim alternate alleles not seen in the genotypes\n"
-+ " -e, --exclude <expr> exclude sites for which the expression is true\n"
-+ " -i, --include <expr> include sites for which the expression is true\n"
-+ " -g, --group-by EXPR group gVCF blocks according to the expression\n"
-+ " -o, --output FILE write gVCF output to the FILE\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ "Examples:\n"
-+ " # Compress blocks by GQ and DP. Multiple blocks separated by a semicolon can be defined\n"
-+ " bcftools +gvcfz input.bcf -g'PASS:GQ>60 & DP<20; PASS:GQ>40 & DP<15; Flt1:QG>20; Flt2:-'\n"
-+ "\n"
-+ " # Compress all non-reference sites into a single block, remove unused alternate alleles\n"
-+ " bcftools +gvcfz input.bcf -a -g'PASS:GT!=\"alt\"'\n"
-+ "\n";
-+}
-+
-+static void init_groups(args_t *args)
-+{
-+ args->hdr_out = bcf_hdr_dup(args->hdr_in);
-+ bcf_hdr_printf(args->hdr_out, "##INFO=<ID=END,Number=1,Type=Integer,Description=\"Stop position of the interval\">");
-+
-+ // avoid nested double quotes in FILTER description
-+ char *hdr_str = strdup(args->group_by);
-+ char *tmp = hdr_str;
-+ while (*tmp)
-+ {
-+ if ( *tmp=='"' ) *tmp = '\'';
-+ tmp++;
-+ }
-+
-+ char *rmme_str = strdup(args->group_by), *beg = rmme_str;
-+ while ( *beg )
-+ {
-+ while ( *beg && isspace(*beg) ) beg++;
-+ if ( !beg ) break;
-+ char *end = beg;
-+ while ( *end && *end!=':' ) end++;
-+ if ( *end!=':' ) error("Could not parse the expression: \"%s\"\n", args->group_by);
-+ *end = 0;
-+ char *flt = beg;
-+ beg = ++end;
-+ while ( *end && *end!=';' ) end++;
-+ char tmp = *end; *end = 0;
-+ if ( strcmp(flt,"PASS") )
-+ {
-+ bcf_hdr_printf(args->hdr_out, "##FILTER=<ID=%s,Description=\"%s\">", flt, hdr_str);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
-+ args->ngrp++;
-+ args->grp = (grp_t*) realloc(args->grp,sizeof(grp_t)*args->ngrp);
-+ grp_t *grp = args->grp + args->ngrp - 1;
-+ grp->expr = strdup(beg);
-+ grp->flt_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt);
-+ if ( !bcf_hdr_idinfo_exists(args->hdr_out, BCF_HL_FLT, grp->flt_id) ) error("Could not initialize the filter \"%s\"\n", flt);
-+ if ( !strcmp(flt,"PASS") ) grp->flt_id = -1;
-+
-+ // remove trailing spaces
-+ beg = grp->expr + strlen(grp->expr); while ( beg >= grp->expr && isspace(*beg) ) { *beg = 0; beg--; }
-+ beg = grp->expr; while ( *beg && isspace(*beg) ) beg++;
-+
-+ grp->flt = strcmp("-",beg) ? filter_init(args->hdr_in, grp->expr) : NULL;
-+
-+ if ( !tmp ) break;
-+ beg = end + 1;
-+ }
-+ free(rmme_str);
-+ free(hdr_str);
-+}
-+
-+static void destroy_data(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->ngrp; i++)
-+ {
-+ if ( args->grp[i].flt ) filter_destroy(args->grp[i].flt);
-+ free(args->grp[i].expr);
-+ }
-+ free(args->grp);
-+
-+ if ( args->filter ) filter_destroy(args->filter);
-+ if ( hts_close(args->fh_out)!=0 ) error("failed to close %s\n", args->output_fname);
-+
-+ bcf_sr_destroy(args->sr);
-+ if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out);
-+ if ( args->gvcf.rec ) bcf_destroy(args->gvcf.rec);
-+ free(args->tmpi);
-+ free(args);
-+}
-+
-+static void flush_block(args_t *args, bcf1_t *rec)
-+{
-+ block_t *gvcf = &args->gvcf;
-+ if ( gvcf->grp < 0 ) return;
-+ if ( rec && gvcf->end - 1 >= rec->pos ) gvcf->end = rec->pos; // NB: end is 1-based, rec->pos is 0-based
-+
-+ if ( gvcf->rec->pos+1 < gvcf->end && bcf_update_info_int32(args->hdr_out,gvcf->rec,"END",&gvcf->end,1) != 0 )
-+ error("Could not update INFO/END at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,"DP",&gvcf->min_dp,1) != 0 )
-+ error("Could not update FORMAT/DP at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ if ( gvcf->gq_key )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,gvcf->gq_key,&gvcf->gq,1) != 0 )
-+ error("Could not update FORMAT/%s at %s:%"PRId64"\n", gvcf->gq_key, bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ }
-+ if ( gvcf->pl[0] >=0 )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,"PL",&gvcf->pl,3) != 0 )
-+ error("Could not update FORMAT/PL at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ }
-+ if ( gvcf->grp < args->ngrp && args->grp[gvcf->grp].flt_id >= 0 )
-+ bcf_add_filter(args->hdr_out, gvcf->rec, args->grp[gvcf->grp].flt_id);
-+
-+ if ( bcf_write(args->fh_out, args->hdr_out, gvcf->rec)!=0 ) error("Failed to write the header\n");
-+
-+ gvcf->grp = -1;
-+}
-+static void process_gvcf(args_t *args)
-+{
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+
-+ if ( args->filter )
-+ {
-+ int pass = filter_test(args->filter, rec, NULL);
-+ if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
-+ if ( !pass ) return;
-+ }
-+
-+ if ( rec->n_allele > 2 || (rec->n_allele == 2 && strcmp("<NON_REF>",rec->d.allele[1]) && strcmp("<*>",rec->d.allele[1])) )
-+ {
-+ if ( args->trim_alts )
-+ {
-+ bcf_unpack(rec, BCF_UN_ALL);
-+ if ( bcf_trim_alleles(args->hdr_in, rec)<0 )
-+ error("Error: Could not trim alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr_in, rec),(int64_t) rec->pos+1);
-+
-+ // trim the ref allele if necessary
-+ if ( rec->d.allele[0][1] )
-+ {
-+ rec->d.allele[0][1] = 0;
-+ bcf_update_alleles(args->hdr_in, rec, (const char**)rec->d.allele, 1);
-+ }
-+
-+ }
-+ if ( rec->n_allele > 2 || (rec->n_allele == 2 && strcmp("<NON_REF>",rec->d.allele[1]) && strcmp("<*>",rec->d.allele[1])) )
-+ {
-+ // not a gvcf block
-+ flush_block(args, rec);
-+ if ( bcf_write(args->fh_out, args->hdr_out, rec)!=0 ) error("Failed to write\n");
-+ return;
-+ }
-+ }
-+
-+ int ret = bcf_get_info_int32(args->hdr_in,rec,"END",&args->tmpi,&args->mtmpi);
-+ int32_t end = ret==1 ? args->tmpi[0] : rec->pos + 1;
-+
-+ char *gq_key = GQ_KEY_GQ;
-+ ret = bcf_get_format_int32(args->hdr_in,rec,gq_key,&args->tmpi,&args->mtmpi);
-+ if ( ret!=1 )
-+ {
-+ gq_key = GQ_KEY_RGQ;
-+ if ( ret<1 ) ret = bcf_get_format_int32(args->hdr_in,rec,gq_key,&args->tmpi,&args->mtmpi);
-+ if ( ret!=1 ) gq_key = GQ_KEY_NONE;
-+ }
-+ int32_t gq = ret==1 ? args->tmpi[0] : 0;
-+
-+ int32_t min_dp = 0;
-+ if ( bcf_get_format_int32(args->hdr_in,rec,"MIN_DP",&args->tmpi,&args->mtmpi)==1 )
-+ min_dp = args->tmpi[0];
-+ else if ( bcf_get_format_int32(args->hdr_in,rec,"DP",&args->tmpi,&args->mtmpi)==1 )
-+ min_dp = args->tmpi[0];
-+ else
-+ error("Expected one FORMAT/MIN_DP or FORMAT/DP value at %s:%"PRId64"\n", bcf_seqname(args->hdr_in,rec),(int64_t) rec->pos+1);
-+
-+ int32_t pl[3] = {-1,-1,-1};
-+ ret = bcf_get_format_int32(args->hdr_in,rec,"PL",&args->tmpi,&args->mtmpi);
-+ if ( ret>3 ) error("Expected three FORMAT/PL values at %s:%"PRId64"\n", bcf_seqname(args->hdr_in,rec),(int64_t) rec->pos+1);
-+ else if ( ret==3 )
-+ {
-+ pl[0] = args->tmpi[0];
-+ pl[1] = args->tmpi[1];
-+ pl[2] = args->tmpi[2];
-+ }
-+
-+ int i;
-+ for (i=0; i<args->ngrp; i++)
-+ if ( !args->grp[i].flt || filter_test(args->grp[i].flt, rec, NULL)==1 ) break;
-+
-+ if ( args->gvcf.grp != i ) flush_block(args, rec); // new block
-+ if ( args->gvcf.grp >= 0 && args->gvcf.rec->rid != rec->rid ) flush_block(args, NULL); // new chromosome
-+
-+ if ( args->gvcf.grp >= 0 ) // extend an existing block
-+ {
-+ if ( args->gvcf.end < end ) args->gvcf.end = end;
-+ if ( args->gvcf.gq_key!=GQ_KEY_NONE && gq_key!=GQ_KEY_NONE && args->gvcf.gq > gq ) args->gvcf.gq = gq;
-+ if ( args->gvcf.min_dp > min_dp ) args->gvcf.min_dp = min_dp;
-+ if ( args->gvcf.pl[0] > pl[0] ) args->gvcf.pl[0] = pl[0];
-+ if ( args->gvcf.pl[1] > pl[1] ) args->gvcf.pl[1] = pl[1];
-+ if ( args->gvcf.pl[2] > pl[2] ) args->gvcf.pl[2] = pl[2];
-+ return;
-+ }
-+
-+ // start a new block
-+ args->gvcf.rec = bcf_copy(args->gvcf.rec, rec);
-+ args->gvcf.grp = i;
-+ args->gvcf.min_dp = min_dp;
-+ args->gvcf.end = end;
-+ args->gvcf.pl[0] = pl[0];
-+ args->gvcf.pl[1] = pl[1];
-+ args->gvcf.pl[2] = pl[2];
-+ args->gvcf.gq_key = gq_key;
-+ if ( gq_key!=GQ_KEY_NONE ) args->gvcf.gq = gq;
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_type = FT_VCF;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"trim-alt-alleles",required_argument,0,'a'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"group-by",required_argument,NULL,'g'},
-+ {"stats",required_argument,NULL,'s'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "vr:R:t:T:o:O:g:i:e:a",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'a': args->trim_alts = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 'g': args->group_by = optarg; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->group_by ) error("Missing the -g option\n");
-+
-+ args->gvcf.rec = bcf_init();
-+ args->gvcf.grp = -1; // the block is inactive
-+ args->sr = bcf_sr_init();
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr_in = bcf_sr_get_header(args->sr,0);
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr_in, args->filter_str);
-+ init_groups(args);
-+ args->fh_out = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( bcf_hdr_write(args->fh_out, args->hdr_out)!=0 ) error("Failed to write the header\n");
-+ while ( bcf_sr_next_line(args->sr) ) process_gvcf(args);
-+ flush_block(args, NULL);
-+
-+ destroy_data(args);
-+ return 0;
-+}
-+
-+
---- /dev/null
-+++ python-pysam/bcftools/plugins/gvcfz.c.pysam.c
-@@ -0,0 +1,380 @@
-+#include "bcftools.pysam.h"
-+
-+/*
-+ Copyright (C) 2017 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+*/
-+/*
-+ Compress gVCF file by resizing gVCF blocks according to specified criteria.
-+*/
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <stdint.h>
-+#include <errno.h>
-+#include <ctype.h>
-+#include <inttypes.h>
-+#include <sys/stat.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define GQ_KEY_NONE NULL
-+#define GQ_KEY_GQ "GQ"
-+#define GQ_KEY_RGQ "RGQ"
-+
-+typedef struct
-+{
-+ int32_t end, min_dp, gq, pl[3], grp;
-+ char *gq_key;
-+ bcf1_t *rec;
-+}
-+block_t;
-+typedef struct
-+{
-+ char *expr; // expression
-+ int flt_id; // filter id, -1 for PASS
-+ filter_t *flt; // filter
-+}
-+grp_t;
-+typedef struct
-+{
-+ filter_t *filter;
-+ char *filter_str;
-+ int filter_logic;
-+ block_t gvcf;
-+ htsFile *fh_out;
-+ int ngrp;
-+ grp_t *grp;
-+ char *group_by;
-+ int argc, region_is_file, target_is_file, output_type, trim_alts;
-+ int32_t *tmpi, mtmpi, mean_min_dp_reported;
-+ char **argv, *region, *target, *fname, *output_fname, *keep_tags;
-+ bcf_hdr_t *hdr_in, *hdr_out;
-+ bcf_srs_t *sr;
-+}
-+args_t;
-+
-+const char *about(void)
-+{
-+ return "Compress gVCF file by resizing gVCF blocks according to specified criteria.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Compress gVCF file by resizing gVCF blocks according to specified criteria.\n"
-+ "\n"
-+ "Usage: bcftools +gvcfz [Options]\n"
-+ "Plugin options:\n"
-+ " -a, --trim-alt-alleles trim alternate alleles not seen in the genotypes\n"
-+ " -e, --exclude <expr> exclude sites for which the expression is true\n"
-+ " -i, --include <expr> include sites for which the expression is true\n"
-+ " -g, --group-by EXPR group gVCF blocks according to the expression\n"
-+ " -o, --output FILE write gVCF output to the FILE\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ "Examples:\n"
-+ " # Compress blocks by GQ and DP. Multiple blocks separated by a semicolon can be defined\n"
-+ " bcftools +gvcfz input.bcf -g'PASS:GQ>60 & DP<20; PASS:GQ>40 & DP<15; Flt1:QG>20; Flt2:-'\n"
-+ "\n"
-+ " # Compress all non-reference sites into a single block, remove unused alternate alleles\n"
-+ " bcftools +gvcfz input.bcf -a -g'PASS:GT!=\"alt\"'\n"
-+ "\n";
-+}
-+
-+static void init_groups(args_t *args)
-+{
-+ args->hdr_out = bcf_hdr_dup(args->hdr_in);
-+ bcf_hdr_printf(args->hdr_out, "##INFO=<ID=END,Number=1,Type=Integer,Description=\"Stop position of the interval\">");
-+
-+ // avoid nested double quotes in FILTER description
-+ char *hdr_str = strdup(args->group_by);
-+ char *tmp = hdr_str;
-+ while (*tmp)
-+ {
-+ if ( *tmp=='"' ) *tmp = '\'';
-+ tmp++;
-+ }
-+
-+ char *rmme_str = strdup(args->group_by), *beg = rmme_str;
-+ while ( *beg )
-+ {
-+ while ( *beg && isspace(*beg) ) beg++;
-+ if ( !beg ) break;
-+ char *end = beg;
-+ while ( *end && *end!=':' ) end++;
-+ if ( *end!=':' ) error("Could not parse the expression: \"%s\"\n", args->group_by);
-+ *end = 0;
-+ char *flt = beg;
-+ beg = ++end;
-+ while ( *end && *end!=';' ) end++;
-+ char tmp = *end; *end = 0;
-+ if ( strcmp(flt,"PASS") )
-+ {
-+ bcf_hdr_printf(args->hdr_out, "##FILTER=<ID=%s,Description=\"%s\">", flt, hdr_str);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
-+ args->ngrp++;
-+ args->grp = (grp_t*) realloc(args->grp,sizeof(grp_t)*args->ngrp);
-+ grp_t *grp = args->grp + args->ngrp - 1;
-+ grp->expr = strdup(beg);
-+ grp->flt_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, flt);
-+ if ( !bcf_hdr_idinfo_exists(args->hdr_out, BCF_HL_FLT, grp->flt_id) ) error("Could not initialize the filter \"%s\"\n", flt);
-+ if ( !strcmp(flt,"PASS") ) grp->flt_id = -1;
-+
-+ // remove trailing spaces
-+ beg = grp->expr + strlen(grp->expr); while ( beg >= grp->expr && isspace(*beg) ) { *beg = 0; beg--; }
-+ beg = grp->expr; while ( *beg && isspace(*beg) ) beg++;
-+
-+ grp->flt = strcmp("-",beg) ? filter_init(args->hdr_in, grp->expr) : NULL;
-+
-+ if ( !tmp ) break;
-+ beg = end + 1;
-+ }
-+ free(rmme_str);
-+ free(hdr_str);
-+}
-+
-+static void destroy_data(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->ngrp; i++)
-+ {
-+ if ( args->grp[i].flt ) filter_destroy(args->grp[i].flt);
-+ free(args->grp[i].expr);
-+ }
-+ free(args->grp);
-+
-+ if ( args->filter ) filter_destroy(args->filter);
-+ if ( hts_close(args->fh_out)!=0 ) error("failed to close %s\n", args->output_fname);
-+
-+ bcf_sr_destroy(args->sr);
-+ if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out);
-+ if ( args->gvcf.rec ) bcf_destroy(args->gvcf.rec);
-+ free(args->tmpi);
-+ free(args);
-+}
-+
-+static void flush_block(args_t *args, bcf1_t *rec)
-+{
-+ block_t *gvcf = &args->gvcf;
-+ if ( gvcf->grp < 0 ) return;
-+ if ( rec && gvcf->end - 1 >= rec->pos ) gvcf->end = rec->pos; // NB: end is 1-based, rec->pos is 0-based
-+
-+ if ( gvcf->rec->pos+1 < gvcf->end && bcf_update_info_int32(args->hdr_out,gvcf->rec,"END",&gvcf->end,1) != 0 )
-+ error("Could not update INFO/END at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,"DP",&gvcf->min_dp,1) != 0 )
-+ error("Could not update FORMAT/DP at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ if ( gvcf->gq_key )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,gvcf->gq_key,&gvcf->gq,1) != 0 )
-+ error("Could not update FORMAT/%s at %s:%"PRId64"\n", gvcf->gq_key, bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ }
-+ if ( gvcf->pl[0] >=0 )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,gvcf->rec,"PL",&gvcf->pl,3) != 0 )
-+ error("Could not update FORMAT/PL at %s:%"PRId64"\n", bcf_seqname(args->hdr_out,gvcf->rec),(int64_t) gvcf->rec->pos+1);
-+ }
-+ if ( gvcf->grp < args->ngrp && args->grp[gvcf->grp].flt_id >= 0 )
-+ bcf_add_filter(args->hdr_out, gvcf->rec, args->grp[gvcf->grp].flt_id);
-+
-+ if ( bcf_write(args->fh_out, args->hdr_out, gvcf->rec)!=0 ) error("Failed to write the header\n");
-+
-+ gvcf->grp = -1;
-+}
-+static void process_gvcf(args_t *args)
-+{
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+
-+ if ( args->filter )
-+ {
-+ int pass = filter_test(args->filter, rec, NULL);
-+ if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
-+ if ( !pass ) return;
-+ }
-+
-+ if ( rec->n_allele > 2 || (rec->n_allele == 2 && strcmp("<NON_REF>",rec->d.allele[1]) && strcmp("<*>",rec->d.allele[1])) )
-+ {
-+ if ( args->trim_alts )
-+ {
-+ bcf_unpack(rec, BCF_UN_ALL);
-+ if ( bcf_trim_alleles(args->hdr_in, rec)<0 )
-+ error("Error: Could not trim alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr_in, rec),(int64_t) rec->pos+1);
-+
-+ // trim the ref allele if necessary
-+ if ( rec->d.allele[0][1] )
-+ {
-+ rec->d.allele[0][1] = 0;
-+ bcf_update_alleles(args->hdr_in, rec, (const char**)rec->d.allele, 1);
-+ }
-+
-+ }
-+ if ( rec->n_allele > 2 || (rec->n_allele == 2 && strcmp("<NON_REF>",rec->d.allele[1]) && strcmp("<*>",rec->d.allele[1])) )
-+ {
-+ // not a gvcf block
-+ flush_block(args, rec);
-+ if ( bcf_write(args->fh_out, args->hdr_out, rec)!=0 ) error("Failed to write\n");
-+ return;
-+ }
-+ }
-+
-+ int ret = bcf_get_info_int32(args->hdr_in,rec,"END",&args->tmpi,&args->mtmpi);
-+ int32_t end = ret==1 ? args->tmpi[0] : rec->pos + 1;
-+
-+ char *gq_key = GQ_KEY_GQ;
-+ ret = bcf_get_format_int32(args->hdr_in,rec,gq_key,&args->tmpi,&args->mtmpi);
-+ if ( ret!=1 )
-+ {
-+ gq_key = GQ_KEY_RGQ;
-+ if ( ret<1 ) ret = bcf_get_format_int32(args->hdr_in,rec,gq_key,&args->tmpi,&args->mtmpi);
-+ if ( ret!=1 ) gq_key = GQ_KEY_NONE;
-+ }
-+ int32_t gq = ret==1 ? args->tmpi[0] : 0;
-+
-+ int32_t min_dp = 0;
-+ if ( bcf_get_format_int32(args->hdr_in,rec,"MIN_DP",&args->tmpi,&args->mtmpi)==1 )
-+ min_dp = args->tmpi[0];
-+ else if ( bcf_get_format_int32(args->hdr_in,rec,"DP",&args->tmpi,&args->mtmpi)==1 )
-+ min_dp = args->tmpi[0];
-+ else
-+ error("Expected one FORMAT/MIN_DP or FORMAT/DP value at %s:%"PRId64"\n", bcf_seqname(args->hdr_in,rec),(int64_t) rec->pos+1);
-+
-+ int32_t pl[3] = {-1,-1,-1};
-+ ret = bcf_get_format_int32(args->hdr_in,rec,"PL",&args->tmpi,&args->mtmpi);
-+ if ( ret>3 ) error("Expected three FORMAT/PL values at %s:%"PRId64"\n", bcf_seqname(args->hdr_in,rec),(int64_t) rec->pos+1);
-+ else if ( ret==3 )
-+ {
-+ pl[0] = args->tmpi[0];
-+ pl[1] = args->tmpi[1];
-+ pl[2] = args->tmpi[2];
-+ }
-+
-+ int i;
-+ for (i=0; i<args->ngrp; i++)
-+ if ( !args->grp[i].flt || filter_test(args->grp[i].flt, rec, NULL)==1 ) break;
-+
-+ if ( args->gvcf.grp != i ) flush_block(args, rec); // new block
-+ if ( args->gvcf.grp >= 0 && args->gvcf.rec->rid != rec->rid ) flush_block(args, NULL); // new chromosome
-+
-+ if ( args->gvcf.grp >= 0 ) // extend an existing block
-+ {
-+ if ( args->gvcf.end < end ) args->gvcf.end = end;
-+ if ( args->gvcf.gq_key!=GQ_KEY_NONE && gq_key!=GQ_KEY_NONE && args->gvcf.gq > gq ) args->gvcf.gq = gq;
-+ if ( args->gvcf.min_dp > min_dp ) args->gvcf.min_dp = min_dp;
-+ if ( args->gvcf.pl[0] > pl[0] ) args->gvcf.pl[0] = pl[0];
-+ if ( args->gvcf.pl[1] > pl[1] ) args->gvcf.pl[1] = pl[1];
-+ if ( args->gvcf.pl[2] > pl[2] ) args->gvcf.pl[2] = pl[2];
-+ return;
-+ }
-+
-+ // start a new block
-+ args->gvcf.rec = bcf_copy(args->gvcf.rec, rec);
-+ args->gvcf.grp = i;
-+ args->gvcf.min_dp = min_dp;
-+ args->gvcf.end = end;
-+ args->gvcf.pl[0] = pl[0];
-+ args->gvcf.pl[1] = pl[1];
-+ args->gvcf.pl[2] = pl[2];
-+ args->gvcf.gq_key = gq_key;
-+ if ( gq_key!=GQ_KEY_NONE ) args->gvcf.gq = gq;
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_type = FT_VCF;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"trim-alt-alleles",required_argument,0,'a'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"group-by",required_argument,NULL,'g'},
-+ {"stats",required_argument,NULL,'s'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "vr:R:t:T:o:O:g:i:e:a",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'a': args->trim_alts = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 'g': args->group_by = optarg; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->group_by ) error("Missing the -g option\n");
-+
-+ args->gvcf.rec = bcf_init();
-+ args->gvcf.grp = -1; // the block is inactive
-+ args->sr = bcf_sr_init();
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr_in = bcf_sr_get_header(args->sr,0);
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr_in, args->filter_str);
-+ init_groups(args);
-+ args->fh_out = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( bcf_hdr_write(args->fh_out, args->hdr_out)!=0 ) error("Failed to write the header\n");
-+ while ( bcf_sr_next_line(args->sr) ) process_gvcf(args);
-+ flush_block(args, NULL);
-+
-+ destroy_data(args);
-+ return 0;
-+}
-+
-+
---- /dev/null
-+++ python-pysam/bcftools/plugins/indel-stats.c
-@@ -0,0 +1,753 @@
-+/* The MIT License
-+
-+ Copyright (c) 2018 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+static int NVAF = 20;
-+static int MAX_LEN = 20;
-+
-+static inline int len2bin(int len)
-+{
-+ if ( len < -MAX_LEN ) return 0;
-+ if ( len > MAX_LEN ) return 2*MAX_LEN;
-+ return MAX_LEN + len;
-+}
-+HTS_UNUSED static inline int bin2len(int bin)
-+{
-+ return bin - MAX_LEN;
-+}
-+static inline int vaf2bin(float vaf)
-+{
-+ return vaf*(NVAF-1);
-+}
-+HTS_UNUSED static inline float bin2vaf(int bin)
-+{
-+ return (float)bin/(NVAF-1);
-+}
-+
-+typedef struct
-+{
-+ uint32_t
-+ *nvaf, // number of indels genotypes with low VAF (<=0.2) and high VAF (>0.2); use vaf2bin and bin2vaf
-+ *nlen, // length distribution (-MAX_LEN,MAX_LEN); use len2bin and bin2len; site-wise unless samples are present
-+ npass_gt, // number of indel genotypes passing the filter
-+ npass, // number of sites passing the filter
-+ nsites, // number of sites total
-+ nins, ndel, // number of insertions and deletions, site-wise, not genotype-wise
-+ nframeshift, ninframe, // site-wise
-+ *nfrac; // number of het indels contributing to dfrac
-+ double
-+ *dfrac; // minor allele fraction at HET indel genotypes, determined from FORMAT/AD
-+}
-+stats_t;
-+
-+typedef struct
-+{
-+ stats_t stats;
-+ filter_t *filter;
-+ char *expr;
-+}
-+flt_stats_t;
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for father, mother and child
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, regions_is_file, targets_is_file;
-+ int nflt_str;
-+ char *filter_str, **flt_str;
-+ char **argv, *output_fname, *fname, *regions, *targets, *csq_tag, *ped_fname;
-+ trio_t *trio;
-+ int ntrio, mtrio;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr;
-+ flt_stats_t *filters;
-+ int nfilters, nsmpl;
-+ char *csq_str;
-+ int32_t *gt_arr, *ad_arr, *ac;
-+ int mgt_arr, mad_arr, mac, mcsq_str;
-+ int ngt, ngt1, nad, nad1;
-+ int allow_alt2ref_DNMs; // is "0/0 0/1 1/1" (child,father,mother) a valid DNM?
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Calculate indel stats scanning over a range of thresholds simultaneously.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Calculates indel stats. Use curly brackets to scan a range of values simultaneously\n"
-+ "Usage: bcftools +indel-stats [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " --alt2ref-DNM consider GT errors such as 0/1 + 1/1 -> 0/0 a valid DNM\n"
-+ " -c, --csq-tag STR VEP or BCSQ tag to determine inframe and frameshift variants [CSQ]\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " --max-len INT maximum indel length to consider [20]\n"
-+ " --nvaf INT number of variant allele frequency bins [20]\n"
-+ " -o, --output FILE output file name [stdout]\n"
-+ " -p, --ped FILE limit the stats to de novo indels\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +indel-stats -i 'GQ>{10,20,30,40,50}' file.bcf\n"
-+ "\n";
-+}
-+
-+static void parse_filters(args_t *args)
-+{
-+ if ( !args->filter_str ) return;
-+ int mflt = 1;
-+ args->nflt_str = 1;
-+ args->flt_str = (char**) malloc(sizeof(char*));
-+ args->flt_str[0] = strdup(args->filter_str);
-+ while (1)
-+ {
-+ int i, expanded = 0;
-+ for (i=args->nflt_str-1; i>=0; i--)
-+ {
-+ char *exp_beg = strchr(args->flt_str[i], '{');
-+ if ( !exp_beg ) continue;
-+ char *exp_end = strchr(exp_beg+1, '}');
-+ if ( !exp_end ) error("Could not parse the expression: %s\n", args->filter_str);
-+ char *beg = exp_beg+1, *mid = beg;
-+ while ( mid<exp_end )
-+ {
-+ while ( mid<exp_end && *mid!=',' ) mid++;
-+ kstring_t tmp = {0,0,0};
-+ kputsn(args->flt_str[i], exp_beg - args->flt_str[i], &tmp);
-+ kputsn(beg, mid - beg, &tmp);
-+ kputs(exp_end+1, &tmp);
-+ args->nflt_str++;
-+ hts_expand(char*, args->nflt_str, mflt, args->flt_str);
-+ args->flt_str[args->nflt_str-1] = tmp.s;
-+ beg = ++mid;
-+ }
-+ expanded = 1;
-+ free(args->flt_str[i]);
-+ memmove(&args->flt_str[i], &args->flt_str[i+1], (args->nflt_str-i-1)*sizeof(*args->flt_str));
-+ args->nflt_str--;
-+ args->flt_str[args->nflt_str] = NULL;
-+ }
-+ if ( !expanded ) break;
-+ }
-+
-+ fprintf(stderr,"Collecting data for %d filtering expressions\n", args->nflt_str);
-+}
-+
-+static int cmp_trios(const void *_a, const void *_b)
-+{
-+ trio_t *a = (trio_t *) _a;
-+ trio_t *b = (trio_t *) _b;
-+ int i;
-+ int amin = a->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( amin > a->idx[i] ) amin = a->idx[i];
-+ int bmin = b->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( bmin > b->idx[i] ) bmin = b->idx[i];
-+ if ( amin < bmin ) return -1;
-+ if ( amin > bmin ) return 1;
-+ return 0;
-+}
-+static void parse_ped(args_t *args, char *fname)
-+{
-+ htsFile *fp = hts_open(fname, "r");
-+ if ( !fp ) error("Could not read: %s\n", fname);
-+
-+ kstring_t str = {0,0,0};
-+ if ( hts_getline(fp, KS_SEP_LINE, &str) <= 0 ) error("Empty file: %s\n", fname);
-+
-+ int moff = 0, *off = NULL;
-+ do
-+ {
-+ // familyID sampleID paternalID maternalID sex phenotype population relationship siblings secondOrder thirdOrder children comment
-+ // BB03 HG01884 HG01885 HG01956 2 0 ACB child 0 0 0 0
-+ int ncols = ksplit_core(str.s,0,&moff,&off);
-+ if ( ncols<4 ) error("Could not parse the ped file: %s\n", str.s);
-+
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[2]]);
-+ if ( father<0 ) continue;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[3]]);
-+ if ( mother<0 ) continue;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[1]]);
-+ if ( child<0 ) continue;
-+
-+ args->ntrio++;
-+ hts_expand0(trio_t,args->ntrio,args->mtrio,args->trio);
-+ trio_t *trio = &args->trio[args->ntrio-1];
-+ trio->idx[iFATHER] = father;
-+ trio->idx[iMOTHER] = mother;
-+ trio->idx[iCHILD] = child;
-+ }
-+ while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-+
-+ fprintf(stderr,"Identified %d complete trios in the VCF file\n", args->ntrio);
-+ if ( !args->ntrio ) error("No complete trio identified\n");
-+
-+ // sort the sample by index so that they are accessed more or less sequentially
-+ qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-+
-+ free(str.s);
-+ free(off);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ if ( args->ped_fname )
-+ parse_ped(args, args->ped_fname);
-+
-+ parse_filters(args);
-+
-+ int i;
-+ if ( !args->nflt_str )
-+ {
-+ args->filters = (flt_stats_t*) calloc(1, sizeof(flt_stats_t));
-+ args->nfilters = 1;
-+ args->filters[0].expr = strdup("all");
-+ args->filters[0].stats.nvaf = (uint32_t*) calloc(NVAF, sizeof(uint32_t));
-+ args->filters[0].stats.nlen = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[0].stats.nfrac = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[0].stats.dfrac = (double*) calloc(MAX_LEN*2+1, sizeof(double));
-+ }
-+ else
-+ {
-+ args->nfilters = args->nflt_str;
-+ args->filters = (flt_stats_t*) calloc(args->nfilters, sizeof(flt_stats_t));
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ args->filters[i].filter = filter_init(args->hdr, args->flt_str[i]);
-+ args->filters[i].expr = strdup(args->flt_str[i]);
-+ args->filters[i].stats.nvaf = (uint32_t*) calloc(NVAF, sizeof(uint32_t));
-+ args->filters[i].stats.nlen = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[i].stats.nfrac = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[i].stats.dfrac = (double*) calloc(MAX_LEN*2+1, sizeof(double));
-+
-+ // replace tab's with spaces so that the output stays parsable
-+ char *tmp = args->filters[i].expr;
-+ while ( *tmp )
-+ {
-+ if ( *tmp=='\t' ) *tmp = ' ';
-+ tmp++;
-+ }
-+ }
-+ }
-+ args->nsmpl = bcf_hdr_nsamples(args->hdr);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ if ( args->filters[i].filter ) filter_destroy(args->filters[i].filter);
-+ free(args->filters[i].stats.nvaf);
-+ free(args->filters[i].stats.nlen);
-+ free(args->filters[i].stats.nfrac);
-+ free(args->filters[i].stats.dfrac);
-+ free(args->filters[i].expr);
-+ }
-+ free(args->filters);
-+ for (i=0; i<args->nflt_str; i++) free(args->flt_str[i]);
-+ free(args->flt_str);
-+ bcf_sr_destroy(args->sr);
-+ free(args->ac);
-+ free(args->trio);
-+ free(args->csq_str);
-+ free(args->gt_arr);
-+ free(args->ad_arr);
-+ free(args);
-+}
-+static void report_stats(args_t *args)
-+{
-+ int i = 0,j;
-+ FILE *fh = !args->output_fname || !strcmp("-",args->output_fname) ? stdout : fopen(args->output_fname,"w");
-+ if ( !fh ) error("Could not open the file for writing: %s\n", args->output_fname);
-+ fprintf(fh,"# CMD line shows the command line used to generate this output\n");
-+ fprintf(fh,"# DEF lines define expressions for all tested thresholds\n");
-+ fprintf(fh,"# SN* summary number for every threshold:\n");
-+ fprintf(fh,"# %d) SN*, filter id\n", ++i);
-+ fprintf(fh,"# %d) number of samples (or trios with -p)\n", ++i);
-+ fprintf(fh,"# %d) number of indel sites total\n", ++i);
-+ fprintf(fh,"# %d) number of indel sites that pass the filter (and, with -p, have a de novo indel)\n", ++i);
-+ fprintf(fh,"# %d) number of indel genotypes that pass the filter (and, with -p, are de novo)\n", ++i);
-+ fprintf(fh,"# %d) number of insertions (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of deletions (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of frameshifts (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of inframe indels (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DVAF* lines report indel variant allele frequency (VAF) distribution for every threshold,\n");
-+ fprintf(fh,"# k-th bin corresponds to the frequency k/(nVAF-1):\n");
-+ fprintf(fh,"# %d) DVAF*, filter id\n", ++i);
-+ fprintf(fh,"# %d) nVAF, number of bins which split the [0,1] VAF interval.\n", ++i);
-+ fprintf(fh,"# %d-%d) counts of indel genotypes in the VAF bin. For non-reference hets, the VAF of the less supported allele is recorded\n", i+1, i+NVAF);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DLEN* lines report indel length distribution for every threshold. When genotype fields are available,\n");
-+ fprintf(fh,"# the counts correspond to the number of genotypes, otherwise the number of sites are given.\n");
-+ fprintf(fh,"# The k-th bin corresponds to the indel size k-MAX_LEN, negative for deletions, positive for insertions.\n");
-+ fprintf(fh,"# The firt/last bin contains also all deletions/insertions larger than MAX_LEN:\n");
-+ fprintf(fh,"# %d) DLEN*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) counts of indel lengths (-max,..,0,..,max), all unique alleles in a genotype are recorded (alt hets increase the counters 2x, alt homs 1x)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DFRAC* lines report the mean minor allele fraction at HET indel genotypes as a function of indel size.\n");
-+ fprintf(fh,"# The format is the same as for DLEN:\n");
-+ fprintf(fh,"# %d) DFRAC*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) mean fraction at indel lengths (-max,..,0,..,max)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# NFRAC* lines report the number of indels informing the DFRAC distribution.\n");
-+ fprintf(fh,"# %d) NFRAC*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) counts at indel lengths (-max,..,0,..,max)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ fprintf(fh, "CMD\t%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) fprintf(fh, " %s",args->argv[i]);
-+ fprintf(fh, "\n");
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ flt_stats_t *flt = &args->filters[i];
-+ fprintf(fh,"DEF\tFLT%d\t%s\n", i, flt->expr);
-+ }
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ stats_t *stats = &args->filters[i].stats;
-+
-+ fprintf(fh,"SN%d", i);
-+ fprintf(fh,"\t%u", args->ntrio ? args->ntrio : args->nsmpl);
-+ fprintf(fh,"\t%u", stats->nsites);
-+ fprintf(fh,"\t%u", stats->npass);
-+ fprintf(fh,"\t%u", stats->npass_gt);
-+ fprintf(fh,"\t%u", stats->nins);
-+ fprintf(fh,"\t%u", stats->ndel);
-+ fprintf(fh,"\t%u", stats->nframeshift);
-+ fprintf(fh,"\t%u", stats->ninframe);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DVAF%d", i);
-+ fprintf(fh,"\t%d", NVAF);
-+ for (j=0; j<NVAF; j++) fprintf(fh,"\t%u",stats->nvaf[j]);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DLEN%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++) fprintf(fh,"\t%u",stats->nlen[j]);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DFRAC%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++)
-+ if ( stats->nfrac[j] ) fprintf(fh,"\t%.2f",stats->dfrac[j]/stats->nfrac[j]);
-+ else fprintf(fh,"\t.");
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"NFRAC%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++) fprintf(fh,"\t%u",stats->nfrac[j]);
-+ fprintf(fh,"\n");
-+ }
-+ if ( fclose(fh)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "stdout" : args->output_fname);
-+}
-+
-+static inline int parse_genotype(int32_t *arr, int ngt1, int idx, int als[2])
-+{
-+ int32_t *ptr = arr + ngt1 * idx;
-+ if ( bcf_gt_is_missing(ptr[0]) ) return -1;
-+ als[0] = bcf_gt_allele(ptr[0]);
-+
-+ if ( ngt1==1 || ptr[1]==bcf_int32_vector_end ) { ptr[1] = ptr[0]; return -2; }
-+
-+ if ( bcf_gt_is_missing(ptr[1]) ) return -1;
-+ als[1] = bcf_gt_allele(ptr[1]);
-+
-+ return 0;
-+}
-+
-+static inline void update_indel_stats(args_t *args, bcf1_t *rec, stats_t *stats, int ismpl, int *als)
-+{
-+ int j;
-+ if ( als[0] >= args->nad1 || als[1] >= args->nad1 ) error("Incorrect GT allele at %s:%"PRId64" .. %d/%d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,als[0],als[1]);
-+ int32_t *ad_ptr = args->ad_arr + ismpl*args->nad1;
-+
-+ // find the allele with most support
-+ uint32_t ntot = 0;
-+ for (j=0; j<args->nad1; j++)
-+ {
-+ if ( ad_ptr[j]==bcf_int32_missing ) continue;
-+ if ( ad_ptr[j]==bcf_int32_vector_end ) break;
-+ ntot += ad_ptr[j];
-+ }
-+ if ( !ntot ) return;
-+
-+ // Find the alternate allele fraction, total and relative. Set al0 to be the more frequent indel allele.
-+ // The genotypes have been already sanitized in parse_genotype().
-+ int al0 = als[0], al1 = als[1];
-+ if ( !(bcf_get_variant_type(rec,al0) & VCF_INDEL) )
-+ {
-+ if ( !(bcf_get_variant_type(rec,al1) & VCF_INDEL) ) error("FIXME: this should not happen .. %s:%"PRId64" .. %d/%d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,al0,al1);
-+ al0 = als[1]; al1 = als[0];
-+ }
-+ else if ( (bcf_get_variant_type(rec,al1) & VCF_INDEL) && al0!=al1 )
-+ {
-+ // Select the more frequent indel allele.
-+ if ( ad_ptr[al0] < ad_ptr[al1] ) al0 = als[1], al1 = als[0];
-+
-+ // Record length of both indel alleles
-+ int bin = len2bin(rec->d.var[al1].n);
-+ if ( bin >= 0 ) stats->nlen[bin]++;
-+ }
-+
-+ float vaf = (float)ad_ptr[al0] / ntot;
-+ int bin = vaf2bin(vaf);
-+ stats->nvaf[bin]++;
-+
-+ // al0 is now the major indel allele
-+ int len_bin = len2bin(rec->d.var[al0].n);
-+ if ( len_bin < 0 ) return;
-+ stats->nlen[len_bin]++;
-+
-+ if ( al0!=al1 )
-+ {
-+ ntot = ad_ptr[al0] + ad_ptr[al1];
-+ if ( ntot )
-+ {
-+ stats->nfrac[len_bin]++;
-+ stats->dfrac[len_bin]+= (double)ad_ptr[al0] / ntot;
-+ }
-+ }
-+}
-+
-+static void process_record(args_t *args, bcf1_t *rec, flt_stats_t *flt)
-+{
-+ int i,j;
-+ uint8_t *smpl_pass = NULL;
-+
-+ stats_t *stats = &flt->stats;
-+ stats->nsites++;
-+
-+ // Find out which samples/trios pass and if the site passes
-+ if ( flt->filter )
-+ {
-+ int pass_site = filter_test(flt->filter, rec, (const uint8_t**) &smpl_pass);
-+ if ( args->ntrio )
-+ {
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ int pass_trio = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int idx = args->trio[i].idx[j];
-+ if ( smpl_pass[idx] ) { pass_trio = 0; break; }
-+ }
-+ args->trio[i].pass = pass_trio;
-+ if ( pass_trio ) pass_site = 1;
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->ntrio; i++) args->trio[i].pass = 1;
-+ }
-+ else if ( !pass_site ) return;
-+ else if ( smpl_pass )
-+ {
-+ pass_site = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ int pass_trio = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int idx = args->trio[i].idx[j];
-+ if ( !smpl_pass[idx] ) { pass_trio = 0; break; }
-+ }
-+ args->trio[i].pass = pass_trio;
-+ if ( pass_trio ) pass_site = 1;
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->ntrio; i++) args->trio[i].pass = 1;
-+ }
-+ else
-+ {
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<args->nsmpl; i++)
-+ {
-+ if ( smpl_pass[i] ) smpl_pass[i] = 0;
-+ else { smpl_pass[i] = 1; pass_site = 1; }
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->nsmpl; i++) smpl_pass[i] = 1;
-+ }
-+ else if ( !pass_site ) return;
-+ }
-+ }
-+
-+ args->ngt = 0;
-+ if ( args->nsmpl )
-+ {
-+ // Get the genotypes
-+ args->ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr);
-+ args->ngt1 = args->ngt / rec->n_sample;
-+
-+ if ( args->ngt>0 )
-+ {
-+ // Get the AD counts
-+ args->nad = bcf_get_format_int32(args->hdr, rec, "AD", &args->ad_arr, &args->mad_arr);
-+ args->nad1 = args->nad / rec->n_sample;
-+ if ( args->nad>0 && args->nad1 != rec->n_allele ) error("Incorrect number of FORMAT/AD values at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ }
-+ }
-+
-+ // Is there a star allele? Don't count overlapping deletions twice
-+ int star_allele = -1;
-+ for (i=1; i<rec->n_allele; i++)
-+ if ( !rec->d.allele[i][1] && rec->d.allele[i][0]=='*' ) { star_allele = i; break; }
-+
-+
-+ if ( args->ngt>0 && args->ntrio )
-+ {
-+ int is_dnm = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ if ( flt->filter && !args->trio[i].pass ) continue;
-+
-+ // Determine the alternate allele and the genotypes, skip if any of the alleles is missing.
-+ // the order is: child, father, mother
-+ int als[6], *als_child = als, *als_father = als+2, *als_mother = als+4;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iCHILD], als_child) < 0 ) continue;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iFATHER], als_father) < 0 ) continue;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iMOTHER], als_mother) < 0 ) continue;
-+
-+ // Is it a DNM?
-+ if ( !args->allow_alt2ref_DNMs && als_child[0]==0 && als_child[1]==0 ) continue;
-+ if ( (als_child[0]==als_father[0] || als_child[0]==als_father[1]) && (als_child[1]==als_mother[0] || als_child[1]==als_mother[1]) ) continue;
-+ if ( (als_child[1]==als_father[0] || als_child[1]==als_father[1]) && (als_child[0]==als_mother[0] || als_child[0]==als_mother[1]) ) continue;
-+ if ( als_child[0]==star_allele || als_child[1]==star_allele ) continue; // don't count the same event multiple times
-+ if ( als_father[0]==star_allele || als_father[1]==star_allele ) continue;
-+ if ( als_mother[0]==star_allele || als_mother[1]==star_allele ) continue;
-+
-+ int child_is_indel = (bcf_get_variant_type(rec,als_child[0]) & VCF_INDEL) || (bcf_get_variant_type(rec,als_child[1]) & VCF_INDEL) ? 1 : 0;
-+
-+ if ( !args->allow_alt2ref_DNMs )
-+ {
-+ if ( !child_is_indel ) continue;
-+ }
-+ else
-+ {
-+ if ( !child_is_indel &&
-+ !(bcf_get_variant_type(rec,als_father[0]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_father[1]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_mother[0]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_mother[1]) & VCF_INDEL) ) continue; // not an indel, in any sample
-+ }
-+
-+ if ( child_is_indel )
-+ update_indel_stats(args, rec, stats, args->trio[i].idx[iCHILD], als_child);
-+
-+ //printf("MERR\t%s\t%d\t%s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[args->trio[i].idx[iCHILD]]);
-+
-+ stats->npass_gt++;
-+
-+ is_dnm = 1;
-+ }
-+ if ( !is_dnm ) return;
-+ }
-+ else if ( args->ngt>0 )
-+ {
-+ for (i=0; i<args->nsmpl; i++)
-+ {
-+ if ( smpl_pass && !smpl_pass[i] ) continue;
-+
-+ // Determine the alternate allele and the genotypes, skip if any of the alleles is missing.
-+ int als[2] = {0,0};
-+ int ret = parse_genotype(args->gt_arr, args->ngt1, i, als);
-+ if ( ret==-1 ) continue; // missing genotype
-+ if ( !(bcf_get_variant_type(rec,als[0]) & VCF_INDEL) && !(bcf_get_variant_type(rec,als[1]) & VCF_INDEL) ) continue; // not an indel
-+
-+ update_indel_stats(args, rec, stats, i, als);
-+
-+ stats->npass_gt++;
-+ }
-+ }
-+
-+ if ( bcf_get_info_string(args->hdr,rec,args->csq_tag,&args->csq_str,&args->mcsq_str) > 0 )
-+ {
-+ if ( strstr(args->csq_str,"inframe") ) stats->ninframe++;
-+ if ( strstr(args->csq_str,"frameshift") ) stats->nframeshift++;
-+ }
-+
-+ for (i=1; i<rec->n_allele; i++)
-+ {
-+ if ( !(bcf_get_variant_type(rec,i) & VCF_INDEL) ) continue;
-+ if ( rec->d.var[i].n < 0 ) stats->ndel++;
-+ else if ( rec->d.var[i].n > 0 ) stats->nins++;
-+ if ( args->ngt <= 0 )
-+ {
-+ int bin = len2bin(rec->d.var[i].n);
-+ if ( bin >= 0 ) stats->nlen[bin]++;
-+ }
-+ }
-+ stats->npass++;
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ args->csq_tag = "CSQ";
-+ static struct option loptions[] =
-+ {
-+ {"max-len",required_argument,0,1},
-+ {"nvaf",required_argument,0,2},
-+ {"alt2ref-DNM",no_argument,0,3},
-+ {"ped",required_argument,0,'p'},
-+ {"csq-tag",required_argument,0,'c'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ char *tmp;
-+ int c, i;
-+ while ((c = getopt_long(argc, argv, "o:s:i:e:r:R:t:T:c:p:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 1 :
-+ MAX_LEN = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --max-len %s\n", optarg);
-+ if ( MAX_LEN<=0 ) error("Expected value bigger than 0 --max-len\n");
-+ break;
-+ case 2 :
-+ NVAF = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --max-len %s\n", optarg);
-+ if ( NVAF<0 || NVAF>1 ) error("Expected value from the interval [0,1] with --nvaf\n");
-+ break;
-+ case 3 : args->allow_alt2ref_DNMs = 1; break;
-+ case 'p': args->ped_fname = optarg; break;
-+ case 'c': args->csq_tag = optarg; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s",usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s",usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ {
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+ if ( !(bcf_get_variant_types(rec) & VCF_INDEL) ) continue;
-+ for (i=0; i<args->nfilters; i++)
-+ process_record(args, rec, &args->filters[i]);
-+ }
-+
-+ report_stats(args);
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/indel-stats.c.pysam.c
-@@ -0,0 +1,755 @@
-+#include "bcftools.pysam.h"
-+
-+/* The MIT License
-+
-+ Copyright (c) 2018 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+static int NVAF = 20;
-+static int MAX_LEN = 20;
-+
-+static inline int len2bin(int len)
-+{
-+ if ( len < -MAX_LEN ) return 0;
-+ if ( len > MAX_LEN ) return 2*MAX_LEN;
-+ return MAX_LEN + len;
-+}
-+HTS_UNUSED static inline int bin2len(int bin)
-+{
-+ return bin - MAX_LEN;
-+}
-+static inline int vaf2bin(float vaf)
-+{
-+ return vaf*(NVAF-1);
-+}
-+HTS_UNUSED static inline float bin2vaf(int bin)
-+{
-+ return (float)bin/(NVAF-1);
-+}
-+
-+typedef struct
-+{
-+ uint32_t
-+ *nvaf, // number of indels genotypes with low VAF (<=0.2) and high VAF (>0.2); use vaf2bin and bin2vaf
-+ *nlen, // length distribution (-MAX_LEN,MAX_LEN); use len2bin and bin2len; site-wise unless samples are present
-+ npass_gt, // number of indel genotypes passing the filter
-+ npass, // number of sites passing the filter
-+ nsites, // number of sites total
-+ nins, ndel, // number of insertions and deletions, site-wise, not genotype-wise
-+ nframeshift, ninframe, // site-wise
-+ *nfrac; // number of het indels contributing to dfrac
-+ double
-+ *dfrac; // minor allele fraction at HET indel genotypes, determined from FORMAT/AD
-+}
-+stats_t;
-+
-+typedef struct
-+{
-+ stats_t stats;
-+ filter_t *filter;
-+ char *expr;
-+}
-+flt_stats_t;
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for father, mother and child
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, regions_is_file, targets_is_file;
-+ int nflt_str;
-+ char *filter_str, **flt_str;
-+ char **argv, *output_fname, *fname, *regions, *targets, *csq_tag, *ped_fname;
-+ trio_t *trio;
-+ int ntrio, mtrio;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr;
-+ flt_stats_t *filters;
-+ int nfilters, nsmpl;
-+ char *csq_str;
-+ int32_t *gt_arr, *ad_arr, *ac;
-+ int mgt_arr, mad_arr, mac, mcsq_str;
-+ int ngt, ngt1, nad, nad1;
-+ int allow_alt2ref_DNMs; // is "0/0 0/1 1/1" (child,father,mother) a valid DNM?
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Calculate indel stats scanning over a range of thresholds simultaneously.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Calculates indel stats. Use curly brackets to scan a range of values simultaneously\n"
-+ "Usage: bcftools +indel-stats [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " --alt2ref-DNM consider GT errors such as 0/1 + 1/1 -> 0/0 a valid DNM\n"
-+ " -c, --csq-tag STR VEP or BCSQ tag to determine inframe and frameshift variants [CSQ]\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " --max-len INT maximum indel length to consider [20]\n"
-+ " --nvaf INT number of variant allele frequency bins [20]\n"
-+ " -o, --output FILE output file name [bcftools_stdout]\n"
-+ " -p, --ped FILE limit the stats to de novo indels\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +indel-stats -i 'GQ>{10,20,30,40,50}' file.bcf\n"
-+ "\n";
-+}
-+
-+static void parse_filters(args_t *args)
-+{
-+ if ( !args->filter_str ) return;
-+ int mflt = 1;
-+ args->nflt_str = 1;
-+ args->flt_str = (char**) malloc(sizeof(char*));
-+ args->flt_str[0] = strdup(args->filter_str);
-+ while (1)
-+ {
-+ int i, expanded = 0;
-+ for (i=args->nflt_str-1; i>=0; i--)
-+ {
-+ char *exp_beg = strchr(args->flt_str[i], '{');
-+ if ( !exp_beg ) continue;
-+ char *exp_end = strchr(exp_beg+1, '}');
-+ if ( !exp_end ) error("Could not parse the expression: %s\n", args->filter_str);
-+ char *beg = exp_beg+1, *mid = beg;
-+ while ( mid<exp_end )
-+ {
-+ while ( mid<exp_end && *mid!=',' ) mid++;
-+ kstring_t tmp = {0,0,0};
-+ kputsn(args->flt_str[i], exp_beg - args->flt_str[i], &tmp);
-+ kputsn(beg, mid - beg, &tmp);
-+ kputs(exp_end+1, &tmp);
-+ args->nflt_str++;
-+ hts_expand(char*, args->nflt_str, mflt, args->flt_str);
-+ args->flt_str[args->nflt_str-1] = tmp.s;
-+ beg = ++mid;
-+ }
-+ expanded = 1;
-+ free(args->flt_str[i]);
-+ memmove(&args->flt_str[i], &args->flt_str[i+1], (args->nflt_str-i-1)*sizeof(*args->flt_str));
-+ args->nflt_str--;
-+ args->flt_str[args->nflt_str] = NULL;
-+ }
-+ if ( !expanded ) break;
-+ }
-+
-+ fprintf(bcftools_stderr,"Collecting data for %d filtering expressions\n", args->nflt_str);
-+}
-+
-+static int cmp_trios(const void *_a, const void *_b)
-+{
-+ trio_t *a = (trio_t *) _a;
-+ trio_t *b = (trio_t *) _b;
-+ int i;
-+ int amin = a->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( amin > a->idx[i] ) amin = a->idx[i];
-+ int bmin = b->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( bmin > b->idx[i] ) bmin = b->idx[i];
-+ if ( amin < bmin ) return -1;
-+ if ( amin > bmin ) return 1;
-+ return 0;
-+}
-+static void parse_ped(args_t *args, char *fname)
-+{
-+ htsFile *fp = hts_open(fname, "r");
-+ if ( !fp ) error("Could not read: %s\n", fname);
-+
-+ kstring_t str = {0,0,0};
-+ if ( hts_getline(fp, KS_SEP_LINE, &str) <= 0 ) error("Empty file: %s\n", fname);
-+
-+ int moff = 0, *off = NULL;
-+ do
-+ {
-+ // familyID sampleID paternalID maternalID sex phenotype population relationship siblings secondOrder thirdOrder children comment
-+ // BB03 HG01884 HG01885 HG01956 2 0 ACB child 0 0 0 0
-+ int ncols = ksplit_core(str.s,0,&moff,&off);
-+ if ( ncols<4 ) error("Could not parse the ped file: %s\n", str.s);
-+
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[2]]);
-+ if ( father<0 ) continue;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[3]]);
-+ if ( mother<0 ) continue;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[1]]);
-+ if ( child<0 ) continue;
-+
-+ args->ntrio++;
-+ hts_expand0(trio_t,args->ntrio,args->mtrio,args->trio);
-+ trio_t *trio = &args->trio[args->ntrio-1];
-+ trio->idx[iFATHER] = father;
-+ trio->idx[iMOTHER] = mother;
-+ trio->idx[iCHILD] = child;
-+ }
-+ while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-+
-+ fprintf(bcftools_stderr,"Identified %d complete trios in the VCF file\n", args->ntrio);
-+ if ( !args->ntrio ) error("No complete trio identified\n");
-+
-+ // sort the sample by index so that they are accessed more or less sequentially
-+ qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-+
-+ free(str.s);
-+ free(off);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ if ( args->ped_fname )
-+ parse_ped(args, args->ped_fname);
-+
-+ parse_filters(args);
-+
-+ int i;
-+ if ( !args->nflt_str )
-+ {
-+ args->filters = (flt_stats_t*) calloc(1, sizeof(flt_stats_t));
-+ args->nfilters = 1;
-+ args->filters[0].expr = strdup("all");
-+ args->filters[0].stats.nvaf = (uint32_t*) calloc(NVAF, sizeof(uint32_t));
-+ args->filters[0].stats.nlen = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[0].stats.nfrac = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[0].stats.dfrac = (double*) calloc(MAX_LEN*2+1, sizeof(double));
-+ }
-+ else
-+ {
-+ args->nfilters = args->nflt_str;
-+ args->filters = (flt_stats_t*) calloc(args->nfilters, sizeof(flt_stats_t));
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ args->filters[i].filter = filter_init(args->hdr, args->flt_str[i]);
-+ args->filters[i].expr = strdup(args->flt_str[i]);
-+ args->filters[i].stats.nvaf = (uint32_t*) calloc(NVAF, sizeof(uint32_t));
-+ args->filters[i].stats.nlen = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[i].stats.nfrac = (uint32_t*) calloc(MAX_LEN*2+1, sizeof(uint32_t));
-+ args->filters[i].stats.dfrac = (double*) calloc(MAX_LEN*2+1, sizeof(double));
-+
-+ // replace tab's with spaces so that the output stays parsable
-+ char *tmp = args->filters[i].expr;
-+ while ( *tmp )
-+ {
-+ if ( *tmp=='\t' ) *tmp = ' ';
-+ tmp++;
-+ }
-+ }
-+ }
-+ args->nsmpl = bcf_hdr_nsamples(args->hdr);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ if ( args->filters[i].filter ) filter_destroy(args->filters[i].filter);
-+ free(args->filters[i].stats.nvaf);
-+ free(args->filters[i].stats.nlen);
-+ free(args->filters[i].stats.nfrac);
-+ free(args->filters[i].stats.dfrac);
-+ free(args->filters[i].expr);
-+ }
-+ free(args->filters);
-+ for (i=0; i<args->nflt_str; i++) free(args->flt_str[i]);
-+ free(args->flt_str);
-+ bcf_sr_destroy(args->sr);
-+ free(args->ac);
-+ free(args->trio);
-+ free(args->csq_str);
-+ free(args->gt_arr);
-+ free(args->ad_arr);
-+ free(args);
-+}
-+static void report_stats(args_t *args)
-+{
-+ int i = 0,j;
-+ FILE *fh = !args->output_fname || !strcmp("-",args->output_fname) ? bcftools_stdout : fopen(args->output_fname,"w");
-+ if ( !fh ) error("Could not open the file for writing: %s\n", args->output_fname);
-+ fprintf(fh,"# CMD line shows the command line used to generate this output\n");
-+ fprintf(fh,"# DEF lines define expressions for all tested thresholds\n");
-+ fprintf(fh,"# SN* summary number for every threshold:\n");
-+ fprintf(fh,"# %d) SN*, filter id\n", ++i);
-+ fprintf(fh,"# %d) number of samples (or trios with -p)\n", ++i);
-+ fprintf(fh,"# %d) number of indel sites total\n", ++i);
-+ fprintf(fh,"# %d) number of indel sites that pass the filter (and, with -p, have a de novo indel)\n", ++i);
-+ fprintf(fh,"# %d) number of indel genotypes that pass the filter (and, with -p, are de novo)\n", ++i);
-+ fprintf(fh,"# %d) number of insertions (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of deletions (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of frameshifts (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"# %d) number of inframe indels (site-wise, not genotype-wise)\n", ++i);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DVAF* lines report indel variant allele frequency (VAF) distribution for every threshold,\n");
-+ fprintf(fh,"# k-th bin corresponds to the frequency k/(nVAF-1):\n");
-+ fprintf(fh,"# %d) DVAF*, filter id\n", ++i);
-+ fprintf(fh,"# %d) nVAF, number of bins which split the [0,1] VAF interval.\n", ++i);
-+ fprintf(fh,"# %d-%d) counts of indel genotypes in the VAF bin. For non-reference hets, the VAF of the less supported allele is recorded\n", i+1, i+NVAF);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DLEN* lines report indel length distribution for every threshold. When genotype fields are available,\n");
-+ fprintf(fh,"# the counts correspond to the number of genotypes, otherwise the number of sites are given.\n");
-+ fprintf(fh,"# The k-th bin corresponds to the indel size k-MAX_LEN, negative for deletions, positive for insertions.\n");
-+ fprintf(fh,"# The firt/last bin contains also all deletions/insertions larger than MAX_LEN:\n");
-+ fprintf(fh,"# %d) DLEN*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) counts of indel lengths (-max,..,0,..,max), all unique alleles in a genotype are recorded (alt hets increase the counters 2x, alt homs 1x)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# DFRAC* lines report the mean minor allele fraction at HET indel genotypes as a function of indel size.\n");
-+ fprintf(fh,"# The format is the same as for DLEN:\n");
-+ fprintf(fh,"# %d) DFRAC*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) mean fraction at indel lengths (-max,..,0,..,max)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ i = 0;
-+ fprintf(fh,"# NFRAC* lines report the number of indels informing the DFRAC distribution.\n");
-+ fprintf(fh,"# %d) NFRAC*, filter id\n", ++i);
-+ fprintf(fh,"# %d) maximum indel length\n", ++i);
-+ fprintf(fh,"# %d-%d) counts at indel lengths (-max,..,0,..,max)\n", i+1, i+MAX_LEN*2+1);
-+ fprintf(fh,"#\n");
-+ fprintf(fh, "CMD\t%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) fprintf(fh, " %s",args->argv[i]);
-+ fprintf(fh, "\n");
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ flt_stats_t *flt = &args->filters[i];
-+ fprintf(fh,"DEF\tFLT%d\t%s\n", i, flt->expr);
-+ }
-+ for (i=0; i<args->nfilters; i++)
-+ {
-+ stats_t *stats = &args->filters[i].stats;
-+
-+ fprintf(fh,"SN%d", i);
-+ fprintf(fh,"\t%u", args->ntrio ? args->ntrio : args->nsmpl);
-+ fprintf(fh,"\t%u", stats->nsites);
-+ fprintf(fh,"\t%u", stats->npass);
-+ fprintf(fh,"\t%u", stats->npass_gt);
-+ fprintf(fh,"\t%u", stats->nins);
-+ fprintf(fh,"\t%u", stats->ndel);
-+ fprintf(fh,"\t%u", stats->nframeshift);
-+ fprintf(fh,"\t%u", stats->ninframe);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DVAF%d", i);
-+ fprintf(fh,"\t%d", NVAF);
-+ for (j=0; j<NVAF; j++) fprintf(fh,"\t%u",stats->nvaf[j]);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DLEN%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++) fprintf(fh,"\t%u",stats->nlen[j]);
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"DFRAC%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++)
-+ if ( stats->nfrac[j] ) fprintf(fh,"\t%.2f",stats->dfrac[j]/stats->nfrac[j]);
-+ else fprintf(fh,"\t.");
-+ fprintf(fh,"\n");
-+
-+ fprintf(fh,"NFRAC%d", i);
-+ fprintf(fh,"\t%d", MAX_LEN);
-+ for (j=0; j<MAX_LEN*2+1; j++) fprintf(fh,"\t%u",stats->nfrac[j]);
-+ fprintf(fh,"\n");
-+ }
-+ if ( fclose(fh)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "bcftools_stdout" : args->output_fname);
-+}
-+
-+static inline int parse_genotype(int32_t *arr, int ngt1, int idx, int als[2])
-+{
-+ int32_t *ptr = arr + ngt1 * idx;
-+ if ( bcf_gt_is_missing(ptr[0]) ) return -1;
-+ als[0] = bcf_gt_allele(ptr[0]);
-+
-+ if ( ngt1==1 || ptr[1]==bcf_int32_vector_end ) { ptr[1] = ptr[0]; return -2; }
-+
-+ if ( bcf_gt_is_missing(ptr[1]) ) return -1;
-+ als[1] = bcf_gt_allele(ptr[1]);
-+
-+ return 0;
-+}
-+
-+static inline void update_indel_stats(args_t *args, bcf1_t *rec, stats_t *stats, int ismpl, int *als)
-+{
-+ int j;
-+ if ( als[0] >= args->nad1 || als[1] >= args->nad1 ) error("Incorrect GT allele at %s:%"PRId64" .. %d/%d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,als[0],als[1]);
-+ int32_t *ad_ptr = args->ad_arr + ismpl*args->nad1;
-+
-+ // find the allele with most support
-+ uint32_t ntot = 0;
-+ for (j=0; j<args->nad1; j++)
-+ {
-+ if ( ad_ptr[j]==bcf_int32_missing ) continue;
-+ if ( ad_ptr[j]==bcf_int32_vector_end ) break;
-+ ntot += ad_ptr[j];
-+ }
-+ if ( !ntot ) return;
-+
-+ // Find the alternate allele fraction, total and relative. Set al0 to be the more frequent indel allele.
-+ // The genotypes have been already sanitized in parse_genotype().
-+ int al0 = als[0], al1 = als[1];
-+ if ( !(bcf_get_variant_type(rec,al0) & VCF_INDEL) )
-+ {
-+ if ( !(bcf_get_variant_type(rec,al1) & VCF_INDEL) ) error("FIXME: this should not happen .. %s:%"PRId64" .. %d/%d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,al0,al1);
-+ al0 = als[1]; al1 = als[0];
-+ }
-+ else if ( (bcf_get_variant_type(rec,al1) & VCF_INDEL) && al0!=al1 )
-+ {
-+ // Select the more frequent indel allele.
-+ if ( ad_ptr[al0] < ad_ptr[al1] ) al0 = als[1], al1 = als[0];
-+
-+ // Record length of both indel alleles
-+ int bin = len2bin(rec->d.var[al1].n);
-+ if ( bin >= 0 ) stats->nlen[bin]++;
-+ }
-+
-+ float vaf = (float)ad_ptr[al0] / ntot;
-+ int bin = vaf2bin(vaf);
-+ stats->nvaf[bin]++;
-+
-+ // al0 is now the major indel allele
-+ int len_bin = len2bin(rec->d.var[al0].n);
-+ if ( len_bin < 0 ) return;
-+ stats->nlen[len_bin]++;
-+
-+ if ( al0!=al1 )
-+ {
-+ ntot = ad_ptr[al0] + ad_ptr[al1];
-+ if ( ntot )
-+ {
-+ stats->nfrac[len_bin]++;
-+ stats->dfrac[len_bin]+= (double)ad_ptr[al0] / ntot;
-+ }
-+ }
-+}
-+
-+static void process_record(args_t *args, bcf1_t *rec, flt_stats_t *flt)
-+{
-+ int i,j;
-+ uint8_t *smpl_pass = NULL;
-+
-+ stats_t *stats = &flt->stats;
-+ stats->nsites++;
-+
-+ // Find out which samples/trios pass and if the site passes
-+ if ( flt->filter )
-+ {
-+ int pass_site = filter_test(flt->filter, rec, (const uint8_t**) &smpl_pass);
-+ if ( args->ntrio )
-+ {
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ int pass_trio = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int idx = args->trio[i].idx[j];
-+ if ( smpl_pass[idx] ) { pass_trio = 0; break; }
-+ }
-+ args->trio[i].pass = pass_trio;
-+ if ( pass_trio ) pass_site = 1;
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->ntrio; i++) args->trio[i].pass = 1;
-+ }
-+ else if ( !pass_site ) return;
-+ else if ( smpl_pass )
-+ {
-+ pass_site = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ int pass_trio = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int idx = args->trio[i].idx[j];
-+ if ( !smpl_pass[idx] ) { pass_trio = 0; break; }
-+ }
-+ args->trio[i].pass = pass_trio;
-+ if ( pass_trio ) pass_site = 1;
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->ntrio; i++) args->trio[i].pass = 1;
-+ }
-+ else
-+ {
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<args->nsmpl; i++)
-+ {
-+ if ( smpl_pass[i] ) smpl_pass[i] = 0;
-+ else { smpl_pass[i] = 1; pass_site = 1; }
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<args->nsmpl; i++) smpl_pass[i] = 1;
-+ }
-+ else if ( !pass_site ) return;
-+ }
-+ }
-+
-+ args->ngt = 0;
-+ if ( args->nsmpl )
-+ {
-+ // Get the genotypes
-+ args->ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr);
-+ args->ngt1 = args->ngt / rec->n_sample;
-+
-+ if ( args->ngt>0 )
-+ {
-+ // Get the AD counts
-+ args->nad = bcf_get_format_int32(args->hdr, rec, "AD", &args->ad_arr, &args->mad_arr);
-+ args->nad1 = args->nad / rec->n_sample;
-+ if ( args->nad>0 && args->nad1 != rec->n_allele ) error("Incorrect number of FORMAT/AD values at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ }
-+ }
-+
-+ // Is there a star allele? Don't count overlapping deletions twice
-+ int star_allele = -1;
-+ for (i=1; i<rec->n_allele; i++)
-+ if ( !rec->d.allele[i][1] && rec->d.allele[i][0]=='*' ) { star_allele = i; break; }
-+
-+
-+ if ( args->ngt>0 && args->ntrio )
-+ {
-+ int is_dnm = 0;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ if ( flt->filter && !args->trio[i].pass ) continue;
-+
-+ // Determine the alternate allele and the genotypes, skip if any of the alleles is missing.
-+ // the order is: child, father, mother
-+ int als[6], *als_child = als, *als_father = als+2, *als_mother = als+4;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iCHILD], als_child) < 0 ) continue;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iFATHER], als_father) < 0 ) continue;
-+ if ( parse_genotype(args->gt_arr, args->ngt1, args->trio[i].idx[iMOTHER], als_mother) < 0 ) continue;
-+
-+ // Is it a DNM?
-+ if ( !args->allow_alt2ref_DNMs && als_child[0]==0 && als_child[1]==0 ) continue;
-+ if ( (als_child[0]==als_father[0] || als_child[0]==als_father[1]) && (als_child[1]==als_mother[0] || als_child[1]==als_mother[1]) ) continue;
-+ if ( (als_child[1]==als_father[0] || als_child[1]==als_father[1]) && (als_child[0]==als_mother[0] || als_child[0]==als_mother[1]) ) continue;
-+ if ( als_child[0]==star_allele || als_child[1]==star_allele ) continue; // don't count the same event multiple times
-+ if ( als_father[0]==star_allele || als_father[1]==star_allele ) continue;
-+ if ( als_mother[0]==star_allele || als_mother[1]==star_allele ) continue;
-+
-+ int child_is_indel = (bcf_get_variant_type(rec,als_child[0]) & VCF_INDEL) || (bcf_get_variant_type(rec,als_child[1]) & VCF_INDEL) ? 1 : 0;
-+
-+ if ( !args->allow_alt2ref_DNMs )
-+ {
-+ if ( !child_is_indel ) continue;
-+ }
-+ else
-+ {
-+ if ( !child_is_indel &&
-+ !(bcf_get_variant_type(rec,als_father[0]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_father[1]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_mother[0]) & VCF_INDEL) &&
-+ !(bcf_get_variant_type(rec,als_mother[1]) & VCF_INDEL) ) continue; // not an indel, in any sample
-+ }
-+
-+ if ( child_is_indel )
-+ update_indel_stats(args, rec, stats, args->trio[i].idx[iCHILD], als_child);
-+
-+ //printf("MERR\t%s\t%d\t%s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[args->trio[i].idx[iCHILD]]);
-+
-+ stats->npass_gt++;
-+
-+ is_dnm = 1;
-+ }
-+ if ( !is_dnm ) return;
-+ }
-+ else if ( args->ngt>0 )
-+ {
-+ for (i=0; i<args->nsmpl; i++)
-+ {
-+ if ( smpl_pass && !smpl_pass[i] ) continue;
-+
-+ // Determine the alternate allele and the genotypes, skip if any of the alleles is missing.
-+ int als[2] = {0,0};
-+ int ret = parse_genotype(args->gt_arr, args->ngt1, i, als);
-+ if ( ret==-1 ) continue; // missing genotype
-+ if ( !(bcf_get_variant_type(rec,als[0]) & VCF_INDEL) && !(bcf_get_variant_type(rec,als[1]) & VCF_INDEL) ) continue; // not an indel
-+
-+ update_indel_stats(args, rec, stats, i, als);
-+
-+ stats->npass_gt++;
-+ }
-+ }
-+
-+ if ( bcf_get_info_string(args->hdr,rec,args->csq_tag,&args->csq_str,&args->mcsq_str) > 0 )
-+ {
-+ if ( strstr(args->csq_str,"inframe") ) stats->ninframe++;
-+ if ( strstr(args->csq_str,"frameshift") ) stats->nframeshift++;
-+ }
-+
-+ for (i=1; i<rec->n_allele; i++)
-+ {
-+ if ( !(bcf_get_variant_type(rec,i) & VCF_INDEL) ) continue;
-+ if ( rec->d.var[i].n < 0 ) stats->ndel++;
-+ else if ( rec->d.var[i].n > 0 ) stats->nins++;
-+ if ( args->ngt <= 0 )
-+ {
-+ int bin = len2bin(rec->d.var[i].n);
-+ if ( bin >= 0 ) stats->nlen[bin]++;
-+ }
-+ }
-+ stats->npass++;
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ args->csq_tag = "CSQ";
-+ static struct option loptions[] =
-+ {
-+ {"max-len",required_argument,0,1},
-+ {"nvaf",required_argument,0,2},
-+ {"alt2ref-DNM",no_argument,0,3},
-+ {"ped",required_argument,0,'p'},
-+ {"csq-tag",required_argument,0,'c'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ char *tmp;
-+ int c, i;
-+ while ((c = getopt_long(argc, argv, "o:s:i:e:r:R:t:T:c:p:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 1 :
-+ MAX_LEN = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --max-len %s\n", optarg);
-+ if ( MAX_LEN<=0 ) error("Expected value bigger than 0 --max-len\n");
-+ break;
-+ case 2 :
-+ NVAF = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --max-len %s\n", optarg);
-+ if ( NVAF<0 || NVAF>1 ) error("Expected value from the interval [0,1] with --nvaf\n");
-+ break;
-+ case 3 : args->allow_alt2ref_DNMs = 1; break;
-+ case 'p': args->ped_fname = optarg; break;
-+ case 'c': args->csq_tag = optarg; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s",usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s",usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ {
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+ if ( !(bcf_get_variant_types(rec) & VCF_INDEL) ) continue;
-+ for (i=0; i<args->nfilters; i++)
-+ process_record(args, rec, &args->filters[i]);
-+ }
-+
-+ report_stats(args);
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- python-pysam.orig/bcftools/plugins/isecGT.c
-+++ python-pysam/bcftools/plugins/isecGT.c
-@@ -131,14 +131,14 @@
- smpl_ilist_t *smpl = smpl_ilist_map(args->hdr_a, args->hdr_b, SMPL_STRICT);
- args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- bcf_hdr_write(args->out_fh, args->hdr_a);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_a)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- while ( bcf_sr_next_line(args->sr) )
- {
- if ( !bcf_sr_has_line(args->sr,0) ) continue;
- if ( !bcf_sr_has_line(args->sr,1) )
- {
-- bcf_write(args->out_fh, args->hdr_a, bcf_sr_get_line(args->sr,0));
-+ if ( bcf_write(args->out_fh, args->hdr_a, bcf_sr_get_line(args->sr,0))!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- continue;
- }
-
-@@ -163,7 +163,7 @@
- }
- }
- if ( dirty ) bcf_update_genotypes(args->hdr_a, line_a, args->arr_a, ngt_a*smpl->n);
-- bcf_write(args->out_fh, args->hdr_a, line_a);
-+ if ( bcf_write(args->out_fh, args->hdr_a, line_a)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
-
- if ( hts_close(args->out_fh)!=0 ) error("Close failed: %s\n",args->output_fname);
---- python-pysam.orig/bcftools/plugins/isecGT.c.pysam.c
-+++ python-pysam/bcftools/plugins/isecGT.c.pysam.c
-@@ -133,14 +133,14 @@
- smpl_ilist_t *smpl = smpl_ilist_map(args->hdr_a, args->hdr_b, SMPL_STRICT);
- args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- bcf_hdr_write(args->out_fh, args->hdr_a);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_a)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- while ( bcf_sr_next_line(args->sr) )
- {
- if ( !bcf_sr_has_line(args->sr,0) ) continue;
- if ( !bcf_sr_has_line(args->sr,1) )
- {
-- bcf_write(args->out_fh, args->hdr_a, bcf_sr_get_line(args->sr,0));
-+ if ( bcf_write(args->out_fh, args->hdr_a, bcf_sr_get_line(args->sr,0))!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- continue;
- }
-
-@@ -165,7 +165,7 @@
- }
- }
- if ( dirty ) bcf_update_genotypes(args->hdr_a, line_a, args->arr_a, ngt_a*smpl->n);
-- bcf_write(args->out_fh, args->hdr_a, line_a);
-+ if ( bcf_write(args->out_fh, args->hdr_a, line_a)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
-
- if ( hts_close(args->out_fh)!=0 ) error("Close failed: %s\n",args->output_fname);
---- python-pysam.orig/bcftools/plugins/mendelian.c
-+++ python-pysam/bcftools/plugins/mendelian.c
-@@ -1,6 +1,6 @@
- /* The MIT License
-
-- Copyright (c) 2015 Genome Research Ltd.
-+ Copyright (c) 2015-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -27,16 +27,18 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <errno.h>
- #include <ctype.h>
- #include <unistd.h> // for isatty
--#include "bcftools.h"
--#include "regidx.h"
-+#include "../bcftools.h"
-+#include "../regidx.h"
-
- #define MODE_COUNT 1
- #define MODE_LIST_GOOD 2
-@@ -148,7 +150,7 @@
- " -r, --rules <assembly>[?] predefined rules, 'list' to print available settings, append '?' for details\n"
- " -R, --rules-file <file> inheritance rules, see example below\n"
- " -t, --trio <m,f,c> names of mother, father and the child\n"
-- " -T, --trio-file <file> list of trios, one per line\n"
-+ " -T, --trio-file <file> list of trios, one per line (mother,father,child)\n"
- "\n"
- "Example:\n"
- " # Default inheritance patterns, override with -r\n"
-@@ -363,13 +365,22 @@
- if ( !args.mode ) error("Expected one of the -c, -d or -l options\n");
- if ( args.mode&MODE_DELETE && !(args.mode&(MODE_LIST_GOOD|MODE_LIST_BAD)) ) args.mode |= MODE_LIST_GOOD|MODE_LIST_BAD;
-
-+ FILE *log_fh = stderr;
-+ if ( args.mode==MODE_COUNT )
-+ {
-+ log_fh = strcmp("-",args.output_fname) ? fopen(args.output_fname,"w") : stdout;
-+ if ( !log_fh ) error("Error: cannot write to %s\n", args.output_fname);
-+ }
-+
- args.sr = bcf_sr_init();
-- if ( !bcf_sr_add_reader(args.sr, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args.sr->errnum));
-+ if ( !bcf_sr_add_reader(args.sr, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args.sr->errnum));
- args.hdr = bcf_sr_get_header(args.sr, 0);
-- args.out_fh = hts_open(args.output_fname,hts_bcf_wmode(args.output_type));
-- if ( args.out_fh == NULL ) error("Can't write to \"%s\": %s\n", args.output_fname, strerror(errno));
-- bcf_hdr_write(args.out_fh, args.hdr);
--
-+ if ( args.mode!=MODE_COUNT )
-+ {
-+ args.out_fh = hts_open(args.output_fname,hts_bcf_wmode(args.output_type));
-+ if ( args.out_fh == NULL ) error("Can't write to \"%s\": %s\n", args.output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args.out_fh, args.hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args.output_fname);
-+ }
-
- int i, n = 0;
- char **list;
-@@ -420,29 +431,30 @@
- if ( line )
- {
- if ( line->errcode ) error("TODO: Unchecked error (%d), exiting\n",line->errcode);
-- bcf_write1(args.out_fh, args.hdr, line);
-+ if ( args.out_fh && bcf_write1(args.out_fh, args.hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args.output_fname);
- }
- }
-+ if ( args.out_fh && hts_close(args.out_fh)!=0 ) error("Error: close failed\n");
-
--
-- fprintf(stderr,"# [1]nOK\t[2]nBad\t[3]nSkipped\t[4]Trio\n");
-+ fprintf(log_fh,"# [1]nOK\t[2]nBad\t[3]nSkipped\t[4]Trio (mother,father,child)\n");
- for (i=0; i<args.ntrios; i++)
- {
- trio_t *trio = &args.trios[i];
-- fprintf(stderr,"%d\t%d\t%d\t%s,%s,%s\n",
-+ fprintf(log_fh,"%d\t%d\t%d\t%s,%s,%s\n",
- trio->nok,trio->nbad,args.nrec-(trio->nok+trio->nbad),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->imother),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->ifather),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->ichild)
- );
- }
-+ if ( log_fh!=stderr && log_fh!=stdout && fclose(log_fh) ) error("Error: close failed for %s\n", args.output_fname);
-+
- free(args.gt_arr);
- free(args.trios);
- regitr_destroy(args.itr);
- regitr_destroy(args.itr_ori);
- regidx_destroy(args.rules);
- bcf_sr_destroy(args.sr);
-- if ( hts_close(args.out_fh)!=0 ) error("Error: close failed\n");
- return 0;
- }
-
-@@ -450,7 +462,7 @@
- {
- static int warned = 0;
- if ( warned ) return;
-- fprintf(stderr,"Incorrect ploidy at %s:%d, skipping the trio. (This warning is printed only once.)\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ fprintf(stderr,"Incorrect ploidy at %s:%"PRId64", skipping the trio. (This warning is printed only once.)\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
-
-@@ -555,7 +567,7 @@
- }
-
- if ( needs_update && bcf_update_genotypes(args.hdr,rec,args.gt_arr,ngt*bcf_hdr_nsamples(args.hdr)) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-
- if ( args.mode&MODE_DELETE ) return rec;
- if ( args.mode&MODE_LIST_GOOD ) return has_bad ? NULL : rec;
---- python-pysam.orig/bcftools/plugins/mendelian.c.pysam.c
-+++ python-pysam/bcftools/plugins/mendelian.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* The MIT License
-
-- Copyright (c) 2015 Genome Research Ltd.
-+ Copyright (c) 2015-2018 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -29,16 +29,18 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <errno.h>
- #include <ctype.h>
- #include <unistd.h> // for isatty
--#include "bcftools.h"
--#include "regidx.h"
-+#include "../bcftools.h"
-+#include "../regidx.h"
-
- #define MODE_COUNT 1
- #define MODE_LIST_GOOD 2
-@@ -150,7 +152,7 @@
- " -r, --rules <assembly>[?] predefined rules, 'list' to print available settings, append '?' for details\n"
- " -R, --rules-file <file> inheritance rules, see example below\n"
- " -t, --trio <m,f,c> names of mother, father and the child\n"
-- " -T, --trio-file <file> list of trios, one per line\n"
-+ " -T, --trio-file <file> list of trios, one per line (mother,father,child)\n"
- "\n"
- "Example:\n"
- " # Default inheritance patterns, override with -r\n"
-@@ -365,13 +367,22 @@
- if ( !args.mode ) error("Expected one of the -c, -d or -l options\n");
- if ( args.mode&MODE_DELETE && !(args.mode&(MODE_LIST_GOOD|MODE_LIST_BAD)) ) args.mode |= MODE_LIST_GOOD|MODE_LIST_BAD;
-
-+ FILE *log_fh = bcftools_stderr;
-+ if ( args.mode==MODE_COUNT )
-+ {
-+ log_fh = strcmp("-",args.output_fname) ? fopen(args.output_fname,"w") : bcftools_stdout;
-+ if ( !log_fh ) error("Error: cannot write to %s\n", args.output_fname);
-+ }
-+
- args.sr = bcf_sr_init();
-- if ( !bcf_sr_add_reader(args.sr, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args.sr->errnum));
-+ if ( !bcf_sr_add_reader(args.sr, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args.sr->errnum));
- args.hdr = bcf_sr_get_header(args.sr, 0);
-- args.out_fh = hts_open(args.output_fname,hts_bcf_wmode(args.output_type));
-- if ( args.out_fh == NULL ) error("Can't write to \"%s\": %s\n", args.output_fname, strerror(errno));
-- bcf_hdr_write(args.out_fh, args.hdr);
--
-+ if ( args.mode!=MODE_COUNT )
-+ {
-+ args.out_fh = hts_open(args.output_fname,hts_bcf_wmode(args.output_type));
-+ if ( args.out_fh == NULL ) error("Can't write to \"%s\": %s\n", args.output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args.out_fh, args.hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args.output_fname);
-+ }
-
- int i, n = 0;
- char **list;
-@@ -422,29 +433,30 @@
- if ( line )
- {
- if ( line->errcode ) error("TODO: Unchecked error (%d), exiting\n",line->errcode);
-- bcf_write1(args.out_fh, args.hdr, line);
-+ if ( args.out_fh && bcf_write1(args.out_fh, args.hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args.output_fname);
- }
- }
-+ if ( args.out_fh && hts_close(args.out_fh)!=0 ) error("Error: close failed\n");
-
--
-- fprintf(bcftools_stderr,"# [1]nOK\t[2]nBad\t[3]nSkipped\t[4]Trio\n");
-+ fprintf(log_fh,"# [1]nOK\t[2]nBad\t[3]nSkipped\t[4]Trio (mother,father,child)\n");
- for (i=0; i<args.ntrios; i++)
- {
- trio_t *trio = &args.trios[i];
-- fprintf(bcftools_stderr,"%d\t%d\t%d\t%s,%s,%s\n",
-+ fprintf(log_fh,"%d\t%d\t%d\t%s,%s,%s\n",
- trio->nok,trio->nbad,args.nrec-(trio->nok+trio->nbad),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->imother),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->ifather),
- bcf_hdr_int2id(args.hdr, BCF_DT_SAMPLE, trio->ichild)
- );
- }
-+ if ( log_fh!=bcftools_stderr && log_fh!=bcftools_stdout && fclose(log_fh) ) error("Error: close failed for %s\n", args.output_fname);
-+
- free(args.gt_arr);
- free(args.trios);
- regitr_destroy(args.itr);
- regitr_destroy(args.itr_ori);
- regidx_destroy(args.rules);
- bcf_sr_destroy(args.sr);
-- if ( hts_close(args.out_fh)!=0 ) error("Error: close failed\n");
- return 0;
- }
-
-@@ -452,7 +464,7 @@
- {
- static int warned = 0;
- if ( warned ) return;
-- fprintf(bcftools_stderr,"Incorrect ploidy at %s:%d, skipping the trio. (This warning is printed only once.)\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ fprintf(bcftools_stderr,"Incorrect ploidy at %s:%"PRId64", skipping the trio. (This warning is printed only once.)\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
- warned = 1;
- }
-
-@@ -557,7 +569,7 @@
- }
-
- if ( needs_update && bcf_update_genotypes(args.hdr,rec,args.gt_arr,ngt*bcf_hdr_nsamples(args.hdr)) )
-- error("Could not update GT field at %s:%d\n", bcf_seqname(args.hdr,rec),rec->pos+1);
-+ error("Could not update GT field at %s:%"PRId64"\n", bcf_seqname(args.hdr,rec),(int64_t) rec->pos+1);
-
- if ( args.mode&MODE_DELETE ) return rec;
- if ( args.mode&MODE_LIST_GOOD ) return has_bad ? NULL : rec;
---- python-pysam.orig/bcftools/plugins/missing2ref.c
-+++ python-pysam/bcftools/plugins/missing2ref.c
-@@ -109,7 +109,7 @@
- }
- }
- else{
-- fprintf(stderr,"Warning: Could not calculate allele count at position %d\n", rec->pos);
-+ fprintf(stderr,"Warning: Could not calculate allele count at position %"PRId64"\n", (int64_t) rec->pos);
- exit(1);
- }
-
---- python-pysam.orig/bcftools/plugins/missing2ref.c.pysam.c
-+++ python-pysam/bcftools/plugins/missing2ref.c.pysam.c
-@@ -111,7 +111,7 @@
- }
- }
- else{
-- fprintf(bcftools_stderr,"Warning: Could not calculate allele count at position %d\n", rec->pos);
-+ fprintf(bcftools_stderr,"Warning: Could not calculate allele count at position %"PRId64"\n", (int64_t) rec->pos);
- exit(1);
- }
-
---- /dev/null
-+++ python-pysam/bcftools/plugins/parental-origin.c
-@@ -0,0 +1,410 @@
-+/* The MIT License
-+
-+ Copyright (c) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <math.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include <htslib/kfunc.h>
-+#include <errno.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define CNV_DEL 0
-+#define CNV_DUP 1
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for child, father, mother
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, cnv_type, debug, greedy;
-+ filter_t *filter;
-+ char *filter_str;
-+ char **argv, *pfm, *fname, *region;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr;
-+ trio_t trio;
-+ int32_t *pl, *ad, *gt; // input FMT/PL, AD, and GT values
-+ int mpl, mad, mgt;
-+ double ppat,pmat; // method 1: probability of paternal/maternal origin
-+ int ntest; // number of informative sites
-+ int nmat, npat; // method 2: number of pat/mat sites based on simple ad[0] < ad[1] comparison
-+ double min_pbinom; // minimum binomial probability of paternal hets
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Determine parental origin of a CNV region in a trio.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Determine parental origin of a CNV region\n"
-+ "Usage: bcftools +parental-origin [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -b, --min-binom-prob FLOAT exclude parental HETs with skewed ALT allele fraction [1e-2]\n"
-+ " -d, --debug list informative sites\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -g, --greedy use also ambigous sites, e.g. het+hom parents for deletions\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -p, --pfm P,F,M sample names of proband, father, and mother\n"
-+ " -r, --region REGION chr:beg-end\n"
-+ " -t, --type <del|dup> the CNV type\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +parental-origin -p proband,father,mother -t dup -r 14:22671179-22947951 file.bcf\n"
-+ "\n";
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->region )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->region, 0)<0 ) error("Failed to read the region: %s\n",args->region);
-+ }
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ int id;
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/PL is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "AD"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/AD is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/GT is not present in %s\n", args->fname);
-+
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr, args->filter_str);
-+
-+ int i, n = 0;
-+ char **list;
-+ list = hts_readlist(args->pfm, 0, &n);
-+ if ( n!=3 ) error("Expected three sample names with -t\n");
-+ args->trio.idx[iCHILD] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[0]);
-+ args->trio.idx[iFATHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[1]);
-+ args->trio.idx[iMOTHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[2]);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( args->trio.idx[i] < 0 ) error("The sample is not present: %s\n", list[i]);
-+ free(list[i]);
-+ }
-+ free(list);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ if ( args->filter ) filter_destroy(args->filter);
-+ free(args->pl);
-+ free(args->ad);
-+ free(args->gt);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static inline double calc_binom_two_sided(int na, int nb, double aprob)
-+{
-+ double prob = na > nb ? 2 * kf_betai(na, nb+1, aprob) : 2 * kf_betai(nb, na+1, aprob);
-+ if ( prob > 1 ) prob = 1;
-+ return prob;
-+}
-+static inline double calc_binom_one_sided(int na, int nb, double aprob, int ge)
-+{
-+ return ge ? kf_betai(na, nb + 1, aprob) : kf_betai(nb, na + 1, 1 - aprob);
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec->n_allele!=2 || bcf_get_variant_types(rec)!=VCF_SNP ) return;
-+
-+ int i,j;
-+ if ( args->filter )
-+ {
-+ uint8_t *smpl_pass = NULL;
-+ int pass_site = filter_test(args->filter, rec, (const uint8_t**) &smpl_pass);
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<3; i++)
-+ {
-+ if ( smpl_pass[args->trio.idx[i]] ) smpl_pass[args->trio.idx[i]] = 0;
-+ else { smpl_pass[args->trio.idx[i]] = 1; pass_site = 1; }
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<3; i++) smpl_pass[args->trio.idx[i]] = 1;
-+ }
-+ else if ( !pass_site ) return;
-+
-+ if ( smpl_pass )
-+ {
-+ for (i=0; i<3; i++)
-+ if ( !smpl_pass[args->trio.idx[i]] ) return;
-+ }
-+ }
-+
-+ int nsmpl = bcf_hdr_nsamples(args->hdr);
-+ int nret = bcf_get_format_int32(args->hdr,rec,"AD",&args->ad,&args->mad);
-+ if ( nret<=0 )
-+ {
-+ printf("The FORMAT/AD tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ return;
-+ }
-+ int nad1 = nret/nsmpl;
-+
-+ nret = bcf_get_format_int32(args->hdr,rec,"PL",&args->pl,&args->mpl);
-+ if ( nret<=0 ) error("The FORMAT/PL tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int npl1 = nret/nsmpl;
-+ if ( npl1!=rec->n_allele*(rec->n_allele+1)/2 )
-+ {
-+ printf("todo: not a diploid site at %s:%"PRId64": %d alleles, %d PLs\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_allele,npl1);
-+ return;
-+ }
-+
-+ nret = bcf_get_genotypes(args->hdr,rec,&args->gt,&args->mgt);
-+ if ( nret<=0 ) error("The FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int ngt1 = nret/nsmpl;
-+ if ( ngt1!=2 ) error("Todo: assuming diploid fields for now .. %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+
-+ // number of ref and alt alleles in the proband
-+ int32_t ad[6], *adP = ad, *adF = ad+2, *adM = ad+4;
-+ int32_t dsg[3], *dsgP = dsg, *dsgF = dsg+1, *dsgM = dsg+2;
-+ double gl[9], *glP = gl, *glF = gl+3, *glM = gl+6;
-+ for (i=0; i<3; i++) // trio
-+ {
-+ int isum = 0;
-+ int32_t *src = args->pl + npl1*args->trio.idx[i];
-+ double *gl_dst = gl + 3*i;
-+ double sum = 0;
-+ for (j=0; j<3; j++) // iterate over PL
-+ {
-+ if ( src[j]==bcf_int32_missing || src[j]==bcf_int32_vector_end ) return;
-+ gl_dst[j] = pow(10,-0.1*src[j]);
-+ sum += gl_dst[j];
-+ isum += src[j];
-+ }
-+ if ( isum==0 ) return;
-+ for (j=0; j<3; j++) gl_dst[j] /= sum;
-+
-+ int32_t *gt = args->gt + ngt1*args->trio.idx[i];
-+ dsg[i] = 0;
-+ for (j=0; j<ngt1; j++)
-+ {
-+ if ( gt[j]==bcf_int32_vector_end ) return;
-+ if ( bcf_gt_is_missing(gt[j]) ) return;
-+ if ( bcf_gt_allele(gt[j]) ) dsg[i]++;
-+ }
-+
-+ src = args->ad + nad1*args->trio.idx[i];
-+ ad[2*i] = src[0];
-+ ad[2*i+1] = src[1];
-+ }
-+
-+ #define is_RR(x) (x[0]==0)
-+ #define is_RA(x) (x[1]==0)
-+ #define is_AA(x) (x[2]==0)
-+ if ( args->cnv_type==CNV_DEL )
-+ {
-+ if ( *dsgP!=0 && *dsgP!=2 ) return; // proband not a hom
-+ if ( *dsgF == *dsgM ) return; // cannot distinguish between parents
-+ if ( !args->greedy )
-+ {
-+ if ( *dsgF==1 && *dsgP==*dsgM ) return; // both parents have the proband's allele
-+ if ( *dsgM==1 && *dsgP==*dsgF ) return;
-+ }
-+ double pmat = glP[0]*(0.5*glM[0]*glF[0] + 2/3.*glM[0]*glF[1] + glM[0]*glF[2] + 1/3.*glM[1]*glF[0] + 0.5*glM[1]*glF[1] + glM[1]*glF[2]) +
-+ glP[2]*(0.5*glM[2]*glF[2] + 2/3.*glM[2]*glF[1] + glM[2]*glF[0] + 1/3.*glM[1]*glF[2] + 0.5*glM[1]*glF[1] + glM[1]*glF[0]);
-+ double ppat = glP[0]*(0.5*glM[0]*glF[0] + 2/3.*glM[1]*glF[0] + glM[2]*glF[0] + 1/3.*glM[0]*glF[1] + 0.5*glM[1]*glF[1] + glM[2]*glF[1]) +
-+ glP[2]*(0.5*glM[2]*glF[2] + 2/3.*glM[1]*glF[2] + glM[0]*glF[2] + 1/3.*glM[2]*glF[1] + 0.5*glM[1]*glF[1] + glM[0]*glF[1]);
-+
-+ // NB: pmat/ppat is the probability of parental origin of the observed, not the deleted allele;
-+ // args->pmat/ppat is the probability of parental origin of the deleted allele
-+ args->pmat += log(ppat);
-+ args->ppat += log(pmat);
-+ args->ntest++;
-+
-+ if ( args->debug )
-+ {
-+ // output: position, paternal probability, maternal probability, PLs of child, father, mother
-+ printf("DBG\t%"PRId64"\t%e\t%e\t", (int64_t) rec->pos+1,ppat,pmat);
-+ for (i=0; i<3; i++)
-+ {
-+ for (j=0; j<3; j++) printf(" %d",args->pl[npl1*args->trio.idx[i]+j]);
-+ printf("\t");
-+ }
-+ printf("\n");
-+ }
-+ }
-+ if ( args->cnv_type==CNV_DUP )
-+ {
-+ if ( !adP[0] || !adP[1] ) return; // proband is homozygous or has no coverage
-+ if ( adP[0] == adP[1] ) return; // proband's alleles are not informative, any or none could have been duplicated
-+ if ( *dsgP!=1 ) return; // the proband's genotype is not a het
-+ if ( *dsgF == *dsgM ) return; // cannot distinguish between parents
-+
-+ if ( args->min_pbinom!=0 )
-+ {
-+ // exclude parental hets with skewed ALT allele proportion
-+ if ( *dsgF==1 && adF[0] && adF[1] && calc_binom_two_sided(adF[0],adF[1],0.5) < args->min_pbinom ) return;
-+ if ( *dsgM==1 && adM[0] && adM[1] && calc_binom_two_sided(adM[0],adM[1],0.5) < args->min_pbinom ) return;
-+ }
-+
-+ double prra = glP[1] * calc_binom_one_sided(adP[1],adP[0],1/3.,1);
-+ double praa = glP[1] * calc_binom_one_sided(adP[1],adP[0],2/3.,0);
-+ double ppat = prra*(glM[1]*glF[0] + glM[2]*glF[0] + 0.5*glM[1]*glF[1] + glM[2]*glF[1]) +
-+ praa*(glM[1]*glF[2] + glM[0]*glF[2] + 0.5*glM[1]*glF[1] + glM[0]*glF[1]);
-+ double pmat = prra*(glM[0]*glF[1] + glM[0]*glF[2] + 0.5*glM[1]*glF[1] + glM[1]*glF[2]) +
-+ praa*(glM[2]*glF[1] + glM[2]*glF[0] + 0.5*glM[1]*glF[1] + glM[1]*glF[0]);
-+ args->pmat += log(pmat);
-+ args->ppat += log(ppat);
-+ args->ntest++;
-+
-+ if ( args->debug )
-+ {
-+ // output: position; paternal probability; maternal probability; ADs of child, father,mother; PLs of child, father, mother
-+ printf("DBG\t%"PRId64"\t%e\t%e\t", (int64_t) rec->pos+1,ppat,pmat);
-+ for (i=0; i<3; i++)
-+ {
-+ printf("%d %d\t",ad[2*i],ad[2*i+1]);
-+ }
-+ for (i=0; i<3; i++)
-+ {
-+ for (j=0; j<3; j++) printf(" %d",args->pl[npl1*args->trio.idx[i]+j]);
-+ printf("\t");
-+ }
-+ printf("\n");
-+ }
-+ }
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->min_pbinom = 1e-2;
-+ static struct option loptions[] =
-+ {
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"pfm",required_argument,NULL,'p'},
-+ {"region",required_argument,0,'r'},
-+ {"type",required_argument,0,'t'},
-+ {"debug",no_argument,0,'d'},
-+ {"greedy",no_argument,0,'g'},
-+ {"min-binom-prob",required_argument,0,'b'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ char *tmp;
-+ while ((c = getopt_long(argc, argv, "h?e:i:p:r:t:dgb:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't':
-+ if ( !strcasecmp("dup",optarg) ) args->cnv_type = CNV_DUP;
-+ else if ( !strcasecmp("del",optarg) ) args->cnv_type = CNV_DEL;
-+ break;
-+ case 'r': args->region = optarg; break;
-+ case 'p': args->pfm = optarg; break;
-+ case 'd': args->debug = 1; break;
-+ case 'g': args->greedy = 1; break;
-+ case 'b':
-+ args->min_pbinom = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: -b %s\n", optarg);
-+ if ( args->min_pbinom<0 || args->min_pbinom>1 ) error("Expected value from the interval [0,1] with --min-binom-prob\n");
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->pfm ) error("Missing the -p option\n");
-+
-+ init_data(args);
-+ if ( args->debug )
-+ {
-+ if ( args->cnv_type==CNV_DEL ) printf("# DBG: position; paternal probability; maternal probability; PLs of child, father, mother\n");
-+ else printf("# DBG: position; paternal probability; maternal probability; ADs of child, father, mother; PLs of child, father, mother\n");
-+ }
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+
-+ double qual = 4.3429*fabs(args->ppat - args->pmat);
-+ char *origin = "uncertain";
-+ if ( args->ppat > args->pmat ) origin = "paternal";
-+ else if ( args->ppat < args->pmat ) origin = "maternal";
-+
-+ int i;
-+ printf("# bcftools +%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) printf(" %s",args->argv[i]);
-+ printf("\n");
-+ printf("# [1]type\t[2]predicted_origin\t[3]quality\t[4]nmarkers\n");
-+ printf("%s\t%s\t%f\t%d\n", args->cnv_type==CNV_DUP ? "dup" : "del", origin, qual, args->ntest);
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/parental-origin.c.pysam.c
-@@ -0,0 +1,412 @@
-+#include "bcftools.pysam.h"
-+
-+/* The MIT License
-+
-+ Copyright (c) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <math.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include <htslib/kfunc.h>
-+#include <errno.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define CNV_DEL 0
-+#define CNV_DUP 1
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for child, father, mother
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, cnv_type, debug, greedy;
-+ filter_t *filter;
-+ char *filter_str;
-+ char **argv, *pfm, *fname, *region;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr;
-+ trio_t trio;
-+ int32_t *pl, *ad, *gt; // input FMT/PL, AD, and GT values
-+ int mpl, mad, mgt;
-+ double ppat,pmat; // method 1: probability of paternal/maternal origin
-+ int ntest; // number of informative sites
-+ int nmat, npat; // method 2: number of pat/mat sites based on simple ad[0] < ad[1] comparison
-+ double min_pbinom; // minimum binomial probability of paternal hets
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Determine parental origin of a CNV region in a trio.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Determine parental origin of a CNV region\n"
-+ "Usage: bcftools +parental-origin [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -b, --min-binom-prob FLOAT exclude parental HETs with skewed ALT allele fraction [1e-2]\n"
-+ " -d, --debug list informative sites\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " -g, --greedy use also ambigous sites, e.g. het+hom parents for deletions\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -p, --pfm P,F,M sample names of proband, father, and mother\n"
-+ " -r, --region REGION chr:beg-end\n"
-+ " -t, --type <del|dup> the CNV type\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +parental-origin -p proband,father,mother -t dup -r 14:22671179-22947951 file.bcf\n"
-+ "\n";
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->region )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->region, 0)<0 ) error("Failed to read the region: %s\n",args->region);
-+ }
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ int id;
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/PL is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "AD"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/AD is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "GT"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/GT is not present in %s\n", args->fname);
-+
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr, args->filter_str);
-+
-+ int i, n = 0;
-+ char **list;
-+ list = hts_readlist(args->pfm, 0, &n);
-+ if ( n!=3 ) error("Expected three sample names with -t\n");
-+ args->trio.idx[iCHILD] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[0]);
-+ args->trio.idx[iFATHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[1]);
-+ args->trio.idx[iMOTHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[2]);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( args->trio.idx[i] < 0 ) error("The sample is not present: %s\n", list[i]);
-+ free(list[i]);
-+ }
-+ free(list);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ if ( args->filter ) filter_destroy(args->filter);
-+ free(args->pl);
-+ free(args->ad);
-+ free(args->gt);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static inline double calc_binom_two_sided(int na, int nb, double aprob)
-+{
-+ double prob = na > nb ? 2 * kf_betai(na, nb+1, aprob) : 2 * kf_betai(nb, na+1, aprob);
-+ if ( prob > 1 ) prob = 1;
-+ return prob;
-+}
-+static inline double calc_binom_one_sided(int na, int nb, double aprob, int ge)
-+{
-+ return ge ? kf_betai(na, nb + 1, aprob) : kf_betai(nb, na + 1, 1 - aprob);
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec->n_allele!=2 || bcf_get_variant_types(rec)!=VCF_SNP ) return;
-+
-+ int i,j;
-+ if ( args->filter )
-+ {
-+ uint8_t *smpl_pass = NULL;
-+ int pass_site = filter_test(args->filter, rec, (const uint8_t**) &smpl_pass);
-+ if ( args->filter_logic & FLT_EXCLUDE )
-+ {
-+ if ( pass_site )
-+ {
-+ if ( !smpl_pass ) return;
-+ pass_site = 0;
-+ for (i=0; i<3; i++)
-+ {
-+ if ( smpl_pass[args->trio.idx[i]] ) smpl_pass[args->trio.idx[i]] = 0;
-+ else { smpl_pass[args->trio.idx[i]] = 1; pass_site = 1; }
-+ }
-+ if ( !pass_site ) return;
-+ }
-+ else
-+ for (i=0; i<3; i++) smpl_pass[args->trio.idx[i]] = 1;
-+ }
-+ else if ( !pass_site ) return;
-+
-+ if ( smpl_pass )
-+ {
-+ for (i=0; i<3; i++)
-+ if ( !smpl_pass[args->trio.idx[i]] ) return;
-+ }
-+ }
-+
-+ int nsmpl = bcf_hdr_nsamples(args->hdr);
-+ int nret = bcf_get_format_int32(args->hdr,rec,"AD",&args->ad,&args->mad);
-+ if ( nret<=0 )
-+ {
-+ fprintf(bcftools_stdout, "The FORMAT/AD tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ return;
-+ }
-+ int nad1 = nret/nsmpl;
-+
-+ nret = bcf_get_format_int32(args->hdr,rec,"PL",&args->pl,&args->mpl);
-+ if ( nret<=0 ) error("The FORMAT/PL tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int npl1 = nret/nsmpl;
-+ if ( npl1!=rec->n_allele*(rec->n_allele+1)/2 )
-+ {
-+ fprintf(bcftools_stdout, "todo: not a diploid site at %s:%"PRId64": %d alleles, %d PLs\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_allele,npl1);
-+ return;
-+ }
-+
-+ nret = bcf_get_genotypes(args->hdr,rec,&args->gt,&args->mgt);
-+ if ( nret<=0 ) error("The FORMAT/GT tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int ngt1 = nret/nsmpl;
-+ if ( ngt1!=2 ) error("Todo: assuming diploid fields for now .. %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+
-+ // number of ref and alt alleles in the proband
-+ int32_t ad[6], *adP = ad, *adF = ad+2, *adM = ad+4;
-+ int32_t dsg[3], *dsgP = dsg, *dsgF = dsg+1, *dsgM = dsg+2;
-+ double gl[9], *glP = gl, *glF = gl+3, *glM = gl+6;
-+ for (i=0; i<3; i++) // trio
-+ {
-+ int isum = 0;
-+ int32_t *src = args->pl + npl1*args->trio.idx[i];
-+ double *gl_dst = gl + 3*i;
-+ double sum = 0;
-+ for (j=0; j<3; j++) // iterate over PL
-+ {
-+ if ( src[j]==bcf_int32_missing || src[j]==bcf_int32_vector_end ) return;
-+ gl_dst[j] = pow(10,-0.1*src[j]);
-+ sum += gl_dst[j];
-+ isum += src[j];
-+ }
-+ if ( isum==0 ) return;
-+ for (j=0; j<3; j++) gl_dst[j] /= sum;
-+
-+ int32_t *gt = args->gt + ngt1*args->trio.idx[i];
-+ dsg[i] = 0;
-+ for (j=0; j<ngt1; j++)
-+ {
-+ if ( gt[j]==bcf_int32_vector_end ) return;
-+ if ( bcf_gt_is_missing(gt[j]) ) return;
-+ if ( bcf_gt_allele(gt[j]) ) dsg[i]++;
-+ }
-+
-+ src = args->ad + nad1*args->trio.idx[i];
-+ ad[2*i] = src[0];
-+ ad[2*i+1] = src[1];
-+ }
-+
-+ #define is_RR(x) (x[0]==0)
-+ #define is_RA(x) (x[1]==0)
-+ #define is_AA(x) (x[2]==0)
-+ if ( args->cnv_type==CNV_DEL )
-+ {
-+ if ( *dsgP!=0 && *dsgP!=2 ) return; // proband not a hom
-+ if ( *dsgF == *dsgM ) return; // cannot distinguish between parents
-+ if ( !args->greedy )
-+ {
-+ if ( *dsgF==1 && *dsgP==*dsgM ) return; // both parents have the proband's allele
-+ if ( *dsgM==1 && *dsgP==*dsgF ) return;
-+ }
-+ double pmat = glP[0]*(0.5*glM[0]*glF[0] + 2/3.*glM[0]*glF[1] + glM[0]*glF[2] + 1/3.*glM[1]*glF[0] + 0.5*glM[1]*glF[1] + glM[1]*glF[2]) +
-+ glP[2]*(0.5*glM[2]*glF[2] + 2/3.*glM[2]*glF[1] + glM[2]*glF[0] + 1/3.*glM[1]*glF[2] + 0.5*glM[1]*glF[1] + glM[1]*glF[0]);
-+ double ppat = glP[0]*(0.5*glM[0]*glF[0] + 2/3.*glM[1]*glF[0] + glM[2]*glF[0] + 1/3.*glM[0]*glF[1] + 0.5*glM[1]*glF[1] + glM[2]*glF[1]) +
-+ glP[2]*(0.5*glM[2]*glF[2] + 2/3.*glM[1]*glF[2] + glM[0]*glF[2] + 1/3.*glM[2]*glF[1] + 0.5*glM[1]*glF[1] + glM[0]*glF[1]);
-+
-+ // NB: pmat/ppat is the probability of parental origin of the observed, not the deleted allele;
-+ // args->pmat/ppat is the probability of parental origin of the deleted allele
-+ args->pmat += log(ppat);
-+ args->ppat += log(pmat);
-+ args->ntest++;
-+
-+ if ( args->debug )
-+ {
-+ // output: position, paternal probability, maternal probability, PLs of child, father, mother
-+ fprintf(bcftools_stdout, "DBG\t%"PRId64"\t%e\t%e\t", (int64_t) rec->pos+1,ppat,pmat);
-+ for (i=0; i<3; i++)
-+ {
-+ for (j=0; j<3; j++) fprintf(bcftools_stdout, " %d",args->pl[npl1*args->trio.idx[i]+j]);
-+ fprintf(bcftools_stdout, "\t");
-+ }
-+ fprintf(bcftools_stdout, "\n");
-+ }
-+ }
-+ if ( args->cnv_type==CNV_DUP )
-+ {
-+ if ( !adP[0] || !adP[1] ) return; // proband is homozygous or has no coverage
-+ if ( adP[0] == adP[1] ) return; // proband's alleles are not informative, any or none could have been duplicated
-+ if ( *dsgP!=1 ) return; // the proband's genotype is not a het
-+ if ( *dsgF == *dsgM ) return; // cannot distinguish between parents
-+
-+ if ( args->min_pbinom!=0 )
-+ {
-+ // exclude parental hets with skewed ALT allele proportion
-+ if ( *dsgF==1 && adF[0] && adF[1] && calc_binom_two_sided(adF[0],adF[1],0.5) < args->min_pbinom ) return;
-+ if ( *dsgM==1 && adM[0] && adM[1] && calc_binom_two_sided(adM[0],adM[1],0.5) < args->min_pbinom ) return;
-+ }
-+
-+ double prra = glP[1] * calc_binom_one_sided(adP[1],adP[0],1/3.,1);
-+ double praa = glP[1] * calc_binom_one_sided(adP[1],adP[0],2/3.,0);
-+ double ppat = prra*(glM[1]*glF[0] + glM[2]*glF[0] + 0.5*glM[1]*glF[1] + glM[2]*glF[1]) +
-+ praa*(glM[1]*glF[2] + glM[0]*glF[2] + 0.5*glM[1]*glF[1] + glM[0]*glF[1]);
-+ double pmat = prra*(glM[0]*glF[1] + glM[0]*glF[2] + 0.5*glM[1]*glF[1] + glM[1]*glF[2]) +
-+ praa*(glM[2]*glF[1] + glM[2]*glF[0] + 0.5*glM[1]*glF[1] + glM[1]*glF[0]);
-+ args->pmat += log(pmat);
-+ args->ppat += log(ppat);
-+ args->ntest++;
-+
-+ if ( args->debug )
-+ {
-+ // output: position; paternal probability; maternal probability; ADs of child, father,mother; PLs of child, father, mother
-+ fprintf(bcftools_stdout, "DBG\t%"PRId64"\t%e\t%e\t", (int64_t) rec->pos+1,ppat,pmat);
-+ for (i=0; i<3; i++)
-+ {
-+ fprintf(bcftools_stdout, "%d %d\t",ad[2*i],ad[2*i+1]);
-+ }
-+ for (i=0; i<3; i++)
-+ {
-+ for (j=0; j<3; j++) fprintf(bcftools_stdout, " %d",args->pl[npl1*args->trio.idx[i]+j]);
-+ fprintf(bcftools_stdout, "\t");
-+ }
-+ fprintf(bcftools_stdout, "\n");
-+ }
-+ }
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->min_pbinom = 1e-2;
-+ static struct option loptions[] =
-+ {
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"pfm",required_argument,NULL,'p'},
-+ {"region",required_argument,0,'r'},
-+ {"type",required_argument,0,'t'},
-+ {"debug",no_argument,0,'d'},
-+ {"greedy",no_argument,0,'g'},
-+ {"min-binom-prob",required_argument,0,'b'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ char *tmp;
-+ while ((c = getopt_long(argc, argv, "h?e:i:p:r:t:dgb:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't':
-+ if ( !strcasecmp("dup",optarg) ) args->cnv_type = CNV_DUP;
-+ else if ( !strcasecmp("del",optarg) ) args->cnv_type = CNV_DEL;
-+ break;
-+ case 'r': args->region = optarg; break;
-+ case 'p': args->pfm = optarg; break;
-+ case 'd': args->debug = 1; break;
-+ case 'g': args->greedy = 1; break;
-+ case 'b':
-+ args->min_pbinom = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: -b %s\n", optarg);
-+ if ( args->min_pbinom<0 || args->min_pbinom>1 ) error("Expected value from the interval [0,1] with --min-binom-prob\n");
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->pfm ) error("Missing the -p option\n");
-+
-+ init_data(args);
-+ if ( args->debug )
-+ {
-+ if ( args->cnv_type==CNV_DEL ) fprintf(bcftools_stdout, "# DBG: position; paternal probability; maternal probability; PLs of child, father, mother\n");
-+ else fprintf(bcftools_stdout, "# DBG: position; paternal probability; maternal probability; ADs of child, father, mother; PLs of child, father, mother\n");
-+ }
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+
-+ double qual = 4.3429*fabs(args->ppat - args->pmat);
-+ char *origin = "uncertain";
-+ if ( args->ppat > args->pmat ) origin = "paternal";
-+ else if ( args->ppat < args->pmat ) origin = "maternal";
-+
-+ int i;
-+ fprintf(bcftools_stdout, "# bcftools +%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) fprintf(bcftools_stdout, " %s",args->argv[i]);
-+ fprintf(bcftools_stdout, "\n");
-+ fprintf(bcftools_stdout, "# [1]type\t[2]predicted_origin\t[3]quality\t[4]nmarkers\n");
-+ fprintf(bcftools_stdout, "%s\t%s\t%f\t%d\n", args->cnv_type==CNV_DUP ? "dup" : "del", origin, qual, args->ntest);
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- python-pysam.orig/bcftools/plugins/prune.c
-+++ python-pysam/bcftools/plugins/prune.c
-@@ -129,7 +129,7 @@
- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Integer,Description=\"A site with r2>%e upstream\">",args->info_pos,args->max_ld);
- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Float,Description=\"A site with r2>%e upstream\">",args->info_r2,args->max_ld);
- }
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->filter_r2 )
- args->filter_r2_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, args->filter_r2);
-
-@@ -147,7 +147,7 @@
- {
- if ( args->filter )
- filter_destroy(args->filter);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- vcfbuf_destroy(args->vcfbuf);
- bcf_sr_destroy(args->sr);
- free(args->info_pos);
-@@ -158,7 +158,7 @@
- {
- bcf1_t *rec;
- while ( (rec = vcfbuf_flush(args->vcfbuf, flush_all)) )
-- bcf_write1(args->out_fh, args->hdr, rec);
-+ if ( bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- static void process(args_t *args)
- {
-@@ -251,9 +251,9 @@
- else if ( !strcasecmp("kb",tmp) ) args->ld_win *= -1000;
- else error("Could not parse: --window %s\n", optarg);
- break;
-- case 'T': args->target_is_file = 1;
-+ case 'T': args->target_is_file = 1; // fall-through
- case 't': args->target = optarg; break;
-- case 'R': args->region_is_file = 1;
-+ case 'R': args->region_is_file = 1; // fall-through
- case 'r': args->region = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 'O':
---- python-pysam.orig/bcftools/plugins/prune.c.pysam.c
-+++ python-pysam/bcftools/plugins/prune.c.pysam.c
-@@ -131,7 +131,7 @@
- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Integer,Description=\"A site with r2>%e upstream\">",args->info_pos,args->max_ld);
- bcf_hdr_printf(args->hdr,"##INFO=<ID=%s,Number=1,Type=Float,Description=\"A site with r2>%e upstream\">",args->info_r2,args->max_ld);
- }
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->filter_r2 )
- args->filter_r2_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, args->filter_r2);
-
-@@ -149,7 +149,7 @@
- {
- if ( args->filter )
- filter_destroy(args->filter);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- vcfbuf_destroy(args->vcfbuf);
- bcf_sr_destroy(args->sr);
- free(args->info_pos);
-@@ -160,7 +160,7 @@
- {
- bcf1_t *rec;
- while ( (rec = vcfbuf_flush(args->vcfbuf, flush_all)) )
-- bcf_write1(args->out_fh, args->hdr, rec);
-+ if ( bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- static void process(args_t *args)
- {
-@@ -253,9 +253,9 @@
- else if ( !strcasecmp("kb",tmp) ) args->ld_win *= -1000;
- else error("Could not parse: --window %s\n", optarg);
- break;
-- case 'T': args->target_is_file = 1;
-+ case 'T': args->target_is_file = 1; // fall-through
- case 't': args->target = optarg; break;
-- case 'R': args->region_is_file = 1;
-+ case 'R': args->region_is_file = 1; // fall-through
- case 'r': args->region = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 'O':
---- /dev/null
-+++ python-pysam/bcftools/plugins/remove-overlaps.c
-@@ -0,0 +1,219 @@
-+/*
-+ Copyright (C) 2017-2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+*/
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <stdint.h>
-+#include <errno.h>
-+#include <inttypes.h>
-+#include <htslib/vcf.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include "bcftools.h"
-+#include "vcfbuf.h"
-+#include "filter.h"
-+
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+typedef struct
-+{
-+ filter_t *filter;
-+ char *filter_str;
-+ int filter_logic; // one of FLT_INCLUDE/FLT_EXCLUDE (-i or -e)
-+ vcfbuf_t *vcfbuf;
-+ int argc, region_is_file, target_is_file, output_type, verbose, nrm, ntot, print_overlaps, rmdup;
-+ char **argv, *region, *target, *fname, *output_fname;
-+ htsFile *out_fh;
-+ bcf_hdr_t *hdr;
-+ bcf_srs_t *sr;
-+}
-+args_t;
-+
-+const char *about(void)
-+{
-+ return "Remove overlapping variants\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Remove overlapping variants.\n"
-+ "\n"
-+ "Usage: bcftools +remove-overlaps [Options]\n"
-+ "Plugin options:\n"
-+ " -d, --rm-dup remove only duplicate sites and remove them completely\n"
-+ " -p, --print-overlaps do the opposite and print only overlapping sites\n"
-+ " -v, --verbose print a list of removed sites\n"
-+ "Standard options:\n"
-+ " -e, --exclude EXPR exclude sites for which the expression is true\n"
-+ " -i, --include EXPR include only sites for which the expression is true\n"
-+ " -o, --output FILE write output to the FILE [standard output]\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -r, --regions REGION restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REGION similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n";
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->region )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->region, args->region_is_file)<0 ) error("Failed to read the regions: %s\n",args->region);
-+ }
-+ if ( args->target && bcf_sr_set_targets(args->sr, args->target, args->target_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->target);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ args->vcfbuf = vcfbuf_init(args->hdr, 0);
-+ if ( args->rmdup )
-+ vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_RMDUP,1)
-+ else
-+ vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_OVERLAP_WIN,1)
-+
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr, args->filter_str);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ if ( args->filter )
-+ filter_destroy(args->filter);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ vcfbuf_destroy(args->vcfbuf);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static void flush(args_t *args, int flush_all)
-+{
-+ int nbuf = vcfbuf_nsites(args->vcfbuf);
-+ bcf1_t *rec;
-+ while ( (rec = vcfbuf_flush(args->vcfbuf, flush_all)) )
-+ {
-+ if ( nbuf>2 || (nbuf>1 && flush_all) )
-+ {
-+ args->nrm++;
-+ if ( args->verbose ) printf("%s\t%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ if ( args->print_overlaps && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ continue; // skip overlapping variants
-+ }
-+ if ( !args->print_overlaps && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ }
-+}
-+static void process(args_t *args)
-+{
-+ args->ntot++;
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+ if ( args->filter )
-+ {
-+ int ret = filter_test(args->filter, rec, NULL);
-+ if ( args->filter_logic==FLT_INCLUDE ) { if ( !ret ) return; }
-+ else if ( ret ) return;
-+ }
-+ bcf_sr_t *sr = bcf_sr_get_reader(args->sr, 0);
-+ sr->buffer[0] = vcfbuf_push(args->vcfbuf, rec, 1);
-+ flush(args,0);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_type = FT_VCF;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"rm-dup",no_argument,NULL,'d'},
-+ {"print-overlaps",no_argument,NULL,'p'},
-+ {"exclude",required_argument,NULL,'e'},
-+ {"include",required_argument,NULL,'i'},
-+ {"regions",required_argument,NULL,'r'},
-+ {"regions-file",required_argument,NULL,'R'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"verbose",no_argument,NULL,'v'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "r:R:t:T:o:O:i:e:vpd",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'd': args->rmdup = 1; break;
-+ case 'p': args->print_overlaps = 1; break;
-+ case 'v': args->verbose = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 'T': args->target_is_file = 1; // fall-through
-+ case 't': args->target = optarg; break;
-+ case 'R': args->region_is_file = 1; // fall-through
-+ case 'r': args->region = optarg; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n");
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s",usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s",usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) ) process(args);
-+ flush(args,1);
-+
-+ fprintf(stderr,"Processed/Removed\t%d\t%d\n",args->ntot,args->nrm);
-+
-+ destroy_data(args);
-+ return 0;
-+}
-+
-+
---- /dev/null
-+++ python-pysam/bcftools/plugins/remove-overlaps.c.pysam.c
-@@ -0,0 +1,221 @@
-+#include "bcftools.pysam.h"
-+
-+/*
-+ Copyright (C) 2017-2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+*/
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <stdarg.h>
-+#include <unistd.h>
-+#include <stdint.h>
-+#include <errno.h>
-+#include <inttypes.h>
-+#include <htslib/vcf.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include "bcftools.h"
-+#include "vcfbuf.h"
-+#include "filter.h"
-+
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+typedef struct
-+{
-+ filter_t *filter;
-+ char *filter_str;
-+ int filter_logic; // one of FLT_INCLUDE/FLT_EXCLUDE (-i or -e)
-+ vcfbuf_t *vcfbuf;
-+ int argc, region_is_file, target_is_file, output_type, verbose, nrm, ntot, print_overlaps, rmdup;
-+ char **argv, *region, *target, *fname, *output_fname;
-+ htsFile *out_fh;
-+ bcf_hdr_t *hdr;
-+ bcf_srs_t *sr;
-+}
-+args_t;
-+
-+const char *about(void)
-+{
-+ return "Remove overlapping variants\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Remove overlapping variants.\n"
-+ "\n"
-+ "Usage: bcftools +remove-overlaps [Options]\n"
-+ "Plugin options:\n"
-+ " -d, --rm-dup remove only duplicate sites and remove them completely\n"
-+ " -p, --print-overlaps do the opposite and print only overlapping sites\n"
-+ " -v, --verbose print a list of removed sites\n"
-+ "Standard options:\n"
-+ " -e, --exclude EXPR exclude sites for which the expression is true\n"
-+ " -i, --include EXPR include only sites for which the expression is true\n"
-+ " -o, --output FILE write output to the FILE [standard output]\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -r, --regions REGION restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REGION similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n";
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->region )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->region, args->region_is_file)<0 ) error("Failed to read the regions: %s\n",args->region);
-+ }
-+ if ( args->target && bcf_sr_set_targets(args->sr, args->target, args->target_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->target);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ args->vcfbuf = vcfbuf_init(args->hdr, 0);
-+ if ( args->rmdup )
-+ vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_RMDUP,1)
-+ else
-+ vcfbuf_set_opt(args->vcfbuf,int,VCFBUF_OVERLAP_WIN,1)
-+
-+ if ( args->filter_str )
-+ args->filter = filter_init(args->hdr, args->filter_str);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ if ( args->filter )
-+ filter_destroy(args->filter);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ vcfbuf_destroy(args->vcfbuf);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static void flush(args_t *args, int flush_all)
-+{
-+ int nbuf = vcfbuf_nsites(args->vcfbuf);
-+ bcf1_t *rec;
-+ while ( (rec = vcfbuf_flush(args->vcfbuf, flush_all)) )
-+ {
-+ if ( nbuf>2 || (nbuf>1 && flush_all) )
-+ {
-+ args->nrm++;
-+ if ( args->verbose ) fprintf(bcftools_stdout, "%s\t%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ if ( args->print_overlaps && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ continue; // skip overlapping variants
-+ }
-+ if ( !args->print_overlaps && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ }
-+}
-+static void process(args_t *args)
-+{
-+ args->ntot++;
-+ bcf1_t *rec = bcf_sr_get_line(args->sr,0);
-+ if ( args->filter )
-+ {
-+ int ret = filter_test(args->filter, rec, NULL);
-+ if ( args->filter_logic==FLT_INCLUDE ) { if ( !ret ) return; }
-+ else if ( ret ) return;
-+ }
-+ bcf_sr_t *sr = bcf_sr_get_reader(args->sr, 0);
-+ sr->buffer[0] = vcfbuf_push(args->vcfbuf, rec, 1);
-+ flush(args,0);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_type = FT_VCF;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"rm-dup",no_argument,NULL,'d'},
-+ {"print-overlaps",no_argument,NULL,'p'},
-+ {"exclude",required_argument,NULL,'e'},
-+ {"include",required_argument,NULL,'i'},
-+ {"regions",required_argument,NULL,'r'},
-+ {"regions-file",required_argument,NULL,'R'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"verbose",no_argument,NULL,'v'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "r:R:t:T:o:O:i:e:vpd",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'd': args->rmdup = 1; break;
-+ case 'p': args->print_overlaps = 1; break;
-+ case 'v': args->verbose = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 'T': args->target_is_file = 1; // fall-through
-+ case 't': args->target = optarg; break;
-+ case 'R': args->region_is_file = 1; // fall-through
-+ case 'r': args->region = optarg; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( args->filter_logic == (FLT_EXCLUDE|FLT_INCLUDE) ) error("Only one of -i or -e can be given.\n");
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s",usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s",usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) ) process(args);
-+ flush(args,1);
-+
-+ fprintf(bcftools_stderr,"Processed/Removed\t%d\t%d\n",args->ntot,args->nrm);
-+
-+ destroy_data(args);
-+ return 0;
-+}
-+
-+
---- python-pysam.orig/bcftools/plugins/setGT.c
-+++ python-pysam/bcftools/plugins/setGT.c
-@@ -320,7 +320,7 @@
- hts_expand(int,rec->n_allele,args->marr,args->arr);
- int ret = bcf_calc_ac(args->in_hdr,rec,args->arr,BCF_UN_FMT);
- if ( ret<= 0 )
-- error("Could not calculate allele count at %s:%d\n", bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Could not calculate allele count at %s:%"PRId64"\n", bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-
- for(i=0; i < rec->n_allele; ++i)
- {
-@@ -353,8 +353,8 @@
- int ia = bcf_gt_allele(ptr[0]);
- int ib = bcf_gt_allele(ptr[1]);
- if ( ia>=nbinom || ib>=nbinom )
-- error("The sample %s has incorrect number of %s fields at %s:%d\n",
-- args->in_hdr->samples[i],args->binom_tag,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("The sample %s has incorrect number of %s fields at %s:%"PRId64"\n",
-+ args->in_hdr->samples[i],args->binom_tag,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-
- double prob = calc_binom(args->iarr[i*nbinom+ia],args->iarr[i*nbinom+ib]);
- if ( !args->binom_cmp(prob,args->binom_val) ) continue;
-@@ -391,7 +391,7 @@
-
- for (i=0; i<rec->n_sample; i++)
- {
-- if ( !args->smpl_pass[i] ) continue;
-+ if ( args->smpl_pass && !args->smpl_pass[i] ) continue;
- if ( args->new_mask>_UNPHASED )
- changed += unphase_gt(args->gts + i*ngts, ngts);
- else if ( args->new_mask==GT_PHASED )
---- python-pysam.orig/bcftools/plugins/setGT.c.pysam.c
-+++ python-pysam/bcftools/plugins/setGT.c.pysam.c
-@@ -322,7 +322,7 @@
- hts_expand(int,rec->n_allele,args->marr,args->arr);
- int ret = bcf_calc_ac(args->in_hdr,rec,args->arr,BCF_UN_FMT);
- if ( ret<= 0 )
-- error("Could not calculate allele count at %s:%d\n", bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("Could not calculate allele count at %s:%"PRId64"\n", bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-
- for(i=0; i < rec->n_allele; ++i)
- {
-@@ -355,8 +355,8 @@
- int ia = bcf_gt_allele(ptr[0]);
- int ib = bcf_gt_allele(ptr[1]);
- if ( ia>=nbinom || ib>=nbinom )
-- error("The sample %s has incorrect number of %s fields at %s:%d\n",
-- args->in_hdr->samples[i],args->binom_tag,bcf_seqname(args->in_hdr,rec),rec->pos+1);
-+ error("The sample %s has incorrect number of %s fields at %s:%"PRId64"\n",
-+ args->in_hdr->samples[i],args->binom_tag,bcf_seqname(args->in_hdr,rec),(int64_t) rec->pos+1);
-
- double prob = calc_binom(args->iarr[i*nbinom+ia],args->iarr[i*nbinom+ib]);
- if ( !args->binom_cmp(prob,args->binom_val) ) continue;
-@@ -393,7 +393,7 @@
-
- for (i=0; i<rec->n_sample; i++)
- {
-- if ( !args->smpl_pass[i] ) continue;
-+ if ( args->smpl_pass && !args->smpl_pass[i] ) continue;
- if ( args->new_mask>_UNPHASED )
- changed += unphase_gt(args->gts + i*ngts, ngts);
- else if ( args->new_mask==GT_PHASED )
---- python-pysam.orig/bcftools/plugins/smpl-stats.c
-+++ python-pysam/bcftools/plugins/smpl-stats.c
-@@ -28,6 +28,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-@@ -230,11 +231,11 @@
- fprintf(fh,"# %d) number of indels\n", ++i);
- fprintf(fh,"# %d) number of singletons\n", ++i);
- fprintf(fh,"# %d) number of missing genotypes (./., ., ./0, etc)\n", ++i);
-- fprintf(fh,"# %d) number of transitions (genotypes such as \"1/2\" are counted twice)\n", ++i);
-- fprintf(fh,"# %d) number of transversions (genotypes such as \"1/2\" are counted twice)\n", ++i);
-+ fprintf(fh,"# %d) number of transitions (alt het genotypes such as \"1/2\" are counted twice)\n", ++i);
-+ fprintf(fh,"# %d) number of transversions (alt het genotypes such as \"1/2\" are counted twice)\n", ++i);
- fprintf(fh,"# %d) overall ts/tv\n", ++i);
- i = 0;
-- fprintf(fh,"# SITE* lines report numbers for every threshold and site:\n");
-+ fprintf(fh,"# SITE* lines report numbers for every threshold:\n");
- fprintf(fh,"# %d) filter id\n", ++i);
- fprintf(fh,"# %d) number of sites which pass the filter\n", ++i);
- fprintf(fh,"# %d) number of SNVs\n", ++i);
-@@ -390,7 +391,7 @@
- {
- if ( als[j]==0 || als[j]==star_allele ) continue;
- if ( als[j] >= rec->n_allele )
-- error("The GT index is out of range at %s:%d in %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[j]);
-+ error("The GT index is out of range at %s:%"PRId64" in %s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->hdr->samples[j]);
-
- if ( args->ac[als[j]]==1 ) { stats->nsingleton++; site_singleton = 1; }
-
---- python-pysam.orig/bcftools/plugins/smpl-stats.c.pysam.c
-+++ python-pysam/bcftools/plugins/smpl-stats.c.pysam.c
-@@ -30,6 +30,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-@@ -232,11 +233,11 @@
- fprintf(fh,"# %d) number of indels\n", ++i);
- fprintf(fh,"# %d) number of singletons\n", ++i);
- fprintf(fh,"# %d) number of missing genotypes (./., ., ./0, etc)\n", ++i);
-- fprintf(fh,"# %d) number of transitions (genotypes such as \"1/2\" are counted twice)\n", ++i);
-- fprintf(fh,"# %d) number of transversions (genotypes such as \"1/2\" are counted twice)\n", ++i);
-+ fprintf(fh,"# %d) number of transitions (alt het genotypes such as \"1/2\" are counted twice)\n", ++i);
-+ fprintf(fh,"# %d) number of transversions (alt het genotypes such as \"1/2\" are counted twice)\n", ++i);
- fprintf(fh,"# %d) overall ts/tv\n", ++i);
- i = 0;
-- fprintf(fh,"# SITE* lines report numbers for every threshold and site:\n");
-+ fprintf(fh,"# SITE* lines report numbers for every threshold:\n");
- fprintf(fh,"# %d) filter id\n", ++i);
- fprintf(fh,"# %d) number of sites which pass the filter\n", ++i);
- fprintf(fh,"# %d) number of SNVs\n", ++i);
-@@ -392,7 +393,7 @@
- {
- if ( als[j]==0 || als[j]==star_allele ) continue;
- if ( als[j] >= rec->n_allele )
-- error("The GT index is out of range at %s:%d in %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[j]);
-+ error("The GT index is out of range at %s:%"PRId64" in %s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->hdr->samples[j]);
-
- if ( args->ac[als[j]]==1 ) { stats->nsingleton++; site_singleton = 1; }
-
---- /dev/null
-+++ python-pysam/bcftools/plugins/split-vep.c
-@@ -0,0 +1,934 @@
-+/* The MIT License
-+
-+ Copyright (c) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/bgzf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/khash_str2int.h>
-+#include "../bcftools.h"
-+#include "../filter.h"
-+#include "../convert.h"
-+#include "../cols.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define SELECT_TR_ALL 0
-+#define SELECT_TR_WORST 1
-+#define SELECT_TR_PRIMARY 2
-+#define SELECT_CSQ_ANY -1
-+
-+typedef struct
-+{
-+ char *field; // the name of the VEP field, e.g. Consequence,Gene,etc.
-+ char *tag; // the name of the VCF tag: the annot_t.field with the -p prefix
-+ int idx; // 0-based index within the VEP annotation string
-+ int type; // annotation type, one of the BCF_HT_* types
-+ kstring_t str; // annotation value, ready to pass to bcf_update_info_*
-+}
-+annot_t;
-+
-+typedef struct
-+{
-+ convert_t *convert;
-+ filter_t *filter;
-+ int argc, filter_logic, regions_is_file, targets_is_file, list_hdr;
-+ kstring_t kstr;
-+ char *filter_str,
-+ *vep_tag; // the --annotation INFO tag to process
-+ char **argv, *output_fname, *fname, *regions, *targets, *format_str;
-+ int output_type;
-+ htsFile *fh_vcf;
-+ BGZF *fh_bgzf;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr, *hdr_out;
-+ int nfield; // number of all available VEP fields
-+ char **field; // list of all available VEP fields
-+ int nannot; // number of requested fields
-+ annot_t *annot; // requested fields
-+ int nscale; // number of items in the severity scale
-+ char **scale; // severity scale (list)
-+ int ncsq_str; // the length of csq_str allocated by bcf_get_info_string()
-+ char *csq_str; // the current bcf_get_info_string() result
-+ int csq_idx, // the index of the Consequence field; for the --select CSQ option
-+ primary_id; // the index of the CANONICAL field; for the --select TR option
-+ char *severity, // the --severity scale option
-+ *select, // the --select option
-+ *column_str, // the --columns option
-+ *annot_prefix; // the --annot-prefix option
-+ void *field2idx, // VEP field name to index, used in initialization
-+ *csq2severity; // consequence type to severity score
-+ cols_t *cols_tr, // the current CSQ tag split into transcripts
-+ *cols_csq; // the current CSQ transcript split into fields
-+ int min_severity, max_severity; // ignore consequences outside this severity range
-+ int drop_sites; // the -x, --drop-sites option
-+ int select_tr; // one of SELECT_TR_*
-+ uint8_t *smpl_pass; // for filtering at sample level, used with -f
-+ int duplicate; // the -d, --duplicate option is set
-+ char *all_fields_delim; // the -A, --all-fields option is set
-+ float *farr; // helper arrays for bcf_update_* functions
-+ int32_t *iarr;
-+ int niarr,miarr, nfarr,mfarr;
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Query structured annotations such as the CSQ created by VEP.\n";
-+}
-+
-+static const char *default_severity(void)
-+{
-+ return
-+ "# Default consequence substrings ordered in ascending order by severity.\n"
-+ "# Consequences with the same severity can be put on the same line in arbitrary order.\n"
-+ "intergenic\n"
-+ "downstream upstream\n"
-+ "intron\n"
-+ "non_coding\n"
-+ "regulatory\n"
-+ "5_prime_utr 3_prime_utr\n"
-+ "stop_retained start_retained synonymous\n"
-+ "splice_region\n"
-+ "coding_sequence\n"
-+ "missense\n"
-+ "inframe\n"
-+ "exon_loss\n"
-+ "disruptive\n"
-+ "splice_acceptor splice_donor\n"
-+ "start_lost stop_lost stop_gained frameshift\n";
-+}
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Query structured annotations such INFO/CSQ created by bcftools/csq or VEP. For more\n"
-+ " more information and pointers see http://samtools.github.io/bcftools/howtos/plugin.split-vep.html\n"
-+ "Usage: bcftools +split-vep [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -a, --annotation STR INFO annotation to parse [CSQ]\n"
-+ " -A, --all-fields DELIM Output all fields replacing the -a tag (\"%CSQ\" by default) in the -f\n"
-+ " filtering expression using the output field delimiter DELIM. This can be\n"
-+ " \"tab\", \"space\" or an arbitrary string.\n"
-+ " -c, --columns LIST[:type] Extract the fields listed either as indexes or names. The default type\n"
-+ " of the new annotation is String but can be also Integer/Int or Float/Real.\n"
-+ " -d, --duplicate Output per transcript/allele consequences on a new line rather rather than\n"
-+ " as comma-separated fields on a single line\n"
-+ " -f, --format <string> Formatting expression for non-VCF/BCF output, same as `bcftools query -f`\n"
-+ " -l, --list Parse the VCF header and list the annotation fields\n"
-+ " -p, --annot-prefix Prefix of INFO annotations to be created after splitting the CSQ string\n"
-+ " -s, --select TR:CSQ Select transcripts to extract by type and/or consequence. (See also the -x switch.)\n"
-+ " TR, transcript: worst,primary(*),all [all]\n"
-+ " CSQ, consequence: any,missense,missense+,etc [any]\n"
-+ " (*) Primary transcripts have the field \"CANONICAL\" set to \"YES\"\n"
-+ " -S, --severity -|FILE Pass \"-\" to print the default severity scale or FILE to override\n"
-+ " the default scale\n"
-+ " -x, --drop-sites Drop sites with none of the consequences matching the severity specified by -s.\n"
-+ " This switch is intended for use with VCF/BCF output (i.e. -f not given).\n"
-+ "Common options:\n"
-+ " -e, --exclude EXPR Exclude sites and samples for which the expression is true\n"
-+ " -i, --include EXPR Include sites and samples for which the expression is true\n"
-+ " -o, --output FILE Output file name [stdout]\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF or text, v: uncompressed VCF or text [v]\n"
-+ " -r, --regions REG Restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE Restrict to regions listed in a file\n"
-+ " -t, --targets REG Similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE Similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Examples:\n"
-+ " # List available fields of the INFO/CSQ annotation\n"
-+ " bcftools +split-vep -l file.vcf.gz\n"
-+ "\n"
-+ " # List the default severity scale\n"
-+ " bcftools +split-vep -S -\n"
-+ "\n"
-+ " # Extract Consequence, IMPACT and gene SYMBOL of the most severe consequence into\n"
-+ " # INFO annotations starting with the prefix \"vep\". For brevity, the columns can\n"
-+ " # be given also as 0-based indexes\n"
-+ " bcftools +split-vep -c Consequence,IMPACT,SYMBOL -s worst -p vep file.vcf.gz\n"
-+ " bcftools +split-vep -c 1-3 -s worst -p vep file.vcf.gz\n"
-+ "\n"
-+ " # Same as above but use the text output of the \"bcftools query\" format\n"
-+ " bcftools +split-vep -s worst -f '%CHROM %POS %Consequence %IMPACT %SYMBOL\\n' file.vcf.gz\n"
-+ "\n"
-+ " # Print all subfields (tab-delimited) in place of %CSQ, each consequence on a new line\n"
-+ " bcftools +split-vep -f '%CHROM %POS %CSQ\\n' -d -A tab file.vcf.gz\n"
-+ "\n"
-+ " # Extract gnomAD_AF subfield into a new INFO/gnomAD_AF annotation of Type=Float so that\n"
-+ " # numeric filtering can be used.\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float file.vcf.gz -i'gnomAD_AF<0.001'\n"
-+ "\n"
-+ " # Similar to above, but add the annotation only if the consequence severity is missense\n"
-+ " # or equivalent. In order to drop sites with different consequences completely, we add\n"
-+ " # the -x switch. See the online documentation referenced above for more examples.\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float -s :missense file.vcf.gz\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float -s :missense -x file.vcf.gz\n"
-+ "\n";
-+}
-+
-+static void expand_csq_expression(args_t *args, kstring_t *str)
-+{
-+ if ( !args->all_fields_delim ) return;
-+
-+ str->l = 0;
-+ kputc('%',str);
-+ kputs(args->vep_tag,str);
-+ char *ptr = strstr(args->format_str,str->s);
-+ if ( !ptr ) return;
-+ char *end = ptr + str->l, tmp = *end;
-+ if ( isalnum(tmp) || tmp=='_' || tmp=='.' ) return;
-+ *end = 0;
-+
-+ str->l = 0;
-+ kputsn(args->format_str, ptr - args->format_str, str);
-+
-+ int i;
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ if ( i>0 ) kputs(args->all_fields_delim, str);
-+ kputc('%', str);
-+ kputs(args->field[i], str);
-+ }
-+
-+ *end = tmp;
-+ kputs(end, str);
-+
-+ free(args->format_str);
-+ args->format_str = str->s;
-+ str->l = str->m = 0;
-+ str->s = NULL;
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+ args->hdr_out = bcf_hdr_dup(args->hdr);
-+
-+ // Parse the header CSQ line, must contain Description with "Format: ..." declaration
-+ bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->hdr, BCF_HL_INFO, NULL, args->vep_tag, NULL);
-+ if ( !hrec ) error("The tag INFO/%s not found in the header\n", args->vep_tag);
-+ int ret = bcf_hrec_find_key(hrec, "Description");
-+ if ( ret<0 ) error("No \"Description\" field was found for the tag INFO/%s in the header\n", args->vep_tag);
-+ char *format = strstr(hrec->vals[ret], "Format: ");
-+ if ( !format ) error("Expected \"Format: \" substring in the header INFO/%s/Description, found: %s\n", args->vep_tag,hrec->vals[ret]);
-+ format += 8;
-+ char *ep = format;
-+ while ( *ep )
-+ {
-+ char *bp = ep;
-+ while ( *ep && *ep!='|' ) ep++;
-+ char tmp = *ep;
-+ *ep = 0;
-+ args->nfield++;
-+ args->field = (char**)realloc(args->field,args->nfield*sizeof(*args->field));
-+ args->field[args->nfield-1] = strdup(bp);
-+ if ( !tmp ) break;
-+ ep++;
-+ }
-+ if ( !args->nfield ) error("Could not parse Description of INFO/%s: %s\n", args->vep_tag,hrec->vals[ret]);
-+ int len = strlen(args->field[args->nfield-1]);
-+ if ( args->field[args->nfield-1][len-1]=='"' ) args->field[args->nfield-1][len-1] = 0; // remove the trailing doublequote character
-+ args->field2idx = khash_str2int_init();
-+ int i,j;
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ if ( khash_str2int_has_key(args->field2idx, args->field[i]) )
-+ {
-+ fprintf(stderr,"Warning: duplicate INFO/%s key \"%s\"\n", args->vep_tag,args->field[i]);
-+ continue;
-+ }
-+ khash_str2int_set(args->field2idx, args->field[i], i);
-+ }
-+
-+ // Create a text output as with `bcftools query -f`. For this we need to determine the fields to be extracted
-+ // from the formatting expression
-+ kstring_t str = {0,0,0};
-+ if ( args->format_str && !args->column_str )
-+ {
-+ // Special case: -A was given, extract all fields, for this the -a tag (%CSQ) must be present
-+ if ( args->all_fields_delim ) expand_csq_expression(args, &str);
-+
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ str.l = 0;
-+ kputc('%',&str);
-+ kputs(args->field[i],&str);
-+ char end, *ptr = args->format_str;
-+ while ( ptr )
-+ {
-+ ptr = strstr(ptr,str.s);
-+ if ( !ptr ) break;
-+ end = ptr[str.l];
-+ if ( isalnum(end) || end=='_' || end=='.' )
-+ {
-+ ptr++;
-+ continue;
-+ }
-+ break;
-+ }
-+ if ( !ptr ) continue;
-+ ptr[str.l] = 0;
-+ int tag_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, ptr+1);
-+ if ( bcf_hdr_idinfo_exists(args->hdr,BCF_HL_INFO,tag_id) )
-+ fprintf(stderr,"Note: ambigous key %s, using the %s subfield of %s, not the INFO/%s tag\n", ptr,ptr+1,args->vep_tag,ptr+1);
-+
-+ int olen = args->column_str ? strlen(args->column_str) : 0;
-+ int nlen = strlen(ptr) - 1;
-+ args->column_str = (char*)realloc(args->column_str, olen + nlen + 2);
-+ if ( olen )
-+ {
-+ memcpy(args->column_str+olen,",",1);
-+ olen++;
-+ }
-+ memcpy(args->column_str+olen,ptr+1,nlen);
-+ args->column_str[olen+nlen] = 0;
-+
-+ ptr[str.l] = end;
-+ }
-+ }
-+
-+ // The "Consequence" column to look up severity, its name is hardwired for now
-+ if ( khash_str2int_get(args->field2idx,"Consequence",&args->csq_idx)!=0 )
-+ error("The field \"Consequence\" is not present in INFO/%s: %s\n", args->vep_tag,hrec->vals[ret]);
-+
-+ // Columns to extract: given as names, 0-based indexes or ranges of indexes
-+ if ( args->column_str )
-+ {
-+ int *column = NULL;
-+ int *types = NULL;
-+ ep = args->column_str;
-+ while ( *ep )
-+ {
-+ char *tp, *bp = ep;
-+ while ( *ep && *ep!=',' ) ep++;
-+ char tmp = *ep;
-+ *ep = 0;
-+ int type = BCF_HT_STR;
-+ int idx_beg, idx_end;
-+ if ( khash_str2int_get(args->field2idx, bp, &idx_beg)==0 )
-+ idx_end = idx_beg;
-+ else if ( (tp=strrchr(bp,':')) )
-+ {
-+ *tp = 0;
-+ if ( khash_str2int_get(args->field2idx, bp, &idx_beg)!=0 )
-+ {
-+ *tp = ':';
-+ error("No such column: \"%s\"\n", bp);
-+ }
-+ idx_end = idx_beg;
-+ *tp = ':';
-+ if ( !strcasecmp(tp+1,"string") ) type = BCF_HT_STR;
-+ else if ( !strcasecmp(tp+1,"float") || !strcasecmp(tp+1,"real") ) type = BCF_HT_REAL;
-+ else if ( !strcasecmp(tp+1,"integer") || !strcasecmp(tp+1,"int") ) type = BCF_HT_INT;
-+ else if ( !strcasecmp(tp+1,"flag") ) type = BCF_HT_FLAG;
-+ else error("The type \"%s\" (or column \"%s\"?) not recognised\n", tp+1,bp);
-+ }
-+ else
-+ {
-+ char *mp;
-+ idx_beg = strtol(bp,&mp,10);
-+ if ( !*mp ) idx_end = idx_beg;
-+ else if ( *mp=='-' )
-+ idx_end = strtol(mp+1,&mp,10);
-+ if ( *mp )
-+ {
-+ if ( *mp==':' )
-+ {
-+ idx_end = idx_beg;
-+ if ( !strcasecmp(mp+1,"string") ) type = BCF_HT_STR;
-+ else if ( !strcasecmp(mp+1,"float") || !strcasecmp(mp+1,"real") ) type = BCF_HT_REAL;
-+ else if ( !strcasecmp(mp+1,"integer") || !strcasecmp(mp+1,"int") ) type = BCF_HT_INT;
-+ else if ( !strcasecmp(mp+1,"flag") ) type = BCF_HT_FLAG;
-+ else error("The type \"%s\" (or column \"%s\"?) not recognised\n", mp+1,bp);
-+ }
-+ else
-+ error("No such column: \"%s\"\n", bp);
-+ }
-+ }
-+
-+ i = args->nannot;
-+ args->nannot += idx_end - idx_beg + 1;
-+ column = (int*)realloc(column,args->nannot*sizeof(*column));
-+ types = (int*)realloc(types,args->nannot*sizeof(*types));
-+ for (j=idx_beg; j<=idx_end; j++)
-+ {
-+ if ( j >= args->nfield ) error("The index is too big: %d\n", j);
-+ column[i] = j;
-+ types[i] = type;
-+ i++;
-+ }
-+ if ( !tmp ) break;
-+ ep++;
-+ }
-+ args->annot = (annot_t*)calloc(args->nannot,sizeof(*args->annot));
-+ int len = args->annot_prefix ? strlen(args->annot_prefix) : 0;
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ ann->type = types[i];
-+ ann->idx = j = column[i];
-+ ann->field = strdup(args->field[j]);
-+ int clen = strlen(args->field[j]);
-+ ann->tag = (char*)malloc(clen+len+1);
-+ if ( len ) memcpy(ann->tag,args->annot_prefix,len);
-+ memcpy(ann->tag+len,ann->field,clen);
-+ ann->tag[len+clen] = 0;
-+ args->kstr.l = 0;
-+ char *type = "String";
-+ if ( ann->type==BCF_HT_REAL ) type = "Float";
-+ else if ( ann->type==BCF_HT_INT ) type = "Integer";
-+ else if ( ann->type==BCF_HT_FLAG ) type = "Flag";
-+ ksprintf(&args->kstr,"##INFO=<ID=%%s,Number=.,Type=%s,Description=\"The %%s field from INFO/%%s\">",type);
-+ bcf_hdr_printf(args->hdr_out, args->kstr.s, ann->tag,ann->field,args->vep_tag);
-+ }
-+ free(column);
-+ free(types);
-+
-+ if ( bcf_hdr_sync(args->hdr_out)<0 )
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
-+ if ( args->format_str )
-+ {
-+ if ( !args->column_str && !args->select ) error("Error: No %s field selected in the formatting expression and -s not given: a typo?\n",args->vep_tag);
-+ args->convert = convert_init(args->hdr_out, NULL, 0, args->format_str);
-+ if ( !args->convert ) error("Could not parse the expression: %s\n", args->format_str);
-+ }
-+ if ( args->filter_str )
-+ {
-+ int max_unpack = args->convert ? convert_max_unpack(args->convert) : 0;
-+ args->filter = filter_init(args->hdr_out, args->filter_str);
-+ max_unpack |= filter_max_unpack(args->filter);
-+ args->sr->max_unpack = max_unpack;
-+ if ( max_unpack & BCF_UN_FMT )
-+ convert_set_option(args->convert, subset_samples, &args->smpl_pass);
-+ }
-+
-+ // Severity scale
-+ args->csq2severity = khash_str2int_init();
-+ int severity = 0;
-+ str.l = 0;
-+ if ( args->severity )
-+ {
-+ kstring_t tmp = {0,0,0};
-+ htsFile *fp = hts_open(args->severity,"r");
-+ if ( !fp ) error("Cannot read %s\n", args->severity);
-+ while ( hts_getline(fp, KS_SEP_LINE, &tmp) > 0 )
-+ {
-+ kputs(tmp.s, &str);
-+ kputc('\n', &str);
-+ }
-+ free(tmp.s);
-+ }
-+ else
-+ kputs(default_severity(),&str);
-+ ep = str.s;
-+ while ( *ep )
-+ {
-+ if ( *ep=='#' )
-+ {
-+ while ( *ep && *ep!='\n' ) { *ep = tolower(*ep); ep++; }
-+ if ( !*ep ) break;
-+ ep++;
-+ continue;
-+ }
-+ char *bp = ep;
-+ while ( *ep && !isspace(*ep) ) { *ep = tolower(*ep); ep++; }
-+ char tmp = *ep;
-+ *ep = 0;
-+ args->nscale++;
-+ args->scale = (char**) realloc(args->scale,args->nscale*sizeof(*args->scale));
-+ args->scale[args->nscale-1] = strdup(bp);
-+ if ( !khash_str2int_has_key(args->csq2severity,args->scale[args->nscale-1]) )
-+ khash_str2int_set(args->csq2severity,args->scale[args->nscale-1], severity);
-+ if ( !tmp ) break;
-+ if ( tmp=='\n' ) severity++;
-+ ep++;
-+ while ( *ep && isspace(*ep) ) ep++;
-+ }
-+ free(str.s);
-+
-+ // Transcript and/or consequence selection
-+ if ( !args->select ) args->select = "all:any";
-+ cols_t *cols = cols_split(args->select, NULL, ':');
-+ char *sel_tr = cols->off[0][0] ? cols->off[0] : "all";
-+ char *sel_csq = cols->n==2 && cols->off[1][0] ? cols->off[1] : "any";
-+ if ( !strcasecmp(sel_tr,"all") ) args->select_tr = SELECT_TR_ALL;
-+ else if ( !strcasecmp(sel_tr,"worst") ) args->select_tr = SELECT_TR_WORST;
-+ else if ( !strcasecmp(sel_tr,"primary") ) args->select_tr = SELECT_TR_PRIMARY;
-+ else error("Error: the transcript selection key \"%s\" is not recognised.\n", sel_tr);
-+ if ( !strcasecmp(sel_csq,"any") ) { args->min_severity = args->max_severity = SELECT_CSQ_ANY; } // to avoid unnecessary lookups
-+ else
-+ {
-+ int len = strlen(sel_csq);
-+ int severity, modifier = '=';
-+ if ( sel_csq[len-1]=='+' ) { modifier = '+'; sel_csq[len-1] = 0; }
-+ else if ( sel_csq[len-1]=='-' ) { modifier = '-'; sel_csq[len-1] = 0; }
-+ if ( khash_str2int_get(args->csq2severity, sel_csq, &severity)!=0 )
-+ error("Error: the consequence \"%s\" is not recognised. Run \"bcftools +split-vep -S ?\" to see the default list.\n", sel_csq);
-+ if ( modifier=='=' ) { args->min_severity = severity; args->max_severity = severity; }
-+ else if ( modifier=='+' ) { args->min_severity = severity; args->max_severity = INT_MAX; }
-+ else if ( modifier=='-' ) { args->min_severity = 0; args->max_severity = severity; }
-+ }
-+ cols_destroy(cols);
-+
-+ // The 'CANONICAL' column to look up severity, its name is hardwired for now
-+ if ( args->select_tr==SELECT_TR_PRIMARY && khash_str2int_get(args->field2idx,"CANONICAL",&args->primary_id)!=0 )
-+ error("The primary transcript was requested but the field \"CANONICAL\" is not present in INFO/%s: %s\n",args->vep_tag,hrec->vals[ret]);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ free(args->farr);
-+ free(args->iarr);
-+ free(args->kstr.s);
-+ free(args->column_str);
-+ free(args->format_str);
-+ cols_destroy(args->cols_csq);
-+ cols_destroy(args->cols_tr);
-+ int i;
-+ for (i=0; i<args->nscale; i++) free(args->scale[i]);
-+ free(args->scale);
-+ for (i=0; i<args->nfield; i++) free(args->field[i]);
-+ free(args->field);
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ free(ann->field);
-+ free(ann->tag);
-+ free(ann->str.s);
-+ }
-+ free(args->annot);
-+ if ( args->field2idx ) khash_str2int_destroy(args->field2idx);
-+ if ( args->csq2severity ) khash_str2int_destroy(args->csq2severity);
-+ bcf_sr_destroy(args->sr);
-+ bcf_hdr_destroy(args->hdr_out);
-+ free(args->csq_str);
-+ if ( args->filter ) filter_destroy(args->filter);
-+ if ( args->convert ) convert_destroy(args->convert);
-+ if ( args->fh_vcf && hts_close(args->fh_vcf)!=0 ) error("Error: close failed .. %s\n",args->output_fname);
-+ if ( args->fh_bgzf && bgzf_close(args->fh_bgzf)!=0 ) error("Error: close failed .. %s\n",args->output_fname);
-+ free(args);
-+}
-+static void list_header(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nfield; i++) printf("%d\t%s\n", i,args->field[i]);
-+}
-+
-+static void csq_to_severity(args_t *args, char *csq, int *min_severity, int *max_severity, int exact_match)
-+{
-+ *min_severity = INT_MAX;
-+ *max_severity = -1;
-+ char *ep = csq;
-+ while ( *ep )
-+ {
-+ char *bp = ep;
-+ while ( *ep && *ep!='&' ) { *ep = tolower(*ep); ep++; }
-+ char tmp = *ep;
-+ *ep = 0;
-+
-+ int i, severity = -1;
-+ if ( khash_str2int_get(args->csq2severity, bp, &severity)!=0 )
-+ {
-+ for (i=0; i<args->nscale; i++)
-+ if ( strstr(bp,args->scale[i]) ) break;
-+
-+ if ( i!=args->nscale )
-+ khash_str2int_get(args->csq2severity, args->scale[i], &severity);
-+ else
-+ severity = args->nscale + 1;
-+
-+ args->nscale++;
-+ args->scale = (char**) realloc(args->scale,args->nscale*sizeof(*args->scale));
-+ args->scale[args->nscale-1] = strdup(bp);
-+ khash_str2int_set(args->csq2severity,args->scale[args->nscale-1], severity);
-+ if ( i==args->nscale )
-+ fprintf(stderr,"Note: assigning a (high) severity score to a new consequence, use -S to override: %s -> %d\n",args->scale[args->nscale-1],args->nscale);
-+
-+ if ( khash_str2int_get(args->csq2severity, bp, &severity)!=0 ) error("FIXME: failed to look up the consequence \"%s\"\n", bp);
-+ }
-+ if ( exact_match < 0 )
-+ {
-+ if ( *min_severity > severity ) *min_severity = severity;
-+ if ( *max_severity < severity ) *max_severity = severity;
-+ }
-+ else
-+ {
-+ if ( severity==exact_match )
-+ {
-+ *min_severity = *max_severity = severity;
-+ *ep = tmp;
-+ return;
-+ }
-+ }
-+
-+ if ( !tmp ) break;
-+ *ep = tmp;
-+ ep++;
-+ }
-+}
-+
-+static int csq_severity_pass(args_t *args, char *csq)
-+{
-+ if ( args->min_severity==args->max_severity && args->min_severity==SELECT_CSQ_ANY ) return 1;
-+
-+ int min_severity, max_severity, exact_match = args->min_severity==args->max_severity ? args->min_severity : -1;
-+ csq_to_severity(args, csq, &min_severity, &max_severity, exact_match);
-+ if ( max_severity < args->min_severity ) return 0;
-+ if ( min_severity > args->max_severity ) return 0;
-+ return 1;
-+}
-+
-+static int get_primary_transcript(args_t *args, bcf1_t *rec, cols_t *cols_tr) // modifies args->cols_csq!
-+{
-+ int i;
-+ for (i=0; i<cols_tr->n; i++)
-+ {
-+ args->cols_csq = cols_split(cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->primary_id >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->primary_id,args->cols_csq->n);
-+ if ( !strcmp("YES",args->cols_csq->off[args->primary_id]) ) return i;
-+ }
-+ return -1;
-+}
-+static int get_worst_transcript(args_t *args, bcf1_t *rec, cols_t *cols_tr) // modifies args->cols_csq!
-+{
-+ int i, max_severity = -1, imax_severity = 0;
-+ for (i=0; i<cols_tr->n; i++)
-+ {
-+ args->cols_csq = cols_split(cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->csq_idx >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->csq_idx,args->cols_csq->n);
-+ char *csq = args->cols_csq->off[args->csq_idx];
-+
-+ int min, max;
-+ csq_to_severity(args, csq, &min, &max, -1);
-+ if ( max_severity < max ) { imax_severity = i; max_severity = max; }
-+ }
-+ return imax_severity;
-+}
-+static void annot_reset(annot_t *annot, int nannot)
-+{
-+ int i;
-+ for (i=0; i<nannot; i++) annot[i].str.l = 0;
-+}
-+static void annot_append(annot_t *ann, char *value)
-+{
-+ if ( ann->str.l ) kputc(',',&ann->str);
-+ kputs(value, &ann->str);
-+}
-+static inline void parse_array_real(char *str, float **arr, int *marr, int *narr)
-+{
-+ char *bp = str, *ep;
-+ float *ptr = *arr;
-+ int i, n = 1, m = *marr;
-+ for (i=0; *bp; bp++)
-+ if ( *bp == ',' ) n++;
-+
-+ hts_expand(float*,n,m,ptr);
-+
-+ i = 0;
-+ bp = str;
-+ while ( *bp )
-+ {
-+ ptr[i] = strtod(bp, &ep);
-+ if ( bp==ep )
-+ bcf_float_set_missing(ptr[i]);
-+ i++;
-+ while ( *ep && *ep!=',' ) ep++;
-+ bp = *ep ? ep + 1 : ep;
-+ }
-+ *narr = i;
-+ *marr = m;
-+ *arr = ptr;
-+}
-+static inline void parse_array_int32(char *str, int **arr, int *marr, int *narr)
-+{
-+ char *bp = str, *ep;
-+ int32_t *ptr = *arr;
-+ int i, n = 1, m = *marr;
-+ for (i=0; *bp; bp++)
-+ if ( *bp == ',' ) n++;
-+
-+ hts_expand(int32_t*,n,m,ptr);
-+
-+ i = 0;
-+ bp = str;
-+ while ( *bp )
-+ {
-+ ptr[i] = strtol(bp, &ep, 10);
-+ if ( bp==ep )
-+ ptr[i] = bcf_int32_missing;
-+ i++;
-+ while ( *ep && *ep!=',' ) ep++;
-+ bp = *ep ? ep + 1 : ep;
-+ }
-+ *narr = i;
-+ *marr = m;
-+ *arr = ptr;
-+}
-+static void filter_and_output(args_t *args, bcf1_t *rec, int severity_pass, int all_missing)
-+{
-+ int i, updated = 0;
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ if ( !ann->str.l ) continue;
-+ if ( ann->type==BCF_HT_REAL )
-+ {
-+ parse_array_real(ann->str.s,&args->farr,&args->mfarr,&args->nfarr);
-+ bcf_update_info_float(args->hdr_out,rec,ann->tag,args->farr,args->nfarr);
-+ }
-+ else if ( ann->type==BCF_HT_INT )
-+ {
-+ parse_array_int32(ann->str.s,&args->iarr,&args->miarr,&args->niarr);
-+ bcf_update_info_int32(args->hdr_out,rec,ann->tag,args->iarr,args->niarr);
-+ }
-+ else
-+ bcf_update_info_string(args->hdr_out,rec,ann->tag,ann->str.s);
-+ updated++;
-+ }
-+ if ( args->filter )
-+ {
-+ int pass = filter_test(args->filter, rec, (const uint8_t**) &args->smpl_pass);
-+ if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
-+ if ( !pass ) return;
-+ }
-+ if ( args->format_str )
-+ {
-+ if ( args->nannot )
-+ {
-+ if ( !updated || all_missing ) return; // the standard case: using -f to print the CSQ subfields, skipping if missing
-+ }
-+ else
-+ {
-+ if ( !severity_pass ) return; // request to print only non-CSQ tags at sites that pass severity
-+ }
-+
-+ args->kstr.l = 0;
-+ convert_line(args->convert, rec, &args->kstr);
-+ if ( args->kstr.l && bgzf_write(args->fh_bgzf, args->kstr.s, args->kstr.l)!=args->kstr.l )
-+ error("Failed to write to %s\n", args->output_fname);
-+ return;
-+ }
-+ if ( bcf_write(args->fh_vcf, args->hdr_out,rec)!=0 )
-+ error("Failed to write to %s\n", args->output_fname);
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ int len = bcf_get_info_string(args->hdr,rec,args->vep_tag,&args->csq_str,&args->ncsq_str);
-+ if ( len<=0 ) return;
-+
-+ args->cols_tr = cols_split(args->csq_str, args->cols_tr, ',');
-+
-+ int i,j, itr_min = 0, itr_max = args->cols_tr->n - 1;
-+ if ( args->select_tr==SELECT_TR_PRIMARY )
-+ {
-+ itr_min = itr_max = get_primary_transcript(args, rec, args->cols_tr);
-+ if ( itr_min<0 ) itr_max = itr_min - 1;
-+ }
-+ else if ( args->select_tr==SELECT_TR_WORST )
-+ itr_min = itr_max = get_worst_transcript(args, rec, args->cols_tr);
-+
-+ annot_reset(args->annot, args->nannot);
-+ int severity_pass = 0; // consequence severity requested via the -s option (BCF record may be output but not annotated)
-+ int all_missing = 1; // transcripts with all requested annotations missing will be discarded if -f was given
-+ static int too_few_fields_warned = 0;
-+ for (i=itr_min; i<=itr_max; i++)
-+ {
-+ args->cols_csq = cols_split(args->cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->csq_idx >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->csq_idx,args->cols_csq->n);
-+
-+ char *csq = args->cols_csq->off[args->csq_idx];
-+ if ( !csq_severity_pass(args, csq) ) continue;
-+ severity_pass = 1;
-+
-+ for (j=0; j<args->nannot; j++)
-+ {
-+ annot_t *ann = &args->annot[j];
-+ if ( ann->idx >= args->cols_csq->n )
-+ {
-+ if ( !too_few_fields_warned )
-+ {
-+ fprintf(stderr, "Warning: fewer %s fields than expected at %s:%"PRId64", filling with dots. This warning is printed only once.\n", args->vep_tag,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ too_few_fields_warned = 1;
-+ }
-+ annot_append(ann, ".");
-+ continue;
-+ }
-+
-+ if ( !*args->cols_csq->off[ann->idx] )
-+ annot_append(ann, "."); // missing value
-+ else
-+ {
-+ annot_append(ann, args->cols_csq->off[ann->idx]);
-+ all_missing = 0;
-+ }
-+ }
-+
-+ if ( args->duplicate )
-+ {
-+ filter_and_output(args, rec, severity_pass, all_missing);
-+ annot_reset(args->annot, args->nannot);
-+ all_missing = 1;
-+ severity_pass = 0;
-+ }
-+ }
-+ if ( !severity_pass && args->drop_sites ) return;
-+ if ( !args->duplicate )
-+ filter_and_output(args, rec, severity_pass, all_missing);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ args->output_type = FT_VCF;
-+ args->vep_tag = "CSQ";
-+ static struct option loptions[] =
-+ {
-+ {"drop-sites",no_argument,0,'x'},
-+ {"all-fields",no_argument,0,'A'},
-+ {"duplicate",no_argument,0,'d'},
-+ {"format",required_argument,0,'f'},
-+ {"annotation",required_argument,0,'a'},
-+ {"annot-prefix",required_argument,0,'p'},
-+ {"columns",required_argument,0,'c'},
-+ {"select",required_argument,0,'s'},
-+ {"severity",required_argument,0,'S'},
-+ {"list",no_argument,0,'l'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "o:O:i:e:r:R:t:T:lS:s:c:p:a:f:dA:x",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'A':
-+ if ( !strcasecmp(optarg,"tab") ) args->all_fields_delim = "\t";
-+ else if ( !strcasecmp(optarg,"space") ) args->all_fields_delim = " ";
-+ else args->all_fields_delim = optarg;
-+ break;
-+ case 'x': args->drop_sites = 1; break;
-+ case 'd': args->duplicate = 1; break;
-+ case 'f': args->format_str = strdup(optarg); break;
-+ case 'a': args->vep_tag = optarg; break;
-+ case 'p': args->annot_prefix = optarg; break;
-+ case 'c': args->column_str = strdup(optarg); break;
-+ case 'S': args->severity = optarg; break;
-+ case 's': args->select = optarg; break;
-+ case 'l': args->list_hdr = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( args->drop_sites && args->format_str ) error("Error: the -x behavior is the default (and only supported) with -f\n");
-+ if ( args->all_fields_delim && !args->format_str ) error("Error: the -A option must be used with -f\n");
-+ if ( args->severity && (!strcmp("?",args->severity) || !strcmp("-",args->severity)) ) error("%s", default_severity());
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ if ( args->list_hdr )
-+ list_header(args);
-+ else
-+ {
-+ if ( !args->format_str && !args->column_str )
-+ {
-+ if ( args->min_severity==SELECT_CSQ_ANY && args->max_severity==SELECT_CSQ_ANY )
-+ error("Error: none of the -c,-f,-s options was given, why not use \"bcftools view\" instead?\n");
-+ else if ( !args->drop_sites )
-+ error("Error: when the -s option is used without -x, everything is printed; why not use \"bcftools view\" instead?\n");
-+ }
-+
-+ if ( args->format_str )
-+ args->fh_bgzf = bgzf_open(args->output_fname, args->output_type&FT_GZ ? "wg" : "wu");
-+ else
-+ {
-+ args->fh_vcf = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-+ if ( bcf_hdr_write(args->fh_vcf, args->hdr_out)!=0 ) error("Failed to write the header to %s\n", args->output_fname);
-+ }
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+ }
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/split-vep.c.pysam.c
-@@ -0,0 +1,936 @@
-+#include "bcftools.pysam.h"
-+
-+/* The MIT License
-+
-+ Copyright (c) 2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <strings.h>
-+#include <getopt.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/bgzf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/khash_str2int.h>
-+#include "../bcftools.h"
-+#include "../filter.h"
-+#include "../convert.h"
-+#include "../cols.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define SELECT_TR_ALL 0
-+#define SELECT_TR_WORST 1
-+#define SELECT_TR_PRIMARY 2
-+#define SELECT_CSQ_ANY -1
-+
-+typedef struct
-+{
-+ char *field; // the name of the VEP field, e.g. Consequence,Gene,etc.
-+ char *tag; // the name of the VCF tag: the annot_t.field with the -p prefix
-+ int idx; // 0-based index within the VEP annotation string
-+ int type; // annotation type, one of the BCF_HT_* types
-+ kstring_t str; // annotation value, ready to pass to bcf_update_info_*
-+}
-+annot_t;
-+
-+typedef struct
-+{
-+ convert_t *convert;
-+ filter_t *filter;
-+ int argc, filter_logic, regions_is_file, targets_is_file, list_hdr;
-+ kstring_t kstr;
-+ char *filter_str,
-+ *vep_tag; // the --annotation INFO tag to process
-+ char **argv, *output_fname, *fname, *regions, *targets, *format_str;
-+ int output_type;
-+ htsFile *fh_vcf;
-+ BGZF *fh_bgzf;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr, *hdr_out;
-+ int nfield; // number of all available VEP fields
-+ char **field; // list of all available VEP fields
-+ int nannot; // number of requested fields
-+ annot_t *annot; // requested fields
-+ int nscale; // number of items in the severity scale
-+ char **scale; // severity scale (list)
-+ int ncsq_str; // the length of csq_str allocated by bcf_get_info_string()
-+ char *csq_str; // the current bcf_get_info_string() result
-+ int csq_idx, // the index of the Consequence field; for the --select CSQ option
-+ primary_id; // the index of the CANONICAL field; for the --select TR option
-+ char *severity, // the --severity scale option
-+ *select, // the --select option
-+ *column_str, // the --columns option
-+ *annot_prefix; // the --annot-prefix option
-+ void *field2idx, // VEP field name to index, used in initialization
-+ *csq2severity; // consequence type to severity score
-+ cols_t *cols_tr, // the current CSQ tag split into transcripts
-+ *cols_csq; // the current CSQ transcript split into fields
-+ int min_severity, max_severity; // ignore consequences outside this severity range
-+ int drop_sites; // the -x, --drop-sites option
-+ int select_tr; // one of SELECT_TR_*
-+ uint8_t *smpl_pass; // for filtering at sample level, used with -f
-+ int duplicate; // the -d, --duplicate option is set
-+ char *all_fields_delim; // the -A, --all-fields option is set
-+ float *farr; // helper arrays for bcf_update_* functions
-+ int32_t *iarr;
-+ int niarr,miarr, nfarr,mfarr;
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Query structured annotations such as the CSQ created by VEP.\n";
-+}
-+
-+static const char *default_severity(void)
-+{
-+ return
-+ "# Default consequence substrings ordered in ascending order by severity.\n"
-+ "# Consequences with the same severity can be put on the same line in arbitrary order.\n"
-+ "intergenic\n"
-+ "downstream upstream\n"
-+ "intron\n"
-+ "non_coding\n"
-+ "regulatory\n"
-+ "5_prime_utr 3_prime_utr\n"
-+ "stop_retained start_retained synonymous\n"
-+ "splice_region\n"
-+ "coding_sequence\n"
-+ "missense\n"
-+ "inframe\n"
-+ "exon_loss\n"
-+ "disruptive\n"
-+ "splice_acceptor splice_donor\n"
-+ "start_lost stop_lost stop_gained frameshift\n";
-+}
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Query structured annotations such INFO/CSQ created by bcftools/csq or VEP. For more\n"
-+ " more information and pointers see http://samtools.github.io/bcftools/howtos/plugin.split-vep.html\n"
-+ "Usage: bcftools +split-vep [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -a, --annotation STR INFO annotation to parse [CSQ]\n"
-+ " -A, --all-fields DELIM Output all fields replacing the -a tag (\"%CSQ\" by default) in the -f\n"
-+ " filtering expression using the output field delimiter DELIM. This can be\n"
-+ " \"tab\", \"space\" or an arbitrary string.\n"
-+ " -c, --columns LIST[:type] Extract the fields listed either as indexes or names. The default type\n"
-+ " of the new annotation is String but can be also Integer/Int or Float/Real.\n"
-+ " -d, --duplicate Output per transcript/allele consequences on a new line rather rather than\n"
-+ " as comma-separated fields on a single line\n"
-+ " -f, --format <string> Formatting expression for non-VCF/BCF output, same as `bcftools query -f`\n"
-+ " -l, --list Parse the VCF header and list the annotation fields\n"
-+ " -p, --annot-prefix Prefix of INFO annotations to be created after splitting the CSQ string\n"
-+ " -s, --select TR:CSQ Select transcripts to extract by type and/or consequence. (See also the -x switch.)\n"
-+ " TR, transcript: worst,primary(*),all [all]\n"
-+ " CSQ, consequence: any,missense,missense+,etc [any]\n"
-+ " (*) Primary transcripts have the field \"CANONICAL\" set to \"YES\"\n"
-+ " -S, --severity -|FILE Pass \"-\" to print the default severity scale or FILE to override\n"
-+ " the default scale\n"
-+ " -x, --drop-sites Drop sites with none of the consequences matching the severity specified by -s.\n"
-+ " This switch is intended for use with VCF/BCF output (i.e. -f not given).\n"
-+ "Common options:\n"
-+ " -e, --exclude EXPR Exclude sites and samples for which the expression is true\n"
-+ " -i, --include EXPR Include sites and samples for which the expression is true\n"
-+ " -o, --output FILE Output file name [bcftools_stdout]\n"
-+ " -O, --output-type b|u|z|v b: compressed BCF, u: uncompressed BCF, z: compressed VCF or text, v: uncompressed VCF or text [v]\n"
-+ " -r, --regions REG Restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE Restrict to regions listed in a file\n"
-+ " -t, --targets REG Similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE Similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Examples:\n"
-+ " # List available fields of the INFO/CSQ annotation\n"
-+ " bcftools +split-vep -l file.vcf.gz\n"
-+ "\n"
-+ " # List the default severity scale\n"
-+ " bcftools +split-vep -S -\n"
-+ "\n"
-+ " # Extract Consequence, IMPACT and gene SYMBOL of the most severe consequence into\n"
-+ " # INFO annotations starting with the prefix \"vep\". For brevity, the columns can\n"
-+ " # be given also as 0-based indexes\n"
-+ " bcftools +split-vep -c Consequence,IMPACT,SYMBOL -s worst -p vep file.vcf.gz\n"
-+ " bcftools +split-vep -c 1-3 -s worst -p vep file.vcf.gz\n"
-+ "\n"
-+ " # Same as above but use the text output of the \"bcftools query\" format\n"
-+ " bcftools +split-vep -s worst -f '%CHROM %POS %Consequence %IMPACT %SYMBOL\\n' file.vcf.gz\n"
-+ "\n"
-+ " # Print all subfields (tab-delimited) in place of %CSQ, each consequence on a new line\n"
-+ " bcftools +split-vep -f '%CHROM %POS %CSQ\\n' -d -A tab file.vcf.gz\n"
-+ "\n"
-+ " # Extract gnomAD_AF subfield into a new INFO/gnomAD_AF annotation of Type=Float so that\n"
-+ " # numeric filtering can be used.\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float file.vcf.gz -i'gnomAD_AF<0.001'\n"
-+ "\n"
-+ " # Similar to above, but add the annotation only if the consequence severity is missense\n"
-+ " # or equivalent. In order to drop sites with different consequences completely, we add\n"
-+ " # the -x switch. See the online documentation referenced above for more examples.\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float -s :missense file.vcf.gz\n"
-+ " bcftools +split-vep -c gnomAD_AF:Float -s :missense -x file.vcf.gz\n"
-+ "\n";
-+}
-+
-+static void expand_csq_expression(args_t *args, kstring_t *str)
-+{
-+ if ( !args->all_fields_delim ) return;
-+
-+ str->l = 0;
-+ kputc('%',str);
-+ kputs(args->vep_tag,str);
-+ char *ptr = strstr(args->format_str,str->s);
-+ if ( !ptr ) return;
-+ char *end = ptr + str->l, tmp = *end;
-+ if ( isalnum(tmp) || tmp=='_' || tmp=='.' ) return;
-+ *end = 0;
-+
-+ str->l = 0;
-+ kputsn(args->format_str, ptr - args->format_str, str);
-+
-+ int i;
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ if ( i>0 ) kputs(args->all_fields_delim, str);
-+ kputc('%', str);
-+ kputs(args->field[i], str);
-+ }
-+
-+ *end = tmp;
-+ kputs(end, str);
-+
-+ free(args->format_str);
-+ args->format_str = str->s;
-+ str->l = str->m = 0;
-+ str->s = NULL;
-+}
-+
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+ args->hdr_out = bcf_hdr_dup(args->hdr);
-+
-+ // Parse the header CSQ line, must contain Description with "Format: ..." declaration
-+ bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->hdr, BCF_HL_INFO, NULL, args->vep_tag, NULL);
-+ if ( !hrec ) error("The tag INFO/%s not found in the header\n", args->vep_tag);
-+ int ret = bcf_hrec_find_key(hrec, "Description");
-+ if ( ret<0 ) error("No \"Description\" field was found for the tag INFO/%s in the header\n", args->vep_tag);
-+ char *format = strstr(hrec->vals[ret], "Format: ");
-+ if ( !format ) error("Expected \"Format: \" substring in the header INFO/%s/Description, found: %s\n", args->vep_tag,hrec->vals[ret]);
-+ format += 8;
-+ char *ep = format;
-+ while ( *ep )
-+ {
-+ char *bp = ep;
-+ while ( *ep && *ep!='|' ) ep++;
-+ char tmp = *ep;
-+ *ep = 0;
-+ args->nfield++;
-+ args->field = (char**)realloc(args->field,args->nfield*sizeof(*args->field));
-+ args->field[args->nfield-1] = strdup(bp);
-+ if ( !tmp ) break;
-+ ep++;
-+ }
-+ if ( !args->nfield ) error("Could not parse Description of INFO/%s: %s\n", args->vep_tag,hrec->vals[ret]);
-+ int len = strlen(args->field[args->nfield-1]);
-+ if ( args->field[args->nfield-1][len-1]=='"' ) args->field[args->nfield-1][len-1] = 0; // remove the trailing doublequote character
-+ args->field2idx = khash_str2int_init();
-+ int i,j;
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ if ( khash_str2int_has_key(args->field2idx, args->field[i]) )
-+ {
-+ fprintf(bcftools_stderr,"Warning: duplicate INFO/%s key \"%s\"\n", args->vep_tag,args->field[i]);
-+ continue;
-+ }
-+ khash_str2int_set(args->field2idx, args->field[i], i);
-+ }
-+
-+ // Create a text output as with `bcftools query -f`. For this we need to determine the fields to be extracted
-+ // from the formatting expression
-+ kstring_t str = {0,0,0};
-+ if ( args->format_str && !args->column_str )
-+ {
-+ // Special case: -A was given, extract all fields, for this the -a tag (%CSQ) must be present
-+ if ( args->all_fields_delim ) expand_csq_expression(args, &str);
-+
-+ for (i=0; i<args->nfield; i++)
-+ {
-+ str.l = 0;
-+ kputc('%',&str);
-+ kputs(args->field[i],&str);
-+ char end, *ptr = args->format_str;
-+ while ( ptr )
-+ {
-+ ptr = strstr(ptr,str.s);
-+ if ( !ptr ) break;
-+ end = ptr[str.l];
-+ if ( isalnum(end) || end=='_' || end=='.' )
-+ {
-+ ptr++;
-+ continue;
-+ }
-+ break;
-+ }
-+ if ( !ptr ) continue;
-+ ptr[str.l] = 0;
-+ int tag_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, ptr+1);
-+ if ( bcf_hdr_idinfo_exists(args->hdr,BCF_HL_INFO,tag_id) )
-+ fprintf(bcftools_stderr,"Note: ambigous key %s, using the %s subfield of %s, not the INFO/%s tag\n", ptr,ptr+1,args->vep_tag,ptr+1);
-+
-+ int olen = args->column_str ? strlen(args->column_str) : 0;
-+ int nlen = strlen(ptr) - 1;
-+ args->column_str = (char*)realloc(args->column_str, olen + nlen + 2);
-+ if ( olen )
-+ {
-+ memcpy(args->column_str+olen,",",1);
-+ olen++;
-+ }
-+ memcpy(args->column_str+olen,ptr+1,nlen);
-+ args->column_str[olen+nlen] = 0;
-+
-+ ptr[str.l] = end;
-+ }
-+ }
-+
-+ // The "Consequence" column to look up severity, its name is hardwired for now
-+ if ( khash_str2int_get(args->field2idx,"Consequence",&args->csq_idx)!=0 )
-+ error("The field \"Consequence\" is not present in INFO/%s: %s\n", args->vep_tag,hrec->vals[ret]);
-+
-+ // Columns to extract: given as names, 0-based indexes or ranges of indexes
-+ if ( args->column_str )
-+ {
-+ int *column = NULL;
-+ int *types = NULL;
-+ ep = args->column_str;
-+ while ( *ep )
-+ {
-+ char *tp, *bp = ep;
-+ while ( *ep && *ep!=',' ) ep++;
-+ char tmp = *ep;
-+ *ep = 0;
-+ int type = BCF_HT_STR;
-+ int idx_beg, idx_end;
-+ if ( khash_str2int_get(args->field2idx, bp, &idx_beg)==0 )
-+ idx_end = idx_beg;
-+ else if ( (tp=strrchr(bp,':')) )
-+ {
-+ *tp = 0;
-+ if ( khash_str2int_get(args->field2idx, bp, &idx_beg)!=0 )
-+ {
-+ *tp = ':';
-+ error("No such column: \"%s\"\n", bp);
-+ }
-+ idx_end = idx_beg;
-+ *tp = ':';
-+ if ( !strcasecmp(tp+1,"string") ) type = BCF_HT_STR;
-+ else if ( !strcasecmp(tp+1,"float") || !strcasecmp(tp+1,"real") ) type = BCF_HT_REAL;
-+ else if ( !strcasecmp(tp+1,"integer") || !strcasecmp(tp+1,"int") ) type = BCF_HT_INT;
-+ else if ( !strcasecmp(tp+1,"flag") ) type = BCF_HT_FLAG;
-+ else error("The type \"%s\" (or column \"%s\"?) not recognised\n", tp+1,bp);
-+ }
-+ else
-+ {
-+ char *mp;
-+ idx_beg = strtol(bp,&mp,10);
-+ if ( !*mp ) idx_end = idx_beg;
-+ else if ( *mp=='-' )
-+ idx_end = strtol(mp+1,&mp,10);
-+ if ( *mp )
-+ {
-+ if ( *mp==':' )
-+ {
-+ idx_end = idx_beg;
-+ if ( !strcasecmp(mp+1,"string") ) type = BCF_HT_STR;
-+ else if ( !strcasecmp(mp+1,"float") || !strcasecmp(mp+1,"real") ) type = BCF_HT_REAL;
-+ else if ( !strcasecmp(mp+1,"integer") || !strcasecmp(mp+1,"int") ) type = BCF_HT_INT;
-+ else if ( !strcasecmp(mp+1,"flag") ) type = BCF_HT_FLAG;
-+ else error("The type \"%s\" (or column \"%s\"?) not recognised\n", mp+1,bp);
-+ }
-+ else
-+ error("No such column: \"%s\"\n", bp);
-+ }
-+ }
-+
-+ i = args->nannot;
-+ args->nannot += idx_end - idx_beg + 1;
-+ column = (int*)realloc(column,args->nannot*sizeof(*column));
-+ types = (int*)realloc(types,args->nannot*sizeof(*types));
-+ for (j=idx_beg; j<=idx_end; j++)
-+ {
-+ if ( j >= args->nfield ) error("The index is too big: %d\n", j);
-+ column[i] = j;
-+ types[i] = type;
-+ i++;
-+ }
-+ if ( !tmp ) break;
-+ ep++;
-+ }
-+ args->annot = (annot_t*)calloc(args->nannot,sizeof(*args->annot));
-+ int len = args->annot_prefix ? strlen(args->annot_prefix) : 0;
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ ann->type = types[i];
-+ ann->idx = j = column[i];
-+ ann->field = strdup(args->field[j]);
-+ int clen = strlen(args->field[j]);
-+ ann->tag = (char*)malloc(clen+len+1);
-+ if ( len ) memcpy(ann->tag,args->annot_prefix,len);
-+ memcpy(ann->tag+len,ann->field,clen);
-+ ann->tag[len+clen] = 0;
-+ args->kstr.l = 0;
-+ char *type = "String";
-+ if ( ann->type==BCF_HT_REAL ) type = "Float";
-+ else if ( ann->type==BCF_HT_INT ) type = "Integer";
-+ else if ( ann->type==BCF_HT_FLAG ) type = "Flag";
-+ ksprintf(&args->kstr,"##INFO=<ID=%%s,Number=.,Type=%s,Description=\"The %%s field from INFO/%%s\">",type);
-+ bcf_hdr_printf(args->hdr_out, args->kstr.s, ann->tag,ann->field,args->vep_tag);
-+ }
-+ free(column);
-+ free(types);
-+
-+ if ( bcf_hdr_sync(args->hdr_out)<0 )
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
-+ if ( args->format_str )
-+ {
-+ if ( !args->column_str && !args->select ) error("Error: No %s field selected in the formatting expression and -s not given: a typo?\n",args->vep_tag);
-+ args->convert = convert_init(args->hdr_out, NULL, 0, args->format_str);
-+ if ( !args->convert ) error("Could not parse the expression: %s\n", args->format_str);
-+ }
-+ if ( args->filter_str )
-+ {
-+ int max_unpack = args->convert ? convert_max_unpack(args->convert) : 0;
-+ args->filter = filter_init(args->hdr_out, args->filter_str);
-+ max_unpack |= filter_max_unpack(args->filter);
-+ args->sr->max_unpack = max_unpack;
-+ if ( max_unpack & BCF_UN_FMT )
-+ convert_set_option(args->convert, subset_samples, &args->smpl_pass);
-+ }
-+
-+ // Severity scale
-+ args->csq2severity = khash_str2int_init();
-+ int severity = 0;
-+ str.l = 0;
-+ if ( args->severity )
-+ {
-+ kstring_t tmp = {0,0,0};
-+ htsFile *fp = hts_open(args->severity,"r");
-+ if ( !fp ) error("Cannot read %s\n", args->severity);
-+ while ( hts_getline(fp, KS_SEP_LINE, &tmp) > 0 )
-+ {
-+ kputs(tmp.s, &str);
-+ kputc('\n', &str);
-+ }
-+ free(tmp.s);
-+ }
-+ else
-+ kputs(default_severity(),&str);
-+ ep = str.s;
-+ while ( *ep )
-+ {
-+ if ( *ep=='#' )
-+ {
-+ while ( *ep && *ep!='\n' ) { *ep = tolower(*ep); ep++; }
-+ if ( !*ep ) break;
-+ ep++;
-+ continue;
-+ }
-+ char *bp = ep;
-+ while ( *ep && !isspace(*ep) ) { *ep = tolower(*ep); ep++; }
-+ char tmp = *ep;
-+ *ep = 0;
-+ args->nscale++;
-+ args->scale = (char**) realloc(args->scale,args->nscale*sizeof(*args->scale));
-+ args->scale[args->nscale-1] = strdup(bp);
-+ if ( !khash_str2int_has_key(args->csq2severity,args->scale[args->nscale-1]) )
-+ khash_str2int_set(args->csq2severity,args->scale[args->nscale-1], severity);
-+ if ( !tmp ) break;
-+ if ( tmp=='\n' ) severity++;
-+ ep++;
-+ while ( *ep && isspace(*ep) ) ep++;
-+ }
-+ free(str.s);
-+
-+ // Transcript and/or consequence selection
-+ if ( !args->select ) args->select = "all:any";
-+ cols_t *cols = cols_split(args->select, NULL, ':');
-+ char *sel_tr = cols->off[0][0] ? cols->off[0] : "all";
-+ char *sel_csq = cols->n==2 && cols->off[1][0] ? cols->off[1] : "any";
-+ if ( !strcasecmp(sel_tr,"all") ) args->select_tr = SELECT_TR_ALL;
-+ else if ( !strcasecmp(sel_tr,"worst") ) args->select_tr = SELECT_TR_WORST;
-+ else if ( !strcasecmp(sel_tr,"primary") ) args->select_tr = SELECT_TR_PRIMARY;
-+ else error("Error: the transcript selection key \"%s\" is not recognised.\n", sel_tr);
-+ if ( !strcasecmp(sel_csq,"any") ) { args->min_severity = args->max_severity = SELECT_CSQ_ANY; } // to avoid unnecessary lookups
-+ else
-+ {
-+ int len = strlen(sel_csq);
-+ int severity, modifier = '=';
-+ if ( sel_csq[len-1]=='+' ) { modifier = '+'; sel_csq[len-1] = 0; }
-+ else if ( sel_csq[len-1]=='-' ) { modifier = '-'; sel_csq[len-1] = 0; }
-+ if ( khash_str2int_get(args->csq2severity, sel_csq, &severity)!=0 )
-+ error("Error: the consequence \"%s\" is not recognised. Run \"bcftools +split-vep -S ?\" to see the default list.\n", sel_csq);
-+ if ( modifier=='=' ) { args->min_severity = severity; args->max_severity = severity; }
-+ else if ( modifier=='+' ) { args->min_severity = severity; args->max_severity = INT_MAX; }
-+ else if ( modifier=='-' ) { args->min_severity = 0; args->max_severity = severity; }
-+ }
-+ cols_destroy(cols);
-+
-+ // The 'CANONICAL' column to look up severity, its name is hardwired for now
-+ if ( args->select_tr==SELECT_TR_PRIMARY && khash_str2int_get(args->field2idx,"CANONICAL",&args->primary_id)!=0 )
-+ error("The primary transcript was requested but the field \"CANONICAL\" is not present in INFO/%s: %s\n",args->vep_tag,hrec->vals[ret]);
-+}
-+static void destroy_data(args_t *args)
-+{
-+ free(args->farr);
-+ free(args->iarr);
-+ free(args->kstr.s);
-+ free(args->column_str);
-+ free(args->format_str);
-+ cols_destroy(args->cols_csq);
-+ cols_destroy(args->cols_tr);
-+ int i;
-+ for (i=0; i<args->nscale; i++) free(args->scale[i]);
-+ free(args->scale);
-+ for (i=0; i<args->nfield; i++) free(args->field[i]);
-+ free(args->field);
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ free(ann->field);
-+ free(ann->tag);
-+ free(ann->str.s);
-+ }
-+ free(args->annot);
-+ if ( args->field2idx ) khash_str2int_destroy(args->field2idx);
-+ if ( args->csq2severity ) khash_str2int_destroy(args->csq2severity);
-+ bcf_sr_destroy(args->sr);
-+ bcf_hdr_destroy(args->hdr_out);
-+ free(args->csq_str);
-+ if ( args->filter ) filter_destroy(args->filter);
-+ if ( args->convert ) convert_destroy(args->convert);
-+ if ( args->fh_vcf && hts_close(args->fh_vcf)!=0 ) error("Error: close failed .. %s\n",args->output_fname);
-+ if ( args->fh_bgzf && bgzf_close(args->fh_bgzf)!=0 ) error("Error: close failed .. %s\n",args->output_fname);
-+ free(args);
-+}
-+static void list_header(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->nfield; i++) fprintf(bcftools_stdout, "%d\t%s\n", i,args->field[i]);
-+}
-+
-+static void csq_to_severity(args_t *args, char *csq, int *min_severity, int *max_severity, int exact_match)
-+{
-+ *min_severity = INT_MAX;
-+ *max_severity = -1;
-+ char *ep = csq;
-+ while ( *ep )
-+ {
-+ char *bp = ep;
-+ while ( *ep && *ep!='&' ) { *ep = tolower(*ep); ep++; }
-+ char tmp = *ep;
-+ *ep = 0;
-+
-+ int i, severity = -1;
-+ if ( khash_str2int_get(args->csq2severity, bp, &severity)!=0 )
-+ {
-+ for (i=0; i<args->nscale; i++)
-+ if ( strstr(bp,args->scale[i]) ) break;
-+
-+ if ( i!=args->nscale )
-+ khash_str2int_get(args->csq2severity, args->scale[i], &severity);
-+ else
-+ severity = args->nscale + 1;
-+
-+ args->nscale++;
-+ args->scale = (char**) realloc(args->scale,args->nscale*sizeof(*args->scale));
-+ args->scale[args->nscale-1] = strdup(bp);
-+ khash_str2int_set(args->csq2severity,args->scale[args->nscale-1], severity);
-+ if ( i==args->nscale )
-+ fprintf(bcftools_stderr,"Note: assigning a (high) severity score to a new consequence, use -S to override: %s -> %d\n",args->scale[args->nscale-1],args->nscale);
-+
-+ if ( khash_str2int_get(args->csq2severity, bp, &severity)!=0 ) error("FIXME: failed to look up the consequence \"%s\"\n", bp);
-+ }
-+ if ( exact_match < 0 )
-+ {
-+ if ( *min_severity > severity ) *min_severity = severity;
-+ if ( *max_severity < severity ) *max_severity = severity;
-+ }
-+ else
-+ {
-+ if ( severity==exact_match )
-+ {
-+ *min_severity = *max_severity = severity;
-+ *ep = tmp;
-+ return;
-+ }
-+ }
-+
-+ if ( !tmp ) break;
-+ *ep = tmp;
-+ ep++;
-+ }
-+}
-+
-+static int csq_severity_pass(args_t *args, char *csq)
-+{
-+ if ( args->min_severity==args->max_severity && args->min_severity==SELECT_CSQ_ANY ) return 1;
-+
-+ int min_severity, max_severity, exact_match = args->min_severity==args->max_severity ? args->min_severity : -1;
-+ csq_to_severity(args, csq, &min_severity, &max_severity, exact_match);
-+ if ( max_severity < args->min_severity ) return 0;
-+ if ( min_severity > args->max_severity ) return 0;
-+ return 1;
-+}
-+
-+static int get_primary_transcript(args_t *args, bcf1_t *rec, cols_t *cols_tr) // modifies args->cols_csq!
-+{
-+ int i;
-+ for (i=0; i<cols_tr->n; i++)
-+ {
-+ args->cols_csq = cols_split(cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->primary_id >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->primary_id,args->cols_csq->n);
-+ if ( !strcmp("YES",args->cols_csq->off[args->primary_id]) ) return i;
-+ }
-+ return -1;
-+}
-+static int get_worst_transcript(args_t *args, bcf1_t *rec, cols_t *cols_tr) // modifies args->cols_csq!
-+{
-+ int i, max_severity = -1, imax_severity = 0;
-+ for (i=0; i<cols_tr->n; i++)
-+ {
-+ args->cols_csq = cols_split(cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->csq_idx >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->csq_idx,args->cols_csq->n);
-+ char *csq = args->cols_csq->off[args->csq_idx];
-+
-+ int min, max;
-+ csq_to_severity(args, csq, &min, &max, -1);
-+ if ( max_severity < max ) { imax_severity = i; max_severity = max; }
-+ }
-+ return imax_severity;
-+}
-+static void annot_reset(annot_t *annot, int nannot)
-+{
-+ int i;
-+ for (i=0; i<nannot; i++) annot[i].str.l = 0;
-+}
-+static void annot_append(annot_t *ann, char *value)
-+{
-+ if ( ann->str.l ) kputc(',',&ann->str);
-+ kputs(value, &ann->str);
-+}
-+static inline void parse_array_real(char *str, float **arr, int *marr, int *narr)
-+{
-+ char *bp = str, *ep;
-+ float *ptr = *arr;
-+ int i, n = 1, m = *marr;
-+ for (i=0; *bp; bp++)
-+ if ( *bp == ',' ) n++;
-+
-+ hts_expand(float*,n,m,ptr);
-+
-+ i = 0;
-+ bp = str;
-+ while ( *bp )
-+ {
-+ ptr[i] = strtod(bp, &ep);
-+ if ( bp==ep )
-+ bcf_float_set_missing(ptr[i]);
-+ i++;
-+ while ( *ep && *ep!=',' ) ep++;
-+ bp = *ep ? ep + 1 : ep;
-+ }
-+ *narr = i;
-+ *marr = m;
-+ *arr = ptr;
-+}
-+static inline void parse_array_int32(char *str, int **arr, int *marr, int *narr)
-+{
-+ char *bp = str, *ep;
-+ int32_t *ptr = *arr;
-+ int i, n = 1, m = *marr;
-+ for (i=0; *bp; bp++)
-+ if ( *bp == ',' ) n++;
-+
-+ hts_expand(int32_t*,n,m,ptr);
-+
-+ i = 0;
-+ bp = str;
-+ while ( *bp )
-+ {
-+ ptr[i] = strtol(bp, &ep, 10);
-+ if ( bp==ep )
-+ ptr[i] = bcf_int32_missing;
-+ i++;
-+ while ( *ep && *ep!=',' ) ep++;
-+ bp = *ep ? ep + 1 : ep;
-+ }
-+ *narr = i;
-+ *marr = m;
-+ *arr = ptr;
-+}
-+static void filter_and_output(args_t *args, bcf1_t *rec, int severity_pass, int all_missing)
-+{
-+ int i, updated = 0;
-+ for (i=0; i<args->nannot; i++)
-+ {
-+ annot_t *ann = &args->annot[i];
-+ if ( !ann->str.l ) continue;
-+ if ( ann->type==BCF_HT_REAL )
-+ {
-+ parse_array_real(ann->str.s,&args->farr,&args->mfarr,&args->nfarr);
-+ bcf_update_info_float(args->hdr_out,rec,ann->tag,args->farr,args->nfarr);
-+ }
-+ else if ( ann->type==BCF_HT_INT )
-+ {
-+ parse_array_int32(ann->str.s,&args->iarr,&args->miarr,&args->niarr);
-+ bcf_update_info_int32(args->hdr_out,rec,ann->tag,args->iarr,args->niarr);
-+ }
-+ else
-+ bcf_update_info_string(args->hdr_out,rec,ann->tag,ann->str.s);
-+ updated++;
-+ }
-+ if ( args->filter )
-+ {
-+ int pass = filter_test(args->filter, rec, (const uint8_t**) &args->smpl_pass);
-+ if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
-+ if ( !pass ) return;
-+ }
-+ if ( args->format_str )
-+ {
-+ if ( args->nannot )
-+ {
-+ if ( !updated || all_missing ) return; // the standard case: using -f to print the CSQ subfields, skipping if missing
-+ }
-+ else
-+ {
-+ if ( !severity_pass ) return; // request to print only non-CSQ tags at sites that pass severity
-+ }
-+
-+ args->kstr.l = 0;
-+ convert_line(args->convert, rec, &args->kstr);
-+ if ( args->kstr.l && bgzf_write(args->fh_bgzf, args->kstr.s, args->kstr.l)!=args->kstr.l )
-+ error("Failed to write to %s\n", args->output_fname);
-+ return;
-+ }
-+ if ( bcf_write(args->fh_vcf, args->hdr_out,rec)!=0 )
-+ error("Failed to write to %s\n", args->output_fname);
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ int len = bcf_get_info_string(args->hdr,rec,args->vep_tag,&args->csq_str,&args->ncsq_str);
-+ if ( len<=0 ) return;
-+
-+ args->cols_tr = cols_split(args->csq_str, args->cols_tr, ',');
-+
-+ int i,j, itr_min = 0, itr_max = args->cols_tr->n - 1;
-+ if ( args->select_tr==SELECT_TR_PRIMARY )
-+ {
-+ itr_min = itr_max = get_primary_transcript(args, rec, args->cols_tr);
-+ if ( itr_min<0 ) itr_max = itr_min - 1;
-+ }
-+ else if ( args->select_tr==SELECT_TR_WORST )
-+ itr_min = itr_max = get_worst_transcript(args, rec, args->cols_tr);
-+
-+ annot_reset(args->annot, args->nannot);
-+ int severity_pass = 0; // consequence severity requested via the -s option (BCF record may be output but not annotated)
-+ int all_missing = 1; // transcripts with all requested annotations missing will be discarded if -f was given
-+ static int too_few_fields_warned = 0;
-+ for (i=itr_min; i<=itr_max; i++)
-+ {
-+ args->cols_csq = cols_split(args->cols_tr->off[i], args->cols_csq, '|');
-+ if ( args->csq_idx >= args->cols_csq->n )
-+ error("Too few columns at %s:%"PRId64" .. %d (Consequence) >= %d\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->csq_idx,args->cols_csq->n);
-+
-+ char *csq = args->cols_csq->off[args->csq_idx];
-+ if ( !csq_severity_pass(args, csq) ) continue;
-+ severity_pass = 1;
-+
-+ for (j=0; j<args->nannot; j++)
-+ {
-+ annot_t *ann = &args->annot[j];
-+ if ( ann->idx >= args->cols_csq->n )
-+ {
-+ if ( !too_few_fields_warned )
-+ {
-+ fprintf(bcftools_stderr, "Warning: fewer %s fields than expected at %s:%"PRId64", filling with dots. This warning is printed only once.\n", args->vep_tag,bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ too_few_fields_warned = 1;
-+ }
-+ annot_append(ann, ".");
-+ continue;
-+ }
-+
-+ if ( !*args->cols_csq->off[ann->idx] )
-+ annot_append(ann, "."); // missing value
-+ else
-+ {
-+ annot_append(ann, args->cols_csq->off[ann->idx]);
-+ all_missing = 0;
-+ }
-+ }
-+
-+ if ( args->duplicate )
-+ {
-+ filter_and_output(args, rec, severity_pass, all_missing);
-+ annot_reset(args->annot, args->nannot);
-+ all_missing = 1;
-+ severity_pass = 0;
-+ }
-+ }
-+ if ( !severity_pass && args->drop_sites ) return;
-+ if ( !args->duplicate )
-+ filter_and_output(args, rec, severity_pass, all_missing);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ args->output_type = FT_VCF;
-+ args->vep_tag = "CSQ";
-+ static struct option loptions[] =
-+ {
-+ {"drop-sites",no_argument,0,'x'},
-+ {"all-fields",no_argument,0,'A'},
-+ {"duplicate",no_argument,0,'d'},
-+ {"format",required_argument,0,'f'},
-+ {"annotation",required_argument,0,'a'},
-+ {"annot-prefix",required_argument,0,'p'},
-+ {"columns",required_argument,0,'c'},
-+ {"select",required_argument,0,'s'},
-+ {"severity",required_argument,0,'S'},
-+ {"list",no_argument,0,'l'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ while ((c = getopt_long(argc, argv, "o:O:i:e:r:R:t:T:lS:s:c:p:a:f:dA:x",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 'A':
-+ if ( !strcasecmp(optarg,"tab") ) args->all_fields_delim = "\t";
-+ else if ( !strcasecmp(optarg,"space") ) args->all_fields_delim = " ";
-+ else args->all_fields_delim = optarg;
-+ break;
-+ case 'x': args->drop_sites = 1; break;
-+ case 'd': args->duplicate = 1; break;
-+ case 'f': args->format_str = strdup(optarg); break;
-+ case 'a': args->vep_tag = optarg; break;
-+ case 'p': args->annot_prefix = optarg; break;
-+ case 'c': args->column_str = strdup(optarg); break;
-+ case 'S': args->severity = optarg; break;
-+ case 's': args->select = optarg; break;
-+ case 'l': args->list_hdr = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ }
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( args->drop_sites && args->format_str ) error("Error: the -x behavior is the default (and only supported) with -f\n");
-+ if ( args->all_fields_delim && !args->format_str ) error("Error: the -A option must be used with -f\n");
-+ if ( args->severity && (!strcmp("?",args->severity) || !strcmp("-",args->severity)) ) error("%s", default_severity());
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ init_data(args);
-+
-+ if ( args->list_hdr )
-+ list_header(args);
-+ else
-+ {
-+ if ( !args->format_str && !args->column_str )
-+ {
-+ if ( args->min_severity==SELECT_CSQ_ANY && args->max_severity==SELECT_CSQ_ANY )
-+ error("Error: none of the -c,-f,-s options was given, why not use \"bcftools view\" instead?\n");
-+ else if ( !args->drop_sites )
-+ error("Error: when the -s option is used without -x, everything is printed; why not use \"bcftools view\" instead?\n");
-+ }
-+
-+ if ( args->format_str )
-+ args->fh_bgzf = bgzf_open(args->output_fname, args->output_type&FT_GZ ? "wg" : "wu");
-+ else
-+ {
-+ args->fh_vcf = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-+ if ( bcf_hdr_write(args->fh_vcf, args->hdr_out)!=0 ) error("Failed to write the header to %s\n", args->output_fname);
-+ }
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+ }
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- python-pysam.orig/bcftools/plugins/split.c
-+++ python-pysam/bcftools/plugins/split.c
-@@ -178,26 +178,6 @@
- if ( !nsmpl ) error("No samples to split: %s\n", args->fname);
- args->fh = (htsFile**)calloc(nsmpl,sizeof(*args->fh));
- args->bnames = set_file_base_names(args);
-- kstring_t str = {0,0,0};
-- for (i=0; i<nsmpl; i++)
-- {
-- if ( !args->bnames[i] ) continue;
-- str.l = 0;
-- kputs(args->output_dir, &str);
-- if ( str.s[str.l-1] != '/' ) kputc('/', &str);
-- int k, l = str.l;
-- kputs(args->bnames[i], &str);
-- for (k=l; k<str.l; k++) if ( isspace(str.s[k]) ) str.s[k] = '_';
-- if ( args->output_type & FT_BCF ) kputs(".bcf", &str);
-- else if ( args->output_type & FT_GZ ) kputs(".vcf.gz", &str);
-- else kputs(".vcf", &str);
-- args->fh[i] = hts_open(str.s, hts_bcf_wmode(args->output_type));
-- if ( args->fh[i] == NULL ) error("Can't write to \"%s\": %s\n", str.s, strerror(errno));
-- bcf_hdr_nsamples(args->hdr_out) = 1;
-- args->hdr_out->samples[0] = args->bnames[i];
-- bcf_hdr_write(args->fh[i], args->hdr_out);
-- }
-- free(str.s);
-
- // parse tags
- int is_info = 0, is_fmt = 0;
-@@ -235,6 +215,57 @@
- {
- args->keep_info = args->keep_fmt = 1;
- }
-+ if ( !args->keep_fmt && !args->nfmt_tags ) args->keep_fmt = 1;
-+ if ( !args->keep_info || args->ninfo_tags || args->nfmt_tags )
-+ {
-+ int j;
-+ for (j=args->hdr_out->nhrec-1; j>=0; j--)
-+ {
-+ bcf_hrec_t *hrec = args->hdr_out->hrec[j];
-+ if ( hrec->type!=BCF_HL_INFO && hrec->type!=BCF_HL_FMT ) continue;
-+ int k = bcf_hrec_find_key(hrec,"ID");
-+ assert( k>=0 ); // this should always be true for valid VCFs
-+ int remove = 0;
-+ if ( hrec->type==BCF_HL_INFO && (!args->keep_info || args->ninfo_tags) )
-+ {
-+ int id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
-+ if ( !args->keep_info || id >= args->ninfo_tags || !args->info_tags[id] ) remove = 1;
-+ }
-+ if ( hrec->type==BCF_HL_FMT && args->nfmt_tags )
-+ {
-+ int id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
-+ if ( id >= args->nfmt_tags || !args->fmt_tags[id] ) remove = 1;
-+ }
-+ if ( remove )
-+ {
-+ char *str = strdup(hrec->vals[k]);
-+ bcf_hdr_remove(args->hdr_out,hrec->type,str);
-+ free(str);
-+ }
-+ }
-+ if ( bcf_hdr_sync(args->hdr_out)!=0 ) error("Failed to update the VCF header\n");
-+ }
-+
-+ kstring_t str = {0,0,0};
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( !args->bnames[i] ) continue;
-+ str.l = 0;
-+ kputs(args->output_dir, &str);
-+ if ( str.s[str.l-1] != '/' ) kputc('/', &str);
-+ int k, l = str.l;
-+ kputs(args->bnames[i], &str);
-+ for (k=l; k<str.l; k++) if ( isspace(str.s[k]) ) str.s[k] = '_';
-+ if ( args->output_type & FT_BCF ) kputs(".bcf", &str);
-+ else if ( args->output_type & FT_GZ ) kputs(".vcf.gz", &str);
-+ else kputs(".vcf", &str);
-+ args->fh[i] = hts_open(str.s, hts_bcf_wmode(args->output_type));
-+ if ( args->fh[i] == NULL ) error("[%s] Error: cannot write to \"%s\": %s\n", __func__, str.s, strerror(errno));
-+ bcf_hdr_nsamples(args->hdr_out) = 1;
-+ args->hdr_out->samples[0] = args->bnames[i];
-+ if ( bcf_hdr_write(args->fh[i], args->hdr_out)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,str.s);
-+ }
-+ free(str.s);
- }
- static void destroy_data(args_t *args)
- {
-@@ -245,7 +276,7 @@
- int i, nsmpl = bcf_hdr_nsamples(args->hdr_in);
- for (i=0; i<nsmpl; i++)
- {
-- if ( args->fh[i] && hts_close(args->fh[i])!=0 ) error("Error: close failed!\n");
-+ if ( args->fh[i] && hts_close(args->fh[i])!=0 ) error("Error: close failed .. %s\n",args->bnames[i]);
- free(args->bnames[i]);
- }
- free(args->bnames);
-@@ -307,7 +338,7 @@
- {
- bcf_fmt_t *fmt = &src->d.fmt[i];
- int id = fmt->id;
-- if ( !args->keep_fmt && !args->fmt_tags[id] ) continue;
-+ if ( !args->keep_fmt && (id>=args->nfmt_tags || !args->fmt_tags[id]) ) continue;
-
- bcf_enc_int1(&tmp, id);
- bcf_enc_size(&tmp, fmt->n, fmt->type);
-@@ -343,7 +374,7 @@
- }
- if ( !out ) out = rec_set_info(args, rec);
- rec_set_format(args, rec, i, out);
-- bcf_write(args->fh[i], args->hdr_out, out);
-+ if ( bcf_write(args->fh[i], args->hdr_out, out)!=0 ) error("[%s] Error: failed to write the record\n", __func__);
- }
- if ( out ) bcf_destroy(out);
- }
---- python-pysam.orig/bcftools/plugins/split.c.pysam.c
-+++ python-pysam/bcftools/plugins/split.c.pysam.c
-@@ -180,26 +180,6 @@
- if ( !nsmpl ) error("No samples to split: %s\n", args->fname);
- args->fh = (htsFile**)calloc(nsmpl,sizeof(*args->fh));
- args->bnames = set_file_base_names(args);
-- kstring_t str = {0,0,0};
-- for (i=0; i<nsmpl; i++)
-- {
-- if ( !args->bnames[i] ) continue;
-- str.l = 0;
-- kputs(args->output_dir, &str);
-- if ( str.s[str.l-1] != '/' ) kputc('/', &str);
-- int k, l = str.l;
-- kputs(args->bnames[i], &str);
-- for (k=l; k<str.l; k++) if ( isspace(str.s[k]) ) str.s[k] = '_';
-- if ( args->output_type & FT_BCF ) kputs(".bcf", &str);
-- else if ( args->output_type & FT_GZ ) kputs(".vcf.gz", &str);
-- else kputs(".vcf", &str);
-- args->fh[i] = hts_open(str.s, hts_bcf_wmode(args->output_type));
-- if ( args->fh[i] == NULL ) error("Can't write to \"%s\": %s\n", str.s, strerror(errno));
-- bcf_hdr_nsamples(args->hdr_out) = 1;
-- args->hdr_out->samples[0] = args->bnames[i];
-- bcf_hdr_write(args->fh[i], args->hdr_out);
-- }
-- free(str.s);
-
- // parse tags
- int is_info = 0, is_fmt = 0;
-@@ -237,6 +217,57 @@
- {
- args->keep_info = args->keep_fmt = 1;
- }
-+ if ( !args->keep_fmt && !args->nfmt_tags ) args->keep_fmt = 1;
-+ if ( !args->keep_info || args->ninfo_tags || args->nfmt_tags )
-+ {
-+ int j;
-+ for (j=args->hdr_out->nhrec-1; j>=0; j--)
-+ {
-+ bcf_hrec_t *hrec = args->hdr_out->hrec[j];
-+ if ( hrec->type!=BCF_HL_INFO && hrec->type!=BCF_HL_FMT ) continue;
-+ int k = bcf_hrec_find_key(hrec,"ID");
-+ assert( k>=0 ); // this should always be true for valid VCFs
-+ int remove = 0;
-+ if ( hrec->type==BCF_HL_INFO && (!args->keep_info || args->ninfo_tags) )
-+ {
-+ int id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
-+ if ( !args->keep_info || id >= args->ninfo_tags || !args->info_tags[id] ) remove = 1;
-+ }
-+ if ( hrec->type==BCF_HL_FMT && args->nfmt_tags )
-+ {
-+ int id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
-+ if ( id >= args->nfmt_tags || !args->fmt_tags[id] ) remove = 1;
-+ }
-+ if ( remove )
-+ {
-+ char *str = strdup(hrec->vals[k]);
-+ bcf_hdr_remove(args->hdr_out,hrec->type,str);
-+ free(str);
-+ }
-+ }
-+ if ( bcf_hdr_sync(args->hdr_out)!=0 ) error("Failed to update the VCF header\n");
-+ }
-+
-+ kstring_t str = {0,0,0};
-+ for (i=0; i<nsmpl; i++)
-+ {
-+ if ( !args->bnames[i] ) continue;
-+ str.l = 0;
-+ kputs(args->output_dir, &str);
-+ if ( str.s[str.l-1] != '/' ) kputc('/', &str);
-+ int k, l = str.l;
-+ kputs(args->bnames[i], &str);
-+ for (k=l; k<str.l; k++) if ( isspace(str.s[k]) ) str.s[k] = '_';
-+ if ( args->output_type & FT_BCF ) kputs(".bcf", &str);
-+ else if ( args->output_type & FT_GZ ) kputs(".vcf.gz", &str);
-+ else kputs(".vcf", &str);
-+ args->fh[i] = hts_open(str.s, hts_bcf_wmode(args->output_type));
-+ if ( args->fh[i] == NULL ) error("[%s] Error: cannot write to \"%s\": %s\n", __func__, str.s, strerror(errno));
-+ bcf_hdr_nsamples(args->hdr_out) = 1;
-+ args->hdr_out->samples[0] = args->bnames[i];
-+ if ( bcf_hdr_write(args->fh[i], args->hdr_out)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,str.s);
-+ }
-+ free(str.s);
- }
- static void destroy_data(args_t *args)
- {
-@@ -247,7 +278,7 @@
- int i, nsmpl = bcf_hdr_nsamples(args->hdr_in);
- for (i=0; i<nsmpl; i++)
- {
-- if ( args->fh[i] && hts_close(args->fh[i])!=0 ) error("Error: close failed!\n");
-+ if ( args->fh[i] && hts_close(args->fh[i])!=0 ) error("Error: close failed .. %s\n",args->bnames[i]);
- free(args->bnames[i]);
- }
- free(args->bnames);
-@@ -309,7 +340,7 @@
- {
- bcf_fmt_t *fmt = &src->d.fmt[i];
- int id = fmt->id;
-- if ( !args->keep_fmt && !args->fmt_tags[id] ) continue;
-+ if ( !args->keep_fmt && (id>=args->nfmt_tags || !args->fmt_tags[id]) ) continue;
-
- bcf_enc_int1(&tmp, id);
- bcf_enc_size(&tmp, fmt->n, fmt->type);
-@@ -345,7 +376,7 @@
- }
- if ( !out ) out = rec_set_info(args, rec);
- rec_set_format(args, rec, i, out);
-- bcf_write(args->fh[i], args->hdr_out, out);
-+ if ( bcf_write(args->fh[i], args->hdr_out, out)!=0 ) error("[%s] Error: failed to write the record\n", __func__);
- }
- if ( out ) bcf_destroy(out);
- }
---- python-pysam.orig/bcftools/plugins/tag2tag.c
-+++ python-pysam/bcftools/plugins/tag2tag.c
-@@ -26,6 +26,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include "bcftools.h"
-@@ -217,8 +218,8 @@
- }
-
- if ( j!=nals*(nals+1)/2 )
-- error("Wrong number of GP values for diploid genotype at %s:%d, expected %d, found %d\n",
-- bcf_seqname(in_hdr,rec),rec->pos+1, nals*(nals+1)/2,j);
-+ error("Wrong number of GP values for diploid genotype at %s:%"PRId64", expected %d, found %d\n",
-+ bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1, nals*(nals+1)/2,j);
-
- if (ptr[jmax] < 1-thresh)
- {
---- python-pysam.orig/bcftools/plugins/tag2tag.c.pysam.c
-+++ python-pysam/bcftools/plugins/tag2tag.c.pysam.c
-@@ -28,6 +28,7 @@
- #include <stdlib.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include "bcftools.h"
-@@ -219,8 +220,8 @@
- }
-
- if ( j!=nals*(nals+1)/2 )
-- error("Wrong number of GP values for diploid genotype at %s:%d, expected %d, found %d\n",
-- bcf_seqname(in_hdr,rec),rec->pos+1, nals*(nals+1)/2,j);
-+ error("Wrong number of GP values for diploid genotype at %s:%"PRId64", expected %d, found %d\n",
-+ bcf_seqname(in_hdr,rec),(int64_t) rec->pos+1, nals*(nals+1)/2,j);
-
- if (ptr[jmax] < 1-thresh)
- {
---- /dev/null
-+++ python-pysam/bcftools/plugins/trio-dnm.c
-@@ -0,0 +1,444 @@
-+/* The MIT License
-+
-+ Copyright (c) 2018-2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+#include <math.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include <errno.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for child, father, mother
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, regions_is_file, targets_is_file, output_type;
-+ char *filter_str;
-+ char **argv, *ped_fname, *pfm, *output_fname, *fname, *regions, *targets;
-+ htsFile *out_fh;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr, *hdr_out;
-+ trio_t *trio;
-+ int has_fmt_ad;
-+ int ntrio, mtrio;
-+ int32_t *pl, *ad, *dnm_qual, *vaf; // input FMT/PL and AD values, output DNM and VAF
-+ int mpl, mad;
-+ double min_score;
-+ double *aprob; // proband's allele probabilities
-+ double *pl3; // normalized PLs converted to probs for proband,father,mother
-+ int maprob, mpl3, midx, *idx, force_ad;
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Screen variants for possible de-novo mutations in trios.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Screen variants for possible de-novo mutations in trios\n"
-+ "Usage: bcftools +trio-dnm [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " --force-AD calculate VAF even if the number of FMT/AD fields is incorrect. Use at your own risk!\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -m, --min-score NUM do not add FMT/DNM annotation if the score is smaller than NUM\n"
-+ " -o, --output FILE output file name [stdout]\n"
-+ " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -p, --pfm P,F,M sample names of proband, father, and mother\n"
-+ " -P, --ped FILE PED file\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Example:\n"
-+ " # Annotate VCF with FORMAT/DNM, run for a single trio\n"
-+ " bcftools +trio-dnm -p proband,father,mother file.bcf\n"
-+ "\n"
-+ " # Same as above, but read the trio(s) from a PED file\n"
-+ " bcftools +trio-dnm -P file.ped file.bcf\n"
-+ "\n"
-+ " # Same as above plus extract a list of significant DNMs using the bcftools/query command\n"
-+ " bcftools +trio-dnm -P file.ped file.bcf -Ou | bcftools query -i'DNM>10' -f'[%CHROM:%POS %SAMPLE %DNM\\n]'\n"
-+ "\n";
-+}
-+
-+static int cmp_trios(const void *_a, const void *_b)
-+{
-+ trio_t *a = (trio_t *) _a;
-+ trio_t *b = (trio_t *) _b;
-+ int i;
-+ int amin = a->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( amin > a->idx[i] ) amin = a->idx[i];
-+ int bmin = b->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( bmin > b->idx[i] ) bmin = b->idx[i];
-+ if ( amin < bmin ) return -1;
-+ if ( amin > bmin ) return 1;
-+ return 0;
-+}
-+static void parse_ped(args_t *args, char *fname)
-+{
-+ htsFile *fp = hts_open(fname, "r");
-+ if ( !fp ) error("Could not read: %s\n", fname);
-+
-+ kstring_t str = {0,0,0};
-+ if ( hts_getline(fp, KS_SEP_LINE, &str) <= 0 ) error("Empty file: %s\n", fname);
-+
-+ int moff = 0, *off = NULL;
-+ do
-+ {
-+ // familyID sampleID paternalID maternalID sex phenotype population relationship siblings secondOrder thirdOrder children comment
-+ // BB03 HG01884 HG01885 HG01956 2 0 ACB child 0 0 0 0
-+ int ncols = ksplit_core(str.s,0,&moff,&off);
-+ if ( ncols<4 ) error("Could not parse the ped file: %s\n", str.s);
-+
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[2]]);
-+ if ( father<0 ) continue;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[3]]);
-+ if ( mother<0 ) continue;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[1]]);
-+ if ( child<0 ) continue;
-+
-+ args->ntrio++;
-+ hts_expand0(trio_t,args->ntrio,args->mtrio,args->trio);
-+ trio_t *trio = &args->trio[args->ntrio-1];
-+ trio->idx[iFATHER] = father;
-+ trio->idx[iMOTHER] = mother;
-+ trio->idx[iCHILD] = child;
-+ }
-+ while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-+
-+ fprintf(stderr,"Identified %d complete trio%s in the VCF file\n", args->ntrio,args->ntrio==1?"":"s");
-+
-+ // sort the sample by index so that they are accessed more or less sequentially
-+ qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-+
-+ free(str.s);
-+ free(off);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
-+}
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ int id;
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/PL is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "AD"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ fprintf(stderr, "Warning: the tag FORMAT/AD is not present in %s, the output tag FORMAT/VAF will not be added\n", args->fname);
-+ else
-+ args->has_fmt_ad = 1;
-+
-+ args->hdr_out = bcf_hdr_dup(args->hdr);
-+ bcf_hdr_append(args->hdr_out, "##FORMAT=<ID=DNM,Number=1,Type=Integer,Description=\"De-novo mutation score, bigger values = bigger confidence\">");
-+ if ( args->has_fmt_ad )
-+ bcf_hdr_append(args->hdr_out, "##FORMAT=<ID=VAF,Number=1,Type=Integer,Description=\"The percentage of ALT reads\">");
-+
-+ int i, n = 0;
-+ char **list;
-+ if ( args->pfm )
-+ {
-+ args->ntrio = 1;
-+ args->trio = (trio_t*) calloc(1,sizeof(trio_t));
-+ list = hts_readlist(args->pfm, 0, &n);
-+ if ( n!=3 ) error("Expected three sample names with -t\n");
-+ args->trio[0].idx[iCHILD] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[0]);
-+ args->trio[0].idx[iFATHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[1]);
-+ args->trio[0].idx[iMOTHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[2]);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( args->trio[0].idx[i] < 0 ) error("The sample is not present: %s\n", list[i]);
-+ free(list[i]);
-+ }
-+ free(list);
-+ }
-+ else
-+ {
-+ parse_ped(args,args->ped_fname);
-+ if ( !args->ntrio ) error("No complete trio present\n");
-+ }
-+
-+ args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ args->dnm_qual = (int32_t*) malloc(sizeof(*args->dnm_qual)*bcf_hdr_nsamples(args->hdr));
-+ args->vaf = (int32_t*) malloc(sizeof(*args->vaf)*bcf_hdr_nsamples(args->hdr));
-+}
-+static void destroy_data(args_t *args)
-+{
-+ free(args->pl3);
-+ free(args->aprob);
-+ free(args->idx);
-+ free(args->dnm_qual);
-+ free(args->vaf);
-+ free(args->trio);
-+ free(args->pl);
-+ free(args->ad);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ bcf_hdr_destroy(args->hdr_out);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static float process_trio(args_t *args, int nals, double *pl[3], int npl, int *al0, int *al1)
-+{
-+ assert( nals>1 );
-+
-+ // determine the two most likely proband's alleles
-+ int i,j,k = 0,tmp;
-+
-+ hts_expand(int,nals,args->midx,args->idx);
-+ hts_expand(double,nals,args->maprob,args->aprob);
-+ for (i=0; i<nals; i++) args->aprob[i] = 0;
-+ for (i=0; i<nals; i++)
-+ {
-+ for (j=0; j<=i; j++)
-+ {
-+ args->aprob[i] += pl[iCHILD][k];
-+ args->aprob[j] += pl[iCHILD][k];
-+ k++;
-+ }
-+ }
-+
-+ // sort in descendent order
-+ double *arr = args->aprob;
-+ int *idx = args->idx;
-+ for (i=0; i<nals; i++) idx[i] = i;
-+ for (i=1; i<nals; i++)
-+ for (j=i; j>0 && arr[idx[j]] > arr[idx[j-1]]; j--)
-+ tmp = idx[j], idx[j] = idx[j-1], idx[j-1] = tmp;
-+
-+ if ( idx[0] < idx[1] ) { *al0 = idx[0]; *al1 = idx[1]; }
-+ else { *al0 = idx[1]; *al1 = idx[0]; }
-+
-+ // Calculate the probability of inheriting the 00, 01, and 11 genotype. For DNM they all will be small
-+ int k00 = bcf_alleles2gt(idx[0],idx[0]);
-+ int k01 = bcf_alleles2gt(idx[0],idx[1]);
-+ int k11 = bcf_alleles2gt(idx[1],idx[1]);
-+ double pd00 = pl[iCHILD][k00] * (pl[iFATHER][k00] + 0.5*pl[iFATHER][k01]) * (pl[iMOTHER][k00] + 0.5*pl[iMOTHER][k01]);
-+ double pd11 = pl[iCHILD][k11] * (pl[iFATHER][k11] + 0.5*pl[iFATHER][k01]) * (pl[iMOTHER][k11] + 0.5*pl[iMOTHER][k01]);
-+ double pd01 = pl[iCHILD][k01] * (pl[iFATHER][k00] * (pl[iMOTHER][k11] + 0.5*pl[iMOTHER][k01]) + pl[iFATHER][k11] * (pl[iMOTHER][k00] + 0.5*pl[iMOTHER][k01])
-+ + 0.5*pl[iFATHER][k01] * (pl[iMOTHER][k00] + pl[iMOTHER][k01] + pl[iMOTHER][k11]));
-+
-+ double max = pd01;
-+ if ( max < pd00 ) max = pd00;
-+ if ( max < pd11 ) max = pd11;
-+ return fabs(4.3429 * log(max));
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec->n_allele==1 )
-+ {
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ return;
-+ }
-+ static int n_ad_warned = 0;
-+ int nret, nsmpl = bcf_hdr_nsamples(args->hdr), n_ad = args->has_fmt_ad;
-+ if ( n_ad )
-+ {
-+ nret = bcf_get_format_int32(args->hdr,rec,"AD",&args->ad,&args->mad);
-+ if ( nret<=0 ) n_ad = 0;
-+ else
-+ {
-+ n_ad = nret / nsmpl;
-+ if ( nret != nsmpl * rec->n_allele )
-+ {
-+ if ( !n_ad_warned )
-+ {
-+ hts_log_warning("Incorrect number of fields for FORMAT/AD at %s:%"PRId64". This warning is printed only once", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ n_ad_warned = 1;
-+ }
-+ if ( !args->force_ad ) n_ad = 0;
-+ }
-+ }
-+ }
-+ nret = bcf_get_format_int32(args->hdr,rec,"PL",&args->pl,&args->mpl);
-+ if ( nret<=0 ) error("The FORMAT/PL tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int npl1 = nret/nsmpl;
-+ if ( npl1!=rec->n_allele*(rec->n_allele+1)/2 )
-+ error("fixme: not a diploid site at %s:%"PRId64": %d alleles, %d PLs\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_allele,npl1);
-+ hts_expand(double,3*npl1,args->mpl3,args->pl3);
-+ int i, j, k, al0, al1, write_dnm = 0, ad_set = 0;
-+ for (i=0; i<nsmpl; i++) args->dnm_qual[i] = bcf_int32_missing;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ double *ppl[3];
-+ for (j=0; j<3; j++)
-+ {
-+ int32_t *src = args->pl + npl1 * args->trio[i].idx[j];
-+ double *dst = ppl[j] = args->pl3 + j*npl1;
-+ double sum = 0;
-+ for (k=0; k<npl1; k++) { dst[k] = pow(10,-0.1*src[k]); sum += dst[k]; }
-+ for (k=0; k<npl1; k++) dst[k] /= sum;
-+ }
-+ int32_t score = process_trio(args, rec->n_allele, ppl, npl1, &al0, &al1);
-+ if ( score >= args->min_score )
-+ {
-+ write_dnm = 1;
-+ args->dnm_qual[ args->trio[i].idx[iCHILD] ] = score;
-+ }
-+
-+ if ( n_ad )
-+ {
-+ if ( al0 < n_ad && al1 < n_ad )
-+ {
-+ ad_set = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int32_t *src = args->ad + n_ad * args->trio[i].idx[j];
-+ args->vaf[ args->trio[i].idx[j] ] = src[al0]+src[al1] ? round(src[al1]*100./(src[al0]+src[al1])) : 0;
-+ }
-+ }
-+ else
-+ for (j=0; j<3; j++) args->vaf[ args->trio[i].idx[j] ] = bcf_int32_missing;
-+ }
-+ }
-+ if ( write_dnm )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,rec,"DNM",args->dnm_qual,nsmpl)!=0 )
-+ error("Failed to write FORMAT/DNM at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ if ( ad_set )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,rec,"VAF",args->vaf,nsmpl)!=0 )
-+ error("Failed to write FORMAT/VAF at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ }
-+ }
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s at %s:%"PRId64"\n", __func__,args->output_fname,bcf_seqname(args->hdr,rec),(int64_t)rec->pos+1);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"force-AD",no_argument,0,1},
-+ {"min-score",required_argument,0,'m'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"ped",required_argument,NULL,'P'},
-+ {"pfm",required_argument,NULL,'p'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ char *tmp;
-+ while ((c = getopt_long(argc, argv, "p:P:o:O:s:i:e:r:R:t:T:m:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 1 : args->force_ad = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ };
-+ break;
-+ case 'P': args->ped_fname = optarg; break;
-+ case 'p': args->pfm = optarg; break;
-+ case 'm': args->min_score = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --min-score %s\n", optarg);
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->ped_fname && !args->pfm ) error("Missing the -p or -P option\n");
-+ if ( args->ped_fname && args->pfm ) error("Expected only -p or -P option, not both\n");
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/trio-dnm.c.pysam.c
-@@ -0,0 +1,446 @@
-+#include "bcftools.pysam.h"
-+
-+/* The MIT License
-+
-+ Copyright (c) 2018-2019 Genome Research Ltd.
-+
-+ Author: Petr Danecek <pd3@sanger.ac.uk>
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+#include <math.h>
-+#include <unistd.h> // for isatty
-+#include <inttypes.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/kstring.h>
-+#include <htslib/kseq.h>
-+#include <htslib/synced_bcf_reader.h>
-+#include <htslib/vcfutils.h>
-+#include <errno.h>
-+#include "bcftools.h"
-+#include "filter.h"
-+
-+
-+// Logic of the filters: include or exclude sites which match the filters?
-+#define FLT_INCLUDE 1
-+#define FLT_EXCLUDE 2
-+
-+#define iCHILD 0
-+#define iFATHER 1
-+#define iMOTHER 2
-+
-+typedef struct
-+{
-+ int idx[3]; // VCF sample index for child, father, mother
-+ int pass; // do all three pass the filters?
-+}
-+trio_t;
-+
-+typedef struct
-+{
-+ int argc, filter_logic, regions_is_file, targets_is_file, output_type;
-+ char *filter_str;
-+ char **argv, *ped_fname, *pfm, *output_fname, *fname, *regions, *targets;
-+ htsFile *out_fh;
-+ bcf_srs_t *sr;
-+ bcf_hdr_t *hdr, *hdr_out;
-+ trio_t *trio;
-+ int has_fmt_ad;
-+ int ntrio, mtrio;
-+ int32_t *pl, *ad, *dnm_qual, *vaf; // input FMT/PL and AD values, output DNM and VAF
-+ int mpl, mad;
-+ double min_score;
-+ double *aprob; // proband's allele probabilities
-+ double *pl3; // normalized PLs converted to probs for proband,father,mother
-+ int maprob, mpl3, midx, *idx, force_ad;
-+}
-+args_t;
-+
-+args_t args;
-+
-+const char *about(void)
-+{
-+ return "Screen variants for possible de-novo mutations in trios.\n";
-+}
-+
-+static const char *usage_text(void)
-+{
-+ return
-+ "\n"
-+ "About: Screen variants for possible de-novo mutations in trios\n"
-+ "Usage: bcftools +trio-dnm [Plugin Options]\n"
-+ "Plugin options:\n"
-+ " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
-+ " --force-AD calculate VAF even if the number of FMT/AD fields is incorrect. Use at your own risk!\n"
-+ " -i, --include EXPR include sites and samples for which the expression is true\n"
-+ " -m, --min-score NUM do not add FMT/DNM annotation if the score is smaller than NUM\n"
-+ " -o, --output FILE output file name [bcftools_stdout]\n"
-+ " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n"
-+ " -p, --pfm P,F,M sample names of proband, father, and mother\n"
-+ " -P, --ped FILE PED file\n"
-+ " -r, --regions REG restrict to comma-separated list of regions\n"
-+ " -R, --regions-file FILE restrict to regions listed in a file\n"
-+ " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-+ " -T, --targets-file FILE similar to -R but streams rather than index-jumps\n"
-+ "\n"
-+ "Example:\n"
-+ " # Annotate VCF with FORMAT/DNM, run for a single trio\n"
-+ " bcftools +trio-dnm -p proband,father,mother file.bcf\n"
-+ "\n"
-+ " # Same as above, but read the trio(s) from a PED file\n"
-+ " bcftools +trio-dnm -P file.ped file.bcf\n"
-+ "\n"
-+ " # Same as above plus extract a list of significant DNMs using the bcftools/query command\n"
-+ " bcftools +trio-dnm -P file.ped file.bcf -Ou | bcftools query -i'DNM>10' -f'[%CHROM:%POS %SAMPLE %DNM\\n]'\n"
-+ "\n";
-+}
-+
-+static int cmp_trios(const void *_a, const void *_b)
-+{
-+ trio_t *a = (trio_t *) _a;
-+ trio_t *b = (trio_t *) _b;
-+ int i;
-+ int amin = a->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( amin > a->idx[i] ) amin = a->idx[i];
-+ int bmin = b->idx[0];
-+ for (i=1; i<3; i++)
-+ if ( bmin > b->idx[i] ) bmin = b->idx[i];
-+ if ( amin < bmin ) return -1;
-+ if ( amin > bmin ) return 1;
-+ return 0;
-+}
-+static void parse_ped(args_t *args, char *fname)
-+{
-+ htsFile *fp = hts_open(fname, "r");
-+ if ( !fp ) error("Could not read: %s\n", fname);
-+
-+ kstring_t str = {0,0,0};
-+ if ( hts_getline(fp, KS_SEP_LINE, &str) <= 0 ) error("Empty file: %s\n", fname);
-+
-+ int moff = 0, *off = NULL;
-+ do
-+ {
-+ // familyID sampleID paternalID maternalID sex phenotype population relationship siblings secondOrder thirdOrder children comment
-+ // BB03 HG01884 HG01885 HG01956 2 0 ACB child 0 0 0 0
-+ int ncols = ksplit_core(str.s,0,&moff,&off);
-+ if ( ncols<4 ) error("Could not parse the ped file: %s\n", str.s);
-+
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[2]]);
-+ if ( father<0 ) continue;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[3]]);
-+ if ( mother<0 ) continue;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,&str.s[off[1]]);
-+ if ( child<0 ) continue;
-+
-+ args->ntrio++;
-+ hts_expand0(trio_t,args->ntrio,args->mtrio,args->trio);
-+ trio_t *trio = &args->trio[args->ntrio-1];
-+ trio->idx[iFATHER] = father;
-+ trio->idx[iMOTHER] = mother;
-+ trio->idx[iCHILD] = child;
-+ }
-+ while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-+
-+ fprintf(bcftools_stderr,"Identified %d complete trio%s in the VCF file\n", args->ntrio,args->ntrio==1?"":"s");
-+
-+ // sort the sample by index so that they are accessed more or less sequentially
-+ qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-+
-+ free(str.s);
-+ free(off);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
-+}
-+static void init_data(args_t *args)
-+{
-+ args->sr = bcf_sr_init();
-+ if ( args->regions )
-+ {
-+ args->sr->require_index = 1;
-+ if ( bcf_sr_set_regions(args->sr, args->regions, args->regions_is_file)<0 ) error("Failed to read the regions: %s\n",args->regions);
-+ }
-+ if ( args->targets && bcf_sr_set_targets(args->sr, args->targets, args->targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n",args->targets);
-+ if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
-+ args->hdr = bcf_sr_get_header(args->sr,0);
-+
-+ int id;
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "PL"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ error("Error: the tag FORMAT/PL is not present in %s\n", args->fname);
-+ if ( (id=bcf_hdr_id2int(args->hdr, BCF_DT_ID, "AD"))<0 || !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FMT,id) )
-+ fprintf(bcftools_stderr, "Warning: the tag FORMAT/AD is not present in %s, the output tag FORMAT/VAF will not be added\n", args->fname);
-+ else
-+ args->has_fmt_ad = 1;
-+
-+ args->hdr_out = bcf_hdr_dup(args->hdr);
-+ bcf_hdr_append(args->hdr_out, "##FORMAT=<ID=DNM,Number=1,Type=Integer,Description=\"De-novo mutation score, bigger values = bigger confidence\">");
-+ if ( args->has_fmt_ad )
-+ bcf_hdr_append(args->hdr_out, "##FORMAT=<ID=VAF,Number=1,Type=Integer,Description=\"The percentage of ALT reads\">");
-+
-+ int i, n = 0;
-+ char **list;
-+ if ( args->pfm )
-+ {
-+ args->ntrio = 1;
-+ args->trio = (trio_t*) calloc(1,sizeof(trio_t));
-+ list = hts_readlist(args->pfm, 0, &n);
-+ if ( n!=3 ) error("Expected three sample names with -t\n");
-+ args->trio[0].idx[iCHILD] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[0]);
-+ args->trio[0].idx[iFATHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[1]);
-+ args->trio[0].idx[iMOTHER] = bcf_hdr_id2int(args->hdr, BCF_DT_SAMPLE, list[2]);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( args->trio[0].idx[i] < 0 ) error("The sample is not present: %s\n", list[i]);
-+ free(list[i]);
-+ }
-+ free(list);
-+ }
-+ else
-+ {
-+ parse_ped(args,args->ped_fname);
-+ if ( !args->ntrio ) error("No complete trio present\n");
-+ }
-+
-+ args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-+ if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+
-+ args->dnm_qual = (int32_t*) malloc(sizeof(*args->dnm_qual)*bcf_hdr_nsamples(args->hdr));
-+ args->vaf = (int32_t*) malloc(sizeof(*args->vaf)*bcf_hdr_nsamples(args->hdr));
-+}
-+static void destroy_data(args_t *args)
-+{
-+ free(args->pl3);
-+ free(args->aprob);
-+ free(args->idx);
-+ free(args->dnm_qual);
-+ free(args->vaf);
-+ free(args->trio);
-+ free(args->pl);
-+ free(args->ad);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-+ bcf_hdr_destroy(args->hdr_out);
-+ bcf_sr_destroy(args->sr);
-+ free(args);
-+}
-+static float process_trio(args_t *args, int nals, double *pl[3], int npl, int *al0, int *al1)
-+{
-+ assert( nals>1 );
-+
-+ // determine the two most likely proband's alleles
-+ int i,j,k = 0,tmp;
-+
-+ hts_expand(int,nals,args->midx,args->idx);
-+ hts_expand(double,nals,args->maprob,args->aprob);
-+ for (i=0; i<nals; i++) args->aprob[i] = 0;
-+ for (i=0; i<nals; i++)
-+ {
-+ for (j=0; j<=i; j++)
-+ {
-+ args->aprob[i] += pl[iCHILD][k];
-+ args->aprob[j] += pl[iCHILD][k];
-+ k++;
-+ }
-+ }
-+
-+ // sort in descendent order
-+ double *arr = args->aprob;
-+ int *idx = args->idx;
-+ for (i=0; i<nals; i++) idx[i] = i;
-+ for (i=1; i<nals; i++)
-+ for (j=i; j>0 && arr[idx[j]] > arr[idx[j-1]]; j--)
-+ tmp = idx[j], idx[j] = idx[j-1], idx[j-1] = tmp;
-+
-+ if ( idx[0] < idx[1] ) { *al0 = idx[0]; *al1 = idx[1]; }
-+ else { *al0 = idx[1]; *al1 = idx[0]; }
-+
-+ // Calculate the probability of inheriting the 00, 01, and 11 genotype. For DNM they all will be small
-+ int k00 = bcf_alleles2gt(idx[0],idx[0]);
-+ int k01 = bcf_alleles2gt(idx[0],idx[1]);
-+ int k11 = bcf_alleles2gt(idx[1],idx[1]);
-+ double pd00 = pl[iCHILD][k00] * (pl[iFATHER][k00] + 0.5*pl[iFATHER][k01]) * (pl[iMOTHER][k00] + 0.5*pl[iMOTHER][k01]);
-+ double pd11 = pl[iCHILD][k11] * (pl[iFATHER][k11] + 0.5*pl[iFATHER][k01]) * (pl[iMOTHER][k11] + 0.5*pl[iMOTHER][k01]);
-+ double pd01 = pl[iCHILD][k01] * (pl[iFATHER][k00] * (pl[iMOTHER][k11] + 0.5*pl[iMOTHER][k01]) + pl[iFATHER][k11] * (pl[iMOTHER][k00] + 0.5*pl[iMOTHER][k01])
-+ + 0.5*pl[iFATHER][k01] * (pl[iMOTHER][k00] + pl[iMOTHER][k01] + pl[iMOTHER][k11]));
-+
-+ double max = pd01;
-+ if ( max < pd00 ) max = pd00;
-+ if ( max < pd11 ) max = pd11;
-+ return fabs(4.3429 * log(max));
-+}
-+static void process_record(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec->n_allele==1 )
-+ {
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ return;
-+ }
-+ static int n_ad_warned = 0;
-+ int nret, nsmpl = bcf_hdr_nsamples(args->hdr), n_ad = args->has_fmt_ad;
-+ if ( n_ad )
-+ {
-+ nret = bcf_get_format_int32(args->hdr,rec,"AD",&args->ad,&args->mad);
-+ if ( nret<=0 ) n_ad = 0;
-+ else
-+ {
-+ n_ad = nret / nsmpl;
-+ if ( nret != nsmpl * rec->n_allele )
-+ {
-+ if ( !n_ad_warned )
-+ {
-+ hts_log_warning("Incorrect number of fields for FORMAT/AD at %s:%"PRId64". This warning is printed only once", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ n_ad_warned = 1;
-+ }
-+ if ( !args->force_ad ) n_ad = 0;
-+ }
-+ }
-+ }
-+ nret = bcf_get_format_int32(args->hdr,rec,"PL",&args->pl,&args->mpl);
-+ if ( nret<=0 ) error("The FORMAT/PL tag not present at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ int npl1 = nret/nsmpl;
-+ if ( npl1!=rec->n_allele*(rec->n_allele+1)/2 )
-+ error("fixme: not a diploid site at %s:%"PRId64": %d alleles, %d PLs\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,rec->n_allele,npl1);
-+ hts_expand(double,3*npl1,args->mpl3,args->pl3);
-+ int i, j, k, al0, al1, write_dnm = 0, ad_set = 0;
-+ for (i=0; i<nsmpl; i++) args->dnm_qual[i] = bcf_int32_missing;
-+ for (i=0; i<args->ntrio; i++)
-+ {
-+ double *ppl[3];
-+ for (j=0; j<3; j++)
-+ {
-+ int32_t *src = args->pl + npl1 * args->trio[i].idx[j];
-+ double *dst = ppl[j] = args->pl3 + j*npl1;
-+ double sum = 0;
-+ for (k=0; k<npl1; k++) { dst[k] = pow(10,-0.1*src[k]); sum += dst[k]; }
-+ for (k=0; k<npl1; k++) dst[k] /= sum;
-+ }
-+ int32_t score = process_trio(args, rec->n_allele, ppl, npl1, &al0, &al1);
-+ if ( score >= args->min_score )
-+ {
-+ write_dnm = 1;
-+ args->dnm_qual[ args->trio[i].idx[iCHILD] ] = score;
-+ }
-+
-+ if ( n_ad )
-+ {
-+ if ( al0 < n_ad && al1 < n_ad )
-+ {
-+ ad_set = 1;
-+ for (j=0; j<3; j++)
-+ {
-+ int32_t *src = args->ad + n_ad * args->trio[i].idx[j];
-+ args->vaf[ args->trio[i].idx[j] ] = src[al0]+src[al1] ? round(src[al1]*100./(src[al0]+src[al1])) : 0;
-+ }
-+ }
-+ else
-+ for (j=0; j<3; j++) args->vaf[ args->trio[i].idx[j] ] = bcf_int32_missing;
-+ }
-+ }
-+ if ( write_dnm )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,rec,"DNM",args->dnm_qual,nsmpl)!=0 )
-+ error("Failed to write FORMAT/DNM at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ if ( ad_set )
-+ {
-+ if ( bcf_update_format_int32(args->hdr_out,rec,"VAF",args->vaf,nsmpl)!=0 )
-+ error("Failed to write FORMAT/VAF at %s:%"PRId64"\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1);
-+ }
-+ }
-+ if ( bcf_write(args->out_fh, args->hdr_out, rec)!=0 ) error("[%s] Error: cannot write to %s at %s:%"PRId64"\n", __func__,args->output_fname,bcf_seqname(args->hdr,rec),(int64_t)rec->pos+1);
-+}
-+
-+int run(int argc, char **argv)
-+{
-+ args_t *args = (args_t*) calloc(1,sizeof(args_t));
-+ args->argc = argc; args->argv = argv;
-+ args->output_fname = "-";
-+ static struct option loptions[] =
-+ {
-+ {"force-AD",no_argument,0,1},
-+ {"min-score",required_argument,0,'m'},
-+ {"include",required_argument,0,'i'},
-+ {"exclude",required_argument,0,'e'},
-+ {"output",required_argument,NULL,'o'},
-+ {"output-type",required_argument,NULL,'O'},
-+ {"ped",required_argument,NULL,'P'},
-+ {"pfm",required_argument,NULL,'p'},
-+ {"regions",1,0,'r'},
-+ {"regions-file",1,0,'R'},
-+ {"targets",1,0,'t'},
-+ {"targets-file",1,0,'T'},
-+ {NULL,0,NULL,0}
-+ };
-+ int c;
-+ char *tmp;
-+ while ((c = getopt_long(argc, argv, "p:P:o:O:s:i:e:r:R:t:T:m:",loptions,NULL)) >= 0)
-+ {
-+ switch (c)
-+ {
-+ case 1 : args->force_ad = 1; break;
-+ case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
-+ case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
-+ case 't': args->targets = optarg; break;
-+ case 'T': args->targets = optarg; args->targets_is_file = 1; break;
-+ case 'r': args->regions = optarg; break;
-+ case 'R': args->regions = optarg; args->regions_is_file = 1; break;
-+ case 'o': args->output_fname = optarg; break;
-+ case 'O':
-+ switch (optarg[0]) {
-+ case 'b': args->output_type = FT_BCF_GZ; break;
-+ case 'u': args->output_type = FT_BCF; break;
-+ case 'z': args->output_type = FT_VCF_GZ; break;
-+ case 'v': args->output_type = FT_VCF; break;
-+ default: error("The output type \"%s\" not recognised\n", optarg);
-+ };
-+ break;
-+ case 'P': args->ped_fname = optarg; break;
-+ case 'p': args->pfm = optarg; break;
-+ case 'm': args->min_score = strtod(optarg,&tmp);
-+ if ( *tmp ) error("Could not parse: --min-score %s\n", optarg);
-+ break;
-+ case 'h':
-+ case '?':
-+ default: error("%s", usage_text()); break;
-+ }
-+ }
-+ if ( optind==argc )
-+ {
-+ if ( !isatty(fileno((FILE *)stdin)) ) args->fname = "-"; // reading from stdin
-+ else { error("%s", usage_text()); }
-+ }
-+ else if ( optind+1!=argc ) error("%s", usage_text());
-+ else args->fname = argv[optind];
-+
-+ if ( !args->ped_fname && !args->pfm ) error("Missing the -p or -P option\n");
-+ if ( args->ped_fname && args->pfm ) error("Expected only -p or -P option, not both\n");
-+
-+ init_data(args);
-+
-+ while ( bcf_sr_next_line(args->sr) )
-+ process_record(args, bcf_sr_get_line(args->sr,0));
-+
-+ destroy_data(args);
-+
-+ return 0;
-+}
---- python-pysam.orig/bcftools/plugins/trio-stats.c
-+++ python-pysam/bcftools/plugins/trio-stats.c
-@@ -1,6 +1,6 @@
- /* The MIT License
-
-- Copyright (c) 2018 Genome Research Ltd.
-+ Copyright (c) 2018-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -26,14 +26,17 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
- #include <htslib/kseq.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/kbitset.h>
- #include "bcftools.h"
- #include "filter.h"
-
-@@ -46,6 +49,9 @@
- #define iFATHER 1
- #define iMOTHER 2
-
-+#define VERBOSE_MENDEL 1
-+#define VERBOSE_TRANSMITTED 2
-+
- typedef struct
- {
- int idx[3]; // VCF sample index for father, mother and child
-@@ -58,11 +64,13 @@
- uint32_t
- npass, // number of genotypes passing the filter
- nnon_ref, // number of non-reference genotypes
-- nmendel_err, // number of mendelian errors
-+ nmendel_err, // number of DNMs / mendelian errors
- nnovel, // a singleton allele, but observed only in the child. Counted as mendel_err as well.
- nsingleton, // het mother or father different from everyone else
-- ndoubleton, // het mother+child or father+child different from everyone else
-- nts, ntv; // number of transitions and transversions
-+ ndoubleton, // het mother+child or father+child different from everyone else (transmitted alleles)
-+ nts, ntv, // number of transitions and transversions
-+ ndnm_recurrent, // number of recurrent DNMs / mendelian errors (counted as GTs, not sites; in ambiguous cases the allele with smaller AF is chosen)
-+ ndnm_hom; // number of homozygous DNMs / mendelian errors
- }
- trio_stats_t;
-
-@@ -76,18 +84,33 @@
-
- typedef struct
- {
-+ kbitset_t *sd_bset; // singleton (1) or doubleton (0) trio?
-+ uint32_t
-+ nalt, // number of all alternate trios
-+ nsd, // number of singleton or doubleton trios
-+ *idx; // indexes of the singleton and doubleon trios
-+}
-+alt_trios_t; // for one alt allele
-+
-+typedef struct
-+{
-+ int max_alt_trios; // maximum number of alternate trios [1]
-+ int malt_trios;
-+ alt_trios_t *alt_trios;
- int argc, filter_logic, regions_is_file, targets_is_file;
- int nflt_str;
- char *filter_str, **flt_str;
-- char **argv, *ped_fname, *output_fname, *fname, *regions, *targets;
-+ char **argv, *ped_fname, *pfm, *output_fname, *fname, *regions, *targets;
- bcf_srs_t *sr;
- bcf_hdr_t *hdr;
- trio_t *trio;
- int ntrio, mtrio;
- flt_stats_t *filters;
- int nfilters;
-- int32_t *gt_arr, *ac, *ac_trio;
-- int mgt_arr, mac, mac_trio;
-+ int32_t *gt_arr, *ac, *ac_trio, *dnm_als;
-+ int mgt_arr, mac, mac_trio, mdnm_als;
-+ int verbose;
-+ FILE *fp_out;
- }
- args_t;
-
-@@ -106,10 +129,14 @@
- " a range of values simultaneously\n"
- "Usage: bcftools +trio-stats [Plugin Options]\n"
- "Plugin options:\n"
-+ " -a, --alt-trios INT for transmission rate consider only sites with at most this\n"
-+ " many alternate trios, 0 for unlimited [0]\n"
-+ " -d, --debug TYPE comma-separted list of features: {mendel-errors,transmitted}\n"
- " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
- " -i, --include EXPR include sites and samples for which the expression is true\n"
- " -o, --output FILE output file name [stdout]\n"
- " -p, --ped FILE PED file\n"
-+ " -P, --pfm P,F,M sample names of proband, father, and mother\n"
- " -r, --regions REG restrict to comma-separated list of regions\n"
- " -R, --regions-file FILE restrict to regions listed in a file\n"
- " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-@@ -169,13 +196,14 @@
- while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-
- fprintf(stderr,"Identified %d complete trios in the VCF file\n", args->ntrio);
-+ if ( !args->ntrio ) error("No complete trio identified\n");
-
- // sort the sample by index so that they are accessed more or less sequentially
- qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- static void parse_filters(args_t *args)
-@@ -231,7 +259,33 @@
- if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
-
-- parse_ped(args, args->ped_fname);
-+ if ( args->ped_fname )
-+ parse_ped(args, args->ped_fname);
-+ else
-+ {
-+ args->ntrio = 1;
-+ args->trio = (trio_t*) calloc(1,sizeof(trio_t));
-+ int ibeg, iend = 0;
-+ while ( args->pfm[iend] && args->pfm[iend]!=',' ) iend++;
-+ if ( !args->pfm[iend] ) error("Could not parse -P %s\n", args->pfm);
-+ args->pfm[iend] = 0;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm);
-+ if ( child<0 ) error("No such sample: \"%s\"\n", args->pfm);
-+ args->pfm[iend] = ',';
-+ ibeg = ++iend;
-+ while ( args->pfm[iend] && args->pfm[iend]!=',' ) iend++;
-+ if ( !args->pfm[iend] ) error("Could not parse -P %s\n", args->pfm);
-+ args->pfm[iend] = 0;
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm+ibeg);
-+ if ( father<0 ) error("No such sample: \"%s\"\n", args->pfm+ibeg);
-+ args->pfm[iend] = ',';
-+ ibeg = ++iend;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm+ibeg);
-+ if ( mother<0 ) error("No such sample: \"%s\"\n", args->pfm+ibeg);
-+ args->trio[0].idx[iFATHER] = father;
-+ args->trio[0].idx[iMOTHER] = mother;
-+ args->trio[0].idx[iCHILD] = child;
-+ }
- parse_filters(args);
-
- int i;
-@@ -261,6 +315,66 @@
- }
- for (i=0; i<args->nfilters; i++)
- args->filters[i].stats = (trio_stats_t*) calloc(args->ntrio,sizeof(trio_stats_t));
-+
-+ args->fp_out = !args->output_fname || !strcmp("-",args->output_fname) ? stdout : fopen(args->output_fname,"w");
-+ if ( !args->fp_out ) error("Could not open the file for writing: %s\n", args->output_fname);
-+ fprintf(args->fp_out,"# CMD line shows the command line used to generate this output\n");
-+ fprintf(args->fp_out,"# DEF lines define expressions for all tested thresholds\n");
-+ fprintf(args->fp_out,"# FLT* lines report numbers for every threshold and every trio:\n");
-+ i = 0;
-+ fprintf(args->fp_out,"# %d) filter id\n", ++i);
-+ fprintf(args->fp_out,"# %d) child\n", ++i);
-+ fprintf(args->fp_out,"# %d) father\n", ++i);
-+ fprintf(args->fp_out,"# %d) mother\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of valid trio genotypes (all trio members pass filters, all non-missing)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of non-reference trio GTs (at least one trio member carries an alternate allele)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of DNMs/Mendelian errors\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of novel singleton alleles in the child (counted also as DNM / Mendelian error)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of untransmitted trio singletons (one alternate allele present in one parent)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transmitted trio singletons (one alternate allele present in one parent and the child)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transitions, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transversions, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) overall ts/tv, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of homozygous DNMs/Mendelian errors (likely genotyping errors)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of recurrent DNMs/Mendelian errors (non-inherited alleles present in other samples; counts GTs, not sites)\n", ++i);
-+ fprintf(args->fp_out, "CMD\t%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) fprintf(args->fp_out, " %s",args->argv[i]);
-+ fprintf(args->fp_out, "\n");
-+}
-+static void alt_trios_reset(args_t *args, int nals)
-+{
-+ int i;
-+ hts_expand0(alt_trios_t, nals, args->malt_trios, args->alt_trios);
-+ for (i=0; i<nals; i++)
-+ {
-+ alt_trios_t *tr = &args->alt_trios[i];
-+ if ( !tr->idx )
-+ {
-+ tr->idx = (uint32_t*)malloc(sizeof(*tr->idx)*args->ntrio);
-+ tr->sd_bset = kbs_init(args->ntrio);
-+ }
-+ else
-+ kbs_clear(tr->sd_bset);
-+ tr->nsd = 0;
-+ tr->nalt = 0;
-+ }
-+}
-+static void alt_trios_destroy(args_t *args)
-+{
-+ if ( !args->max_alt_trios ) return;
-+ int i;
-+ for (i=0; i<args->malt_trios; i++)
-+ {
-+ free(args->alt_trios[i].idx);
-+ kbs_destroy(args->alt_trios[i].sd_bset);
-+ }
-+ free(args->alt_trios);
-+}
-+static inline void alt_trios_add(args_t *args, int itrio, int ial, int is_singleton)
-+{
-+ alt_trios_t *tr = &args->alt_trios[ial];
-+ if ( is_singleton ) kbs_insert(tr->sd_bset, tr->nsd);
-+ tr->idx[ tr->nsd++ ] = itrio;
- }
- static void destroy_data(args_t *args)
- {
-@@ -275,64 +389,47 @@
- for (i=0; i<args->nflt_str; i++) free(args->flt_str[i]);
- free(args->flt_str);
- bcf_sr_destroy(args->sr);
-+ alt_trios_destroy(args);
- free(args->trio);
- free(args->ac);
- free(args->ac_trio);
- free(args->gt_arr);
-+ free(args->dnm_als);
-+ if ( fclose(args->fp_out)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "stdout" : args->output_fname);
- free(args);
- }
- static void report_stats(args_t *args)
- {
- int i = 0,j;
-- FILE *fh = !args->output_fname || !strcmp("-",args->output_fname) ? stdout : fopen(args->output_fname,"w");
-- if ( !fh ) error("Could not open the file for writing: %s\n", args->output_fname);
-- fprintf(fh,"# CMD line shows the command line used to generate this output\n");
-- fprintf(fh,"# DEF lines define expressions for all tested thresholds\n");
-- fprintf(fh,"# FLT* lines report numbers for every threshold and every trio:\n");
-- fprintf(fh,"# %d) filter id\n", ++i);
-- fprintf(fh,"# %d) child\n", ++i);
-- fprintf(fh,"# %d) father\n", ++i);
-- fprintf(fh,"# %d) mother\n", ++i);
-- fprintf(fh,"# %d) number of valid trio genotypes (all trio members pass filters, all non-missing)\n", ++i);
-- fprintf(fh,"# %d) number of non-reference trio GTs (at least one trio member carries an alternate allele)\n", ++i);
-- fprintf(fh,"# %d) number of Mendelian errors\n", ++i);
-- fprintf(fh,"# %d) number of novel singleton alleles in the child (counted also as a Mendelian error)\n", ++i);
-- fprintf(fh,"# %d) number of untransmitted singletons, present only in one parent\n", ++i);
-- fprintf(fh,"# %d) number of transmitted singletons, present only in one parent and the child\n", ++i);
-- fprintf(fh,"# %d) number of transitions, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh,"# %d) number of transversions, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh,"# %d) overall ts/tv, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh, "CMD\t%s", args->argv[0]);
-- for (i=1; i<args->argc; i++) fprintf(fh, " %s",args->argv[i]);
-- fprintf(fh, "\n");
- for (i=0; i<args->nfilters; i++)
- {
- flt_stats_t *flt = &args->filters[i];
-- fprintf(fh,"DEF\tFLT%d\t%s\n", i, flt->expr);
-+ fprintf(args->fp_out,"DEF\tFLT%d\t%s\n", i, flt->expr);
- }
- for (i=0; i<args->nfilters; i++)
- {
- flt_stats_t *flt = &args->filters[i];
- for (j=0; j<args->ntrio; j++)
- {
-- fprintf(fh,"FLT%d", i);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iCHILD]]);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iFATHER]]);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iMOTHER]]);
-+ fprintf(args->fp_out,"FLT%d", i);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iCHILD]]);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iFATHER]]);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iMOTHER]]);
- trio_stats_t *stats = &flt->stats[j];
-- fprintf(fh,"\t%d", stats->npass);
-- fprintf(fh,"\t%d", stats->nnon_ref);
-- fprintf(fh,"\t%d", stats->nmendel_err);
-- fprintf(fh,"\t%d", stats->nnovel);
-- fprintf(fh,"\t%d", stats->nsingleton);
-- fprintf(fh,"\t%d", stats->ndoubleton);
-- fprintf(fh,"\t%d", stats->nts);
-- fprintf(fh,"\t%d", stats->ntv);
-- fprintf(fh,"\t%.2f", stats->ntv ? (float)stats->nts/stats->ntv : INFINITY);
-- fprintf(fh,"\n");
-+ fprintf(args->fp_out,"\t%d", stats->npass);
-+ fprintf(args->fp_out,"\t%d", stats->nnon_ref);
-+ fprintf(args->fp_out,"\t%d", stats->nmendel_err);
-+ fprintf(args->fp_out,"\t%d", stats->nnovel);
-+ fprintf(args->fp_out,"\t%d", stats->nsingleton);
-+ fprintf(args->fp_out,"\t%d", stats->ndoubleton);
-+ fprintf(args->fp_out,"\t%d", stats->nts);
-+ fprintf(args->fp_out,"\t%d", stats->ntv);
-+ fprintf(args->fp_out,"\t%.2f", stats->ntv ? (float)stats->nts/stats->ntv : INFINITY);
-+ fprintf(args->fp_out,"\t%d", stats->ndnm_hom);
-+ fprintf(args->fp_out,"\t%d", stats->ndnm_recurrent);
-+ fprintf(args->fp_out,"\n");
- }
- }
-- if ( fclose(fh)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "stdout" : args->output_fname);
- }
-
- static inline int parse_genotype(int32_t *arr, int ngt1, int idx, int als[2])
-@@ -406,6 +503,7 @@
- hts_expand(int, rec->n_allele, args->mac, args->ac);
- if ( !bcf_calc_ac(args->hdr, rec, args->ac, BCF_UN_INFO|BCF_UN_FMT) ) return;
- hts_expand(int, rec->n_allele, args->mac_trio, args->ac_trio);
-+ hts_expand(int, rec->n_allele, args->mdnm_als, args->dnm_als);
-
- // Get the genotypes
- int ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr);
-@@ -420,6 +518,9 @@
- for (i=1; i<rec->n_allele; i++)
- if ( !rec->d.allele[i][1] && rec->d.allele[i][0]=='*' ) { star_allele = i; break; }
-
-+ // number of non-reference trios
-+ if ( args->max_alt_trios ) alt_trios_reset(args, rec->n_allele);
-+
- // Run the stats
- for (i=0; i<args->ntrio; i++)
- {
-@@ -441,8 +542,7 @@
- for (j=0; j<6; j++)
- {
- if ( als[j]==star_allele ) { has_star_allele = 1; continue; }
-- if ( als[j]==0 ) continue;
-- has_nonref = 1;
-+ if ( als[j]!=0 ) has_nonref = 1;
- args->ac_trio[ als[j] ]++;
- }
- if ( !has_nonref ) continue; // only ref or * in this trio
-@@ -457,7 +557,7 @@
- {
- if ( als[j]==0 || als[j]==star_allele ) continue;
- if ( als[j] >= rec->n_allele )
-- error("The GT index is out of range at %s:%d in %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[args->trio[i].idx[j/2]]);
-+ error("The GT index is out of range at %s:%"PRId64" in %s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->hdr->samples[args->trio[i].idx[j/2]]);
- if ( rec->d.allele[als[j]][1] ) continue;
-
- int alt = bcf_acgt2int(rec->d.allele[als[j]][0]);
-@@ -473,21 +573,111 @@
- if ( has_star_allele ) continue;
-
- // Detect mendelian errors
-- int mendel_ok = (als_child[0]==als_father[0] || als_child[0]==als_father[1]) && (als_child[1]==als_mother[0] || als_child[1]==als_mother[1]) ? 1 : 0;
-- if ( !mendel_ok ) mendel_ok = (als_child[1]==als_father[0] || als_child[1]==als_father[1]) && (als_child[0]==als_mother[0] || als_child[0]==als_mother[1]) ? 1 : 0;
-- if ( !mendel_ok ) stats->nmendel_err++;
-+ int a0F = als_child[0]==als_father[0] || als_child[0]==als_father[1] ? 1 : 0;
-+ int a1M = als_child[1]==als_mother[0] || als_child[1]==als_mother[1] ? 1 : 0;
-+ if ( !a0F || !a1M )
-+ {
-+ int a0M = als_child[0]==als_mother[0] || als_child[0]==als_mother[1] ? 1 : 0;
-+ int a1F = als_child[1]==als_father[0] || als_child[1]==als_father[1] ? 1 : 0;
-+ if ( !a0M || !a1F )
-+ {
-+ stats->nmendel_err++;
-+
-+ int dnm_hom = 0;
-+ if ( als_child[0]==als_child[1] ) { stats->ndnm_hom++; dnm_hom = 1; }
-+
-+ int culprit; // neglecting the unlikely possibility of alt het 1/2 DNM genotype
-+ if ( !a0F && !a0M ) culprit = als_child[0];
-+ else if ( !a1F && !a1M ) culprit = als_child[1];
-+ else if ( args->ac[als_child[0]] < args->ac[als_child[1]] ) culprit = als_child[0];
-+ else culprit = als_child[1];
-+
-+ int dnm_recurrent = 0;
-+ if ( (!dnm_hom && args->ac[culprit]>1) || (dnm_hom && args->ac[culprit]>2) ) { stats->ndnm_recurrent++; dnm_recurrent = 1; }
-+
-+ if ( args->verbose & VERBOSE_MENDEL )
-+ fprintf(args->fp_out,"MERR\t%s\t%"PRId64"\t%s\t%s\t%s\t%s\t%s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]],
-+ dnm_hom ? "HOM" : "-",
-+ dnm_recurrent ? "RECURRENT" : "-"
-+ );
-+ }
-+ }
-
- // Is this a singleton, doubleton, neither?
-- for (j=1; j<rec->n_allele; j++)
-+ for (j=0; j<rec->n_allele; j++)
- {
-- if ( args->ac_trio[j]==1 && args->ac[j]==1 ) // singleton (in parent) or novel (in child)
-+ if ( !args->ac_trio[j] ) continue;
-+ if ( args->max_alt_trios ) args->alt_trios[j].nalt++;
-+
-+ if ( args->ac_trio[j]==1 ) // singleton (in parent) or novel (in child)
- {
- if ( als_child[0]==j || als_child[1]==j ) stats->nnovel++;
-- else stats->nsingleton++;
-+ else
-+ {
-+ if ( !args->max_alt_trios )
-+ {
-+ stats->nsingleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tNO\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]]
-+ );
-+ }
-+ else alt_trios_add(args, i,j,1);
-+ }
-+ }
-+ else if ( args->ac_trio[j]==2 ) // possibly a doubleton
-+ {
-+ if ( (als_child[0]!=j && als_child[1]!=j) || (als_child[0]==j && als_child[1]==j) ) continue;
-+ if ( (als_father[0]==j && als_father[1]==j) || (als_mother[0]==j && als_mother[1]==j) ) continue;
-+ if ( !args->max_alt_trios )
-+ {
-+ stats->ndoubleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tYES\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]]
-+ );
-+ }
-+ else alt_trios_add(args, i,j,0);
- }
-- else if ( args->ac_trio[j]==2 && args->ac[j]==2 ) // possibly a doubleton
-+ }
-+ }
-+ if ( args->max_alt_trios )
-+ {
-+ for (j=0; j<rec->n_allele; j++)
-+ {
-+ alt_trios_t *tr = &args->alt_trios[j];
-+ if ( !tr->nsd || tr->nalt > args->max_alt_trios ) continue;
-+ for (i=0; i<tr->nsd; i++)
- {
-- if ( (als_child[0]==j || als_child[1]==j) && (als_child[0]!=j || als_child[1]!=j) ) stats->ndoubleton++;
-+ int itr = tr->idx[i];
-+ trio_stats_t *stats = &flt->stats[itr];
-+ if ( kbs_exists(tr->sd_bset,i) )
-+ {
-+ stats->nsingleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tNO\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[itr].idx[iCHILD]],
-+ args->hdr->samples[args->trio[itr].idx[iFATHER]],
-+ args->hdr->samples[args->trio[itr].idx[iMOTHER]]
-+ );
-+ }
-+ else
-+ {
-+ stats->ndoubleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tYES\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[itr].idx[iCHILD]],
-+ args->hdr->samples[args->trio[itr].idx[iFATHER]],
-+ args->hdr->samples[args->trio[itr].idx[iMOTHER]]
-+ );
-+ }
- }
- }
- }
-@@ -500,10 +690,13 @@
- args->output_fname = "-";
- static struct option loptions[] =
- {
-+ {"debug",required_argument,0,'d'},
-+ {"alt-trios",required_argument,0,'a'},
- {"include",required_argument,0,'i'},
- {"exclude",required_argument,0,'e'},
- {"output",required_argument,NULL,'o'},
- {"ped",required_argument,NULL,'p'},
-+ {"pfm",required_argument,NULL,'P'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
- {"targets",1,0,'t'},
-@@ -511,10 +704,25 @@
- {NULL,0,NULL,0}
- };
- int c, i;
-- while ((c = getopt_long(argc, argv, "p:o:s:i:e:r:R:t:T:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "P:p:o:s:i:e:r:R:t:T:a:d:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-+ case 'd':
-+ {
-+ int n;
-+ char **tmp = hts_readlist(optarg, 0, &n);
-+ for(i=0; i<n; i++)
-+ {
-+ if ( !strcasecmp(tmp[i],"mendel-errors") ) args->verbose |= VERBOSE_MENDEL;
-+ else if ( !strcasecmp(tmp[i],"transmitted") ) args->verbose |= VERBOSE_TRANSMITTED;
-+ else error("Error: The argument \"%s\" to option --debug is not recognised\n", tmp[i]);
-+ free(tmp[i]);
-+ }
-+ free(tmp);
-+ break;
-+ }
-+ case 'a': args->max_alt_trios = atoi(optarg); break;
- case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 't': args->targets = optarg; break;
-@@ -523,6 +731,7 @@
- case 'R': args->regions = optarg; args->regions_is_file = 1; break;
- case 'o': args->output_fname = optarg; break;
- case 'p': args->ped_fname = optarg; break;
-+ case 'P': args->pfm = optarg; break;
- case 'h':
- case '?':
- default: error("%s", usage_text()); break;
-@@ -536,7 +745,7 @@
- else if ( optind+1!=argc ) error("%s", usage_text());
- else args->fname = argv[optind];
-
-- if ( !args->ped_fname ) error("Missing the -p, --ped option\n");
-+ if ( !args->ped_fname && !args->pfm ) error("Missing the -p or -P option\n");
-
- init_data(args);
-
---- python-pysam.orig/bcftools/plugins/trio-stats.c.pysam.c
-+++ python-pysam/bcftools/plugins/trio-stats.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* The MIT License
-
-- Copyright (c) 2018 Genome Research Ltd.
-+ Copyright (c) 2018-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -28,14 +28,17 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <strings.h>
- #include <getopt.h>
- #include <unistd.h> // for isatty
-+#include <inttypes.h>
- #include <htslib/hts.h>
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
- #include <htslib/kseq.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/kbitset.h>
- #include "bcftools.h"
- #include "filter.h"
-
-@@ -48,6 +51,9 @@
- #define iFATHER 1
- #define iMOTHER 2
-
-+#define VERBOSE_MENDEL 1
-+#define VERBOSE_TRANSMITTED 2
-+
- typedef struct
- {
- int idx[3]; // VCF sample index for father, mother and child
-@@ -60,11 +66,13 @@
- uint32_t
- npass, // number of genotypes passing the filter
- nnon_ref, // number of non-reference genotypes
-- nmendel_err, // number of mendelian errors
-+ nmendel_err, // number of DNMs / mendelian errors
- nnovel, // a singleton allele, but observed only in the child. Counted as mendel_err as well.
- nsingleton, // het mother or father different from everyone else
-- ndoubleton, // het mother+child or father+child different from everyone else
-- nts, ntv; // number of transitions and transversions
-+ ndoubleton, // het mother+child or father+child different from everyone else (transmitted alleles)
-+ nts, ntv, // number of transitions and transversions
-+ ndnm_recurrent, // number of recurrent DNMs / mendelian errors (counted as GTs, not sites; in ambiguous cases the allele with smaller AF is chosen)
-+ ndnm_hom; // number of homozygous DNMs / mendelian errors
- }
- trio_stats_t;
-
-@@ -78,18 +86,33 @@
-
- typedef struct
- {
-+ kbitset_t *sd_bset; // singleton (1) or doubleton (0) trio?
-+ uint32_t
-+ nalt, // number of all alternate trios
-+ nsd, // number of singleton or doubleton trios
-+ *idx; // indexes of the singleton and doubleon trios
-+}
-+alt_trios_t; // for one alt allele
-+
-+typedef struct
-+{
-+ int max_alt_trios; // maximum number of alternate trios [1]
-+ int malt_trios;
-+ alt_trios_t *alt_trios;
- int argc, filter_logic, regions_is_file, targets_is_file;
- int nflt_str;
- char *filter_str, **flt_str;
-- char **argv, *ped_fname, *output_fname, *fname, *regions, *targets;
-+ char **argv, *ped_fname, *pfm, *output_fname, *fname, *regions, *targets;
- bcf_srs_t *sr;
- bcf_hdr_t *hdr;
- trio_t *trio;
- int ntrio, mtrio;
- flt_stats_t *filters;
- int nfilters;
-- int32_t *gt_arr, *ac, *ac_trio;
-- int mgt_arr, mac, mac_trio;
-+ int32_t *gt_arr, *ac, *ac_trio, *dnm_als;
-+ int mgt_arr, mac, mac_trio, mdnm_als;
-+ int verbose;
-+ FILE *fp_out;
- }
- args_t;
-
-@@ -108,10 +131,14 @@
- " a range of values simultaneously\n"
- "Usage: bcftools +trio-stats [Plugin Options]\n"
- "Plugin options:\n"
-+ " -a, --alt-trios INT for transmission rate consider only sites with at most this\n"
-+ " many alternate trios, 0 for unlimited [0]\n"
-+ " -d, --debug TYPE comma-separted list of features: {mendel-errors,transmitted}\n"
- " -e, --exclude EXPR exclude sites and samples for which the expression is true\n"
- " -i, --include EXPR include sites and samples for which the expression is true\n"
- " -o, --output FILE output file name [bcftools_stdout]\n"
- " -p, --ped FILE PED file\n"
-+ " -P, --pfm P,F,M sample names of proband, father, and mother\n"
- " -r, --regions REG restrict to comma-separated list of regions\n"
- " -R, --regions-file FILE restrict to regions listed in a file\n"
- " -t, --targets REG similar to -r but streams rather than index-jumps\n"
-@@ -171,13 +198,14 @@
- while ( hts_getline(fp, KS_SEP_LINE, &str)>=0 );
-
- fprintf(bcftools_stderr,"Identified %d complete trios in the VCF file\n", args->ntrio);
-+ if ( !args->ntrio ) error("No complete trio identified\n");
-
- // sort the sample by index so that they are accessed more or less sequentially
- qsort(args->trio,args->ntrio,sizeof(trio_t),cmp_trios);
-
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- static void parse_filters(args_t *args)
-@@ -233,7 +261,33 @@
- if ( !bcf_sr_add_reader(args->sr,args->fname) ) error("Error: %s\n", bcf_sr_strerror(args->sr->errnum));
- args->hdr = bcf_sr_get_header(args->sr,0);
-
-- parse_ped(args, args->ped_fname);
-+ if ( args->ped_fname )
-+ parse_ped(args, args->ped_fname);
-+ else
-+ {
-+ args->ntrio = 1;
-+ args->trio = (trio_t*) calloc(1,sizeof(trio_t));
-+ int ibeg, iend = 0;
-+ while ( args->pfm[iend] && args->pfm[iend]!=',' ) iend++;
-+ if ( !args->pfm[iend] ) error("Could not parse -P %s\n", args->pfm);
-+ args->pfm[iend] = 0;
-+ int child = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm);
-+ if ( child<0 ) error("No such sample: \"%s\"\n", args->pfm);
-+ args->pfm[iend] = ',';
-+ ibeg = ++iend;
-+ while ( args->pfm[iend] && args->pfm[iend]!=',' ) iend++;
-+ if ( !args->pfm[iend] ) error("Could not parse -P %s\n", args->pfm);
-+ args->pfm[iend] = 0;
-+ int father = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm+ibeg);
-+ if ( father<0 ) error("No such sample: \"%s\"\n", args->pfm+ibeg);
-+ args->pfm[iend] = ',';
-+ ibeg = ++iend;
-+ int mother = bcf_hdr_id2int(args->hdr,BCF_DT_SAMPLE,args->pfm+ibeg);
-+ if ( mother<0 ) error("No such sample: \"%s\"\n", args->pfm+ibeg);
-+ args->trio[0].idx[iFATHER] = father;
-+ args->trio[0].idx[iMOTHER] = mother;
-+ args->trio[0].idx[iCHILD] = child;
-+ }
- parse_filters(args);
-
- int i;
-@@ -263,6 +317,66 @@
- }
- for (i=0; i<args->nfilters; i++)
- args->filters[i].stats = (trio_stats_t*) calloc(args->ntrio,sizeof(trio_stats_t));
-+
-+ args->fp_out = !args->output_fname || !strcmp("-",args->output_fname) ? bcftools_stdout : fopen(args->output_fname,"w");
-+ if ( !args->fp_out ) error("Could not open the file for writing: %s\n", args->output_fname);
-+ fprintf(args->fp_out,"# CMD line shows the command line used to generate this output\n");
-+ fprintf(args->fp_out,"# DEF lines define expressions for all tested thresholds\n");
-+ fprintf(args->fp_out,"# FLT* lines report numbers for every threshold and every trio:\n");
-+ i = 0;
-+ fprintf(args->fp_out,"# %d) filter id\n", ++i);
-+ fprintf(args->fp_out,"# %d) child\n", ++i);
-+ fprintf(args->fp_out,"# %d) father\n", ++i);
-+ fprintf(args->fp_out,"# %d) mother\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of valid trio genotypes (all trio members pass filters, all non-missing)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of non-reference trio GTs (at least one trio member carries an alternate allele)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of DNMs/Mendelian errors\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of novel singleton alleles in the child (counted also as DNM / Mendelian error)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of untransmitted trio singletons (one alternate allele present in one parent)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transmitted trio singletons (one alternate allele present in one parent and the child)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transitions, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of transversions, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) overall ts/tv, all distinct ALT alleles present in the trio are considered\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of homozygous DNMs/Mendelian errors (likely genotyping errors)\n", ++i);
-+ fprintf(args->fp_out,"# %d) number of recurrent DNMs/Mendelian errors (non-inherited alleles present in other samples; counts GTs, not sites)\n", ++i);
-+ fprintf(args->fp_out, "CMD\t%s", args->argv[0]);
-+ for (i=1; i<args->argc; i++) fprintf(args->fp_out, " %s",args->argv[i]);
-+ fprintf(args->fp_out, "\n");
-+}
-+static void alt_trios_reset(args_t *args, int nals)
-+{
-+ int i;
-+ hts_expand0(alt_trios_t, nals, args->malt_trios, args->alt_trios);
-+ for (i=0; i<nals; i++)
-+ {
-+ alt_trios_t *tr = &args->alt_trios[i];
-+ if ( !tr->idx )
-+ {
-+ tr->idx = (uint32_t*)malloc(sizeof(*tr->idx)*args->ntrio);
-+ tr->sd_bset = kbs_init(args->ntrio);
-+ }
-+ else
-+ kbs_clear(tr->sd_bset);
-+ tr->nsd = 0;
-+ tr->nalt = 0;
-+ }
-+}
-+static void alt_trios_destroy(args_t *args)
-+{
-+ if ( !args->max_alt_trios ) return;
-+ int i;
-+ for (i=0; i<args->malt_trios; i++)
-+ {
-+ free(args->alt_trios[i].idx);
-+ kbs_destroy(args->alt_trios[i].sd_bset);
-+ }
-+ free(args->alt_trios);
-+}
-+static inline void alt_trios_add(args_t *args, int itrio, int ial, int is_singleton)
-+{
-+ alt_trios_t *tr = &args->alt_trios[ial];
-+ if ( is_singleton ) kbs_insert(tr->sd_bset, tr->nsd);
-+ tr->idx[ tr->nsd++ ] = itrio;
- }
- static void destroy_data(args_t *args)
- {
-@@ -277,64 +391,47 @@
- for (i=0; i<args->nflt_str; i++) free(args->flt_str[i]);
- free(args->flt_str);
- bcf_sr_destroy(args->sr);
-+ alt_trios_destroy(args);
- free(args->trio);
- free(args->ac);
- free(args->ac_trio);
- free(args->gt_arr);
-+ free(args->dnm_als);
-+ if ( fclose(args->fp_out)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "bcftools_stdout" : args->output_fname);
- free(args);
- }
- static void report_stats(args_t *args)
- {
- int i = 0,j;
-- FILE *fh = !args->output_fname || !strcmp("-",args->output_fname) ? bcftools_stdout : fopen(args->output_fname,"w");
-- if ( !fh ) error("Could not open the file for writing: %s\n", args->output_fname);
-- fprintf(fh,"# CMD line shows the command line used to generate this output\n");
-- fprintf(fh,"# DEF lines define expressions for all tested thresholds\n");
-- fprintf(fh,"# FLT* lines report numbers for every threshold and every trio:\n");
-- fprintf(fh,"# %d) filter id\n", ++i);
-- fprintf(fh,"# %d) child\n", ++i);
-- fprintf(fh,"# %d) father\n", ++i);
-- fprintf(fh,"# %d) mother\n", ++i);
-- fprintf(fh,"# %d) number of valid trio genotypes (all trio members pass filters, all non-missing)\n", ++i);
-- fprintf(fh,"# %d) number of non-reference trio GTs (at least one trio member carries an alternate allele)\n", ++i);
-- fprintf(fh,"# %d) number of Mendelian errors\n", ++i);
-- fprintf(fh,"# %d) number of novel singleton alleles in the child (counted also as a Mendelian error)\n", ++i);
-- fprintf(fh,"# %d) number of untransmitted singletons, present only in one parent\n", ++i);
-- fprintf(fh,"# %d) number of transmitted singletons, present only in one parent and the child\n", ++i);
-- fprintf(fh,"# %d) number of transitions, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh,"# %d) number of transversions, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh,"# %d) overall ts/tv, all ALT alleles present in the trio are considered\n", ++i);
-- fprintf(fh, "CMD\t%s", args->argv[0]);
-- for (i=1; i<args->argc; i++) fprintf(fh, " %s",args->argv[i]);
-- fprintf(fh, "\n");
- for (i=0; i<args->nfilters; i++)
- {
- flt_stats_t *flt = &args->filters[i];
-- fprintf(fh,"DEF\tFLT%d\t%s\n", i, flt->expr);
-+ fprintf(args->fp_out,"DEF\tFLT%d\t%s\n", i, flt->expr);
- }
- for (i=0; i<args->nfilters; i++)
- {
- flt_stats_t *flt = &args->filters[i];
- for (j=0; j<args->ntrio; j++)
- {
-- fprintf(fh,"FLT%d", i);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iCHILD]]);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iFATHER]]);
-- fprintf(fh,"\t%s",args->hdr->samples[args->trio[j].idx[iMOTHER]]);
-+ fprintf(args->fp_out,"FLT%d", i);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iCHILD]]);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iFATHER]]);
-+ fprintf(args->fp_out,"\t%s",args->hdr->samples[args->trio[j].idx[iMOTHER]]);
- trio_stats_t *stats = &flt->stats[j];
-- fprintf(fh,"\t%d", stats->npass);
-- fprintf(fh,"\t%d", stats->nnon_ref);
-- fprintf(fh,"\t%d", stats->nmendel_err);
-- fprintf(fh,"\t%d", stats->nnovel);
-- fprintf(fh,"\t%d", stats->nsingleton);
-- fprintf(fh,"\t%d", stats->ndoubleton);
-- fprintf(fh,"\t%d", stats->nts);
-- fprintf(fh,"\t%d", stats->ntv);
-- fprintf(fh,"\t%.2f", stats->ntv ? (float)stats->nts/stats->ntv : INFINITY);
-- fprintf(fh,"\n");
-+ fprintf(args->fp_out,"\t%d", stats->npass);
-+ fprintf(args->fp_out,"\t%d", stats->nnon_ref);
-+ fprintf(args->fp_out,"\t%d", stats->nmendel_err);
-+ fprintf(args->fp_out,"\t%d", stats->nnovel);
-+ fprintf(args->fp_out,"\t%d", stats->nsingleton);
-+ fprintf(args->fp_out,"\t%d", stats->ndoubleton);
-+ fprintf(args->fp_out,"\t%d", stats->nts);
-+ fprintf(args->fp_out,"\t%d", stats->ntv);
-+ fprintf(args->fp_out,"\t%.2f", stats->ntv ? (float)stats->nts/stats->ntv : INFINITY);
-+ fprintf(args->fp_out,"\t%d", stats->ndnm_hom);
-+ fprintf(args->fp_out,"\t%d", stats->ndnm_recurrent);
-+ fprintf(args->fp_out,"\n");
- }
- }
-- if ( fclose(fh)!=0 ) error("Close failed: %s\n", (!args->output_fname || !strcmp("-",args->output_fname)) ? "bcftools_stdout" : args->output_fname);
- }
-
- static inline int parse_genotype(int32_t *arr, int ngt1, int idx, int als[2])
-@@ -408,6 +505,7 @@
- hts_expand(int, rec->n_allele, args->mac, args->ac);
- if ( !bcf_calc_ac(args->hdr, rec, args->ac, BCF_UN_INFO|BCF_UN_FMT) ) return;
- hts_expand(int, rec->n_allele, args->mac_trio, args->ac_trio);
-+ hts_expand(int, rec->n_allele, args->mdnm_als, args->dnm_als);
-
- // Get the genotypes
- int ngt = bcf_get_genotypes(args->hdr, rec, &args->gt_arr, &args->mgt_arr);
-@@ -422,6 +520,9 @@
- for (i=1; i<rec->n_allele; i++)
- if ( !rec->d.allele[i][1] && rec->d.allele[i][0]=='*' ) { star_allele = i; break; }
-
-+ // number of non-reference trios
-+ if ( args->max_alt_trios ) alt_trios_reset(args, rec->n_allele);
-+
- // Run the stats
- for (i=0; i<args->ntrio; i++)
- {
-@@ -443,8 +544,7 @@
- for (j=0; j<6; j++)
- {
- if ( als[j]==star_allele ) { has_star_allele = 1; continue; }
-- if ( als[j]==0 ) continue;
-- has_nonref = 1;
-+ if ( als[j]!=0 ) has_nonref = 1;
- args->ac_trio[ als[j] ]++;
- }
- if ( !has_nonref ) continue; // only ref or * in this trio
-@@ -459,7 +559,7 @@
- {
- if ( als[j]==0 || als[j]==star_allele ) continue;
- if ( als[j] >= rec->n_allele )
-- error("The GT index is out of range at %s:%d in %s\n", bcf_seqname(args->hdr,rec),rec->pos+1,args->hdr->samples[args->trio[i].idx[j/2]]);
-+ error("The GT index is out of range at %s:%"PRId64" in %s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,args->hdr->samples[args->trio[i].idx[j/2]]);
- if ( rec->d.allele[als[j]][1] ) continue;
-
- int alt = bcf_acgt2int(rec->d.allele[als[j]][0]);
-@@ -475,21 +575,111 @@
- if ( has_star_allele ) continue;
-
- // Detect mendelian errors
-- int mendel_ok = (als_child[0]==als_father[0] || als_child[0]==als_father[1]) && (als_child[1]==als_mother[0] || als_child[1]==als_mother[1]) ? 1 : 0;
-- if ( !mendel_ok ) mendel_ok = (als_child[1]==als_father[0] || als_child[1]==als_father[1]) && (als_child[0]==als_mother[0] || als_child[0]==als_mother[1]) ? 1 : 0;
-- if ( !mendel_ok ) stats->nmendel_err++;
-+ int a0F = als_child[0]==als_father[0] || als_child[0]==als_father[1] ? 1 : 0;
-+ int a1M = als_child[1]==als_mother[0] || als_child[1]==als_mother[1] ? 1 : 0;
-+ if ( !a0F || !a1M )
-+ {
-+ int a0M = als_child[0]==als_mother[0] || als_child[0]==als_mother[1] ? 1 : 0;
-+ int a1F = als_child[1]==als_father[0] || als_child[1]==als_father[1] ? 1 : 0;
-+ if ( !a0M || !a1F )
-+ {
-+ stats->nmendel_err++;
-+
-+ int dnm_hom = 0;
-+ if ( als_child[0]==als_child[1] ) { stats->ndnm_hom++; dnm_hom = 1; }
-+
-+ int culprit; // neglecting the unlikely possibility of alt het 1/2 DNM genotype
-+ if ( !a0F && !a0M ) culprit = als_child[0];
-+ else if ( !a1F && !a1M ) culprit = als_child[1];
-+ else if ( args->ac[als_child[0]] < args->ac[als_child[1]] ) culprit = als_child[0];
-+ else culprit = als_child[1];
-+
-+ int dnm_recurrent = 0;
-+ if ( (!dnm_hom && args->ac[culprit]>1) || (dnm_hom && args->ac[culprit]>2) ) { stats->ndnm_recurrent++; dnm_recurrent = 1; }
-+
-+ if ( args->verbose & VERBOSE_MENDEL )
-+ fprintf(args->fp_out,"MERR\t%s\t%"PRId64"\t%s\t%s\t%s\t%s\t%s\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]],
-+ dnm_hom ? "HOM" : "-",
-+ dnm_recurrent ? "RECURRENT" : "-"
-+ );
-+ }
-+ }
-
- // Is this a singleton, doubleton, neither?
-- for (j=1; j<rec->n_allele; j++)
-+ for (j=0; j<rec->n_allele; j++)
- {
-- if ( args->ac_trio[j]==1 && args->ac[j]==1 ) // singleton (in parent) or novel (in child)
-+ if ( !args->ac_trio[j] ) continue;
-+ if ( args->max_alt_trios ) args->alt_trios[j].nalt++;
-+
-+ if ( args->ac_trio[j]==1 ) // singleton (in parent) or novel (in child)
- {
- if ( als_child[0]==j || als_child[1]==j ) stats->nnovel++;
-- else stats->nsingleton++;
-+ else
-+ {
-+ if ( !args->max_alt_trios )
-+ {
-+ stats->nsingleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tNO\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]]
-+ );
-+ }
-+ else alt_trios_add(args, i,j,1);
-+ }
-+ }
-+ else if ( args->ac_trio[j]==2 ) // possibly a doubleton
-+ {
-+ if ( (als_child[0]!=j && als_child[1]!=j) || (als_child[0]==j && als_child[1]==j) ) continue;
-+ if ( (als_father[0]==j && als_father[1]==j) || (als_mother[0]==j && als_mother[1]==j) ) continue;
-+ if ( !args->max_alt_trios )
-+ {
-+ stats->ndoubleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tYES\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[i].idx[iCHILD]],
-+ args->hdr->samples[args->trio[i].idx[iFATHER]],
-+ args->hdr->samples[args->trio[i].idx[iMOTHER]]
-+ );
-+ }
-+ else alt_trios_add(args, i,j,0);
- }
-- else if ( args->ac_trio[j]==2 && args->ac[j]==2 ) // possibly a doubleton
-+ }
-+ }
-+ if ( args->max_alt_trios )
-+ {
-+ for (j=0; j<rec->n_allele; j++)
-+ {
-+ alt_trios_t *tr = &args->alt_trios[j];
-+ if ( !tr->nsd || tr->nalt > args->max_alt_trios ) continue;
-+ for (i=0; i<tr->nsd; i++)
- {
-- if ( (als_child[0]==j || als_child[1]==j) && (als_child[0]!=j || als_child[1]!=j) ) stats->ndoubleton++;
-+ int itr = tr->idx[i];
-+ trio_stats_t *stats = &flt->stats[itr];
-+ if ( kbs_exists(tr->sd_bset,i) )
-+ {
-+ stats->nsingleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tNO\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[itr].idx[iCHILD]],
-+ args->hdr->samples[args->trio[itr].idx[iFATHER]],
-+ args->hdr->samples[args->trio[itr].idx[iMOTHER]]
-+ );
-+ }
-+ else
-+ {
-+ stats->ndoubleton++;
-+ if ( args->verbose & VERBOSE_TRANSMITTED )
-+ fprintf(args->fp_out,"TRANSMITTED\t%s\t%"PRId64"\t%s\t%s\t%s\tYES\n", bcf_seqname(args->hdr,rec),(int64_t) rec->pos+1,
-+ args->hdr->samples[args->trio[itr].idx[iCHILD]],
-+ args->hdr->samples[args->trio[itr].idx[iFATHER]],
-+ args->hdr->samples[args->trio[itr].idx[iMOTHER]]
-+ );
-+ }
- }
- }
- }
-@@ -502,10 +692,13 @@
- args->output_fname = "-";
- static struct option loptions[] =
- {
-+ {"debug",required_argument,0,'d'},
-+ {"alt-trios",required_argument,0,'a'},
- {"include",required_argument,0,'i'},
- {"exclude",required_argument,0,'e'},
- {"output",required_argument,NULL,'o'},
- {"ped",required_argument,NULL,'p'},
-+ {"pfm",required_argument,NULL,'P'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
- {"targets",1,0,'t'},
-@@ -513,10 +706,25 @@
- {NULL,0,NULL,0}
- };
- int c, i;
-- while ((c = getopt_long(argc, argv, "p:o:s:i:e:r:R:t:T:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "P:p:o:s:i:e:r:R:t:T:a:d:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
-+ case 'd':
-+ {
-+ int n;
-+ char **tmp = hts_readlist(optarg, 0, &n);
-+ for(i=0; i<n; i++)
-+ {
-+ if ( !strcasecmp(tmp[i],"mendel-errors") ) args->verbose |= VERBOSE_MENDEL;
-+ else if ( !strcasecmp(tmp[i],"transmitted") ) args->verbose |= VERBOSE_TRANSMITTED;
-+ else error("Error: The argument \"%s\" to option --debug is not recognised\n", tmp[i]);
-+ free(tmp[i]);
-+ }
-+ free(tmp);
-+ break;
-+ }
-+ case 'a': args->max_alt_trios = atoi(optarg); break;
- case 'e': args->filter_str = optarg; args->filter_logic |= FLT_EXCLUDE; break;
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 't': args->targets = optarg; break;
-@@ -525,6 +733,7 @@
- case 'R': args->regions = optarg; args->regions_is_file = 1; break;
- case 'o': args->output_fname = optarg; break;
- case 'p': args->ped_fname = optarg; break;
-+ case 'P': args->pfm = optarg; break;
- case 'h':
- case '?':
- default: error("%s", usage_text()); break;
-@@ -538,7 +747,7 @@
- else if ( optind+1!=argc ) error("%s", usage_text());
- else args->fname = argv[optind];
-
-- if ( !args->ped_fname ) error("Missing the -p, --ped option\n");
-+ if ( !args->ped_fname && !args->pfm ) error("Missing the -p or -P option\n");
-
- init_data(args);
-
---- python-pysam.orig/bcftools/plugins/trio-switch-rate.c
-+++ python-pysam/bcftools/plugins/trio-switch-rate.c
-@@ -141,7 +141,7 @@
- khash_str2int_destroy(pop2i);
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
---- python-pysam.orig/bcftools/plugins/trio-switch-rate.c.pysam.c
-+++ python-pysam/bcftools/plugins/trio-switch-rate.c.pysam.c
-@@ -143,7 +143,7 @@
- khash_str2int_destroy(pop2i);
- free(str.s);
- free(off);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,fname);
- }
-
- int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
---- /dev/null
-+++ python-pysam/bcftools/plugins/variantkey-hex.c
-@@ -0,0 +1,136 @@
-+/* plugins/variantkey-hex.c -- Generate unsorted VariantKey lookup tables files in hexadecimal format.
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <errno.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <inttypes.h>
-+#include "../variantkey.h"
-+
-+const char *FILE_VKRS = "vkrs.unsorted.hex";
-+const char *FILE_RSVK = "rsvk.unsorted.hex";
-+const char *FILE_NRVK = "nrvk.unsorted.tsv";
-+
-+FILE *fp_vkrs; // VariantKey -> rsID
-+FILE *fp_rsvk; // rsID -> VariantKey
-+FILE *fp_nrvk; // VariantKey non-reversible map (maps VariantKey to REF and ALT)
-+
-+static uint64_t numvar; // number of variants
-+static uint64_t nrv; // number of non-reversible variants
-+
-+bcf_hdr_t *in_hdr;
-+
-+const char *about(void)
-+{
-+ return "Generate VariantKey index files\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Generate unsorted VariantKey lookup tables files in hexadecimal format.\n"
-+ "Usage: bcftools +variantkey-hex [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +variantkey-hex in.vcf\n"
-+ "\n";
-+}
-+
-+// Called once at startup, allows to initialize local variables.
-+// Return 1 to suppress VCF/BCF header from printing, 0 otherwise.
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ in_hdr = in;
-+ numvar = 0;
-+ char path[1024];
-+ char dir[1024] = "./";
-+ if (argc > 1)
-+ {
-+ strcpy(dir, argv[1]);
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_VKRS);
-+ fp_vkrs = fopen(path, "w");
-+ if (!fp_vkrs)
-+ {
-+ fprintf(stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_RSVK);
-+ fp_rsvk = fopen(path, "w");
-+ if (!fp_rsvk)
-+ {
-+ fprintf(stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_NRVK);
-+ fp_nrvk = fopen(path, "w");
-+ if (!fp_nrvk)
-+ {
-+ fprintf(stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ return 1;
-+}
-+
-+// Called for each VCF record. Return rec to output the line or NULL to suppress output.
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ int len_ref = strlen(rec->d.allele[0]);
-+ int len_alt = strlen(rec->d.allele[1]);
-+ uint64_t vk = variantkey(
-+ in_hdr->id[BCF_DT_CTG][rec->rid].key,
-+ strlen(in_hdr->id[BCF_DT_CTG][rec->rid].key),
-+ rec->pos,
-+ rec->d.allele[0],
-+ len_ref,
-+ rec->d.allele[1],
-+ len_alt);
-+ char *ptr = rec->d.id;
-+ ptr += 2; // remove 'rs'
-+ uint32_t rs = (uint32_t)strtoul(ptr, NULL, 10);
-+ fprintf(fp_vkrs, "%016" PRIx64 "\t%08" PRIx32 "\n", vk, rs); // map VariantKey to rsID
-+ fprintf(fp_rsvk, "%08" PRIx32 "\t%016" PRIx64 "\n", rs, vk); // map rsID to VariantKey
-+ if (vk & 1)
-+ {
-+ // map VariantKey to REF and ALT
-+ fprintf(fp_nrvk, "%016" PRIx64 "\t%s\t%s\n", vk, rec->d.allele[0], rec->d.allele[1]);
-+ nrv++;
-+ }
-+ numvar++;
-+ return NULL;
-+}
-+
-+void destroy(void)
-+{
-+ fclose(fp_vkrs);
-+ fclose(fp_rsvk);
-+ printf("VariantKeys: %" PRIu64 "\n", numvar);
-+ printf("Non-reversible VariantKeys: %" PRIu64 "\n", nrv);
-+}
---- /dev/null
-+++ python-pysam/bcftools/plugins/variantkey-hex.c.pysam.c
-@@ -0,0 +1,138 @@
-+#include "bcftools.pysam.h"
-+
-+/* plugins/variantkey-hex.c -- Generate unsorted VariantKey lookup tables files in hexadecimal format.
-+
-+ Copyright (C) 2017-2018 GENOMICS plc.
-+
-+ Author: Nicola Asuni <nicola.asuni@genomicsplc.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <errno.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <htslib/hts.h>
-+#include <htslib/vcf.h>
-+#include <htslib/vcfutils.h>
-+#include <inttypes.h>
-+#include "../variantkey.h"
-+
-+const char *FILE_VKRS = "vkrs.unsorted.hex";
-+const char *FILE_RSVK = "rsvk.unsorted.hex";
-+const char *FILE_NRVK = "nrvk.unsorted.tsv";
-+
-+FILE *fp_vkrs; // VariantKey -> rsID
-+FILE *fp_rsvk; // rsID -> VariantKey
-+FILE *fp_nrvk; // VariantKey non-reversible map (maps VariantKey to REF and ALT)
-+
-+static uint64_t numvar; // number of variants
-+static uint64_t nrv; // number of non-reversible variants
-+
-+bcf_hdr_t *in_hdr;
-+
-+const char *about(void)
-+{
-+ return "Generate VariantKey index files\n";
-+}
-+
-+const char *usage(void)
-+{
-+ return
-+ "\n"
-+ "About: Generate unsorted VariantKey lookup tables files in hexadecimal format.\n"
-+ "Usage: bcftools +variantkey-hex [General Options] \n"
-+ "Options:\n"
-+ " run \"bcftools plugin\" for a list of common options\n"
-+ "\n"
-+ "Example:\n"
-+ " bcftools +variantkey-hex in.vcf\n"
-+ "\n";
-+}
-+
-+// Called once at startup, allows to initialize local variables.
-+// Return 1 to suppress VCF/BCF header from printing, 0 otherwise.
-+int init(int argc, char **argv, bcf_hdr_t *in, bcf_hdr_t *out)
-+{
-+ in_hdr = in;
-+ numvar = 0;
-+ char path[1024];
-+ char dir[1024] = "./";
-+ if (argc > 1)
-+ {
-+ strcpy(dir, argv[1]);
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_VKRS);
-+ fp_vkrs = fopen(path, "w");
-+ if (!fp_vkrs)
-+ {
-+ fprintf(bcftools_stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_RSVK);
-+ fp_rsvk = fopen(path, "w");
-+ if (!fp_rsvk)
-+ {
-+ fprintf(bcftools_stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ strcpy(path, dir);
-+ strcat(path, FILE_NRVK);
-+ fp_nrvk = fopen(path, "w");
-+ if (!fp_nrvk)
-+ {
-+ fprintf(bcftools_stderr, "%s: %s\n", path, strerror(errno));
-+ }
-+ return 1;
-+}
-+
-+// Called for each VCF record. Return rec to output the line or NULL to suppress output.
-+bcf1_t *process(bcf1_t *rec)
-+{
-+ int len_ref = strlen(rec->d.allele[0]);
-+ int len_alt = strlen(rec->d.allele[1]);
-+ uint64_t vk = variantkey(
-+ in_hdr->id[BCF_DT_CTG][rec->rid].key,
-+ strlen(in_hdr->id[BCF_DT_CTG][rec->rid].key),
-+ rec->pos,
-+ rec->d.allele[0],
-+ len_ref,
-+ rec->d.allele[1],
-+ len_alt);
-+ char *ptr = rec->d.id;
-+ ptr += 2; // remove 'rs'
-+ uint32_t rs = (uint32_t)strtoul(ptr, NULL, 10);
-+ fprintf(fp_vkrs, "%016" PRIx64 "\t%08" PRIx32 "\n", vk, rs); // map VariantKey to rsID
-+ fprintf(fp_rsvk, "%08" PRIx32 "\t%016" PRIx64 "\n", rs, vk); // map rsID to VariantKey
-+ if (vk & 1)
-+ {
-+ // map VariantKey to REF and ALT
-+ fprintf(fp_nrvk, "%016" PRIx64 "\t%s\t%s\n", vk, rec->d.allele[0], rec->d.allele[1]);
-+ nrv++;
-+ }
-+ numvar++;
-+ return NULL;
-+}
-+
-+void destroy(void)
-+{
-+ fclose(fp_vkrs);
-+ fclose(fp_rsvk);
-+ fprintf(bcftools_stdout, "VariantKeys: %" PRIu64 "\n", numvar);
-+ fprintf(bcftools_stdout, "Non-reversible VariantKeys: %" PRIu64 "\n", nrv);
-+}
---- python-pysam.orig/bcftools/regidx.c
-+++ python-pysam/bcftools/regidx.c
-@@ -262,7 +262,11 @@
- }
-
- free(str.s);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 )
-+ {
-+ fprintf(stderr,"[%s] Error: close failed .. %s\n", __func__,fname);
-+ goto error;
-+ }
- return idx;
-
- error:
-@@ -392,12 +396,11 @@
- {
- int iend = iBIN(end);
- if ( iend > list->nidx ) iend = list->nidx;
-- for (i=ibeg; i<iend; i++)
-+ for (i=ibeg; i<=iend; i++)
- if ( list->idx[i] ) break;
-- if ( i==iend ) return 0;
-+ if ( i>iend ) return 0;
- i = list->idx[i];
- }
--
- for (ireg=i-1; ireg<list->nreg; ireg++)
- {
- if ( list->reg[ireg].beg > end ) return 0; // no match, past the query region
---- python-pysam.orig/bcftools/regidx.c.pysam.c
-+++ python-pysam/bcftools/regidx.c.pysam.c
-@@ -264,7 +264,11 @@
- }
-
- free(str.s);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 )
-+ {
-+ fprintf(bcftools_stderr,"[%s] Error: close failed .. %s\n", __func__,fname);
-+ goto error;
-+ }
- return idx;
-
- error:
-@@ -394,12 +398,11 @@
- {
- int iend = iBIN(end);
- if ( iend > list->nidx ) iend = list->nidx;
-- for (i=ibeg; i<iend; i++)
-+ for (i=ibeg; i<=iend; i++)
- if ( list->idx[i] ) break;
-- if ( i==iend ) return 0;
-+ if ( i>iend ) return 0;
- i = list->idx[i];
- }
--
- for (ireg=i-1; ireg<list->nreg; ireg++)
- {
- if ( list->reg[ireg].beg > end ) return 0; // no match, past the query region
---- python-pysam.orig/bcftools/regidx.h
-+++ python-pysam/bcftools/regidx.h
-@@ -33,14 +33,14 @@
- // and for working example see test/test-regidx.c.
- regidx_t *idx = regidx_init(in_fname,parse_custom,free_custom,sizeof(char*),NULL);
-
-- // Query overlap with chr:from-to
-+ // Query overlap with chr:beg-end (beg,end are 1-based coordinates)
- regitr_t *itr = regitr_init(idx);
-- if ( regidx_overlap(idx, chr,from,to, itr) ) printf("There is an overlap!\n");
-+ if ( regidx_overlap(idx, chr,beg-1,end-1, itr) ) printf("There is an overlap!\n");
-
- while ( regitr_overlap(itr) )
- {
-- printf("[%d,%d] overlaps with [%d,%d], payload=%s\n", from,to,
-- itr->beg, itr->end, regitr_payload(itr,char*));
-+ printf("[%d,%d] overlaps with [%d,%d], payload=%s\n", beg,end,
-+ itr->beg+1, itr->end+1, regitr_payload(itr,char*));
- }
-
- regidx_destroy(idx);
-@@ -53,7 +53,7 @@
- regitr_t *itr = regitr_init(idx);
-
- while ( regitr_loop(itr) )
-- printf("chr=%s beg=%d end=%d\n", itr->seq, itr->beg, itr->end);
-+ printf("chr=%s beg=%d end=%d\n", itr->seq, itr->beg+1, itr->end+1);
-
- regidx_destroy(idx);
- regitr_destroy(itr);
---- python-pysam.orig/bcftools/reheader.c
-+++ python-pysam/bcftools/reheader.c
-@@ -33,17 +33,23 @@
- #include <inttypes.h>
- #include <fcntl.h>
- #include <math.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#endif
- #include <htslib/vcf.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h> // for hts_get_bgzfp()
- #include <htslib/kseq.h>
- #include <htslib/thread_pool.h>
-+#include <htslib/faidx.h>
-+#include <htslib/khash_str2int.h>
- #include "bcftools.h"
- #include "khash_str2str.h"
-
- typedef struct _args_t
- {
- char **argv, *fname, *samples_fname, *header_fname, *output_fname;
-+ char *fai_fname, *rm_tmpfile;
- htsFile *fp;
- htsFormat type;
- htsThreadPool *threads;
-@@ -51,6 +57,158 @@
- }
- args_t;
-
-+static inline int is_escaped(const char *min, const char *str)
-+{
-+ int n = 0;
-+ while ( --str>=min && *str=='\\' ) n++;
-+ return n%2;
-+}
-+static char *copy_and_update_contig_line(faidx_t *fai, char *line, void *chr_seen, kstring_t *dst)
-+{
-+ kstring_t key = {0,0,0}, val = {0,0,0}, tmp = {0,0,0};
-+ char *chr_name = NULL, *p, *q = line + 9; // skip ##contig=
-+ char *end = q;
-+ int nopen = 1, chr_len = 0;
-+ while ( *end && *end!='\n' ) end++;
-+ while ( *q && *q!='\n' && nopen>0 )
-+ {
-+ p = ++q;
-+ while ( *q && (*q==' ' || *q=='\t') ) { p++; q++; }
-+ // ^[A-Za-z_][0-9A-Za-z_.]*$
-+ if (p==q && *q && (isalpha(*q) || *q=='_'))
-+ {
-+ q++;
-+ while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-+ }
-+ int n = q-p;
-+ int m = 0;
-+ while ( *q && (*q==' ' || *q=='\t') ) { q++; m++; }
-+ if ( *q!='=' || !n )
-+ {
-+ char *x = q;
-+ while ( *x && *x!='\n' ) x++;
-+ *x = '\0';
-+ error("Could not parse the line: %s [%s][%s]\n", line,p,q);
-+ }
-+ key.l = 0;
-+ kputsn(p,q-p-m,&key);
-+ p = ++q;
-+ while ( *q && (*q==' ' || *q=='\t') ) { p++; q++; }
-+ int quoted = *p=='"' ? 1 : 0;
-+ if ( quoted ) p++, q++;
-+ while ( *q && *q != '\n' )
-+ {
-+ if ( quoted ) { if ( *q=='"' && !is_escaped(p,q) ) break; }
-+ else
-+ {
-+ if ( *q=='<' ) nopen++;
-+ if ( *q=='>' ) nopen--;
-+ if ( !nopen ) break;
-+ if ( *q==',' && nopen==1 ) break;
-+ }
-+ q++;
-+ }
-+ char *r = q;
-+ while ( r > p && r[-1] == ' ' ) r--;
-+ val.l = 0;
-+ kputsn(p,r-p,&val);
-+ if ( quoted && *q=='"' ) q++;
-+ if ( *q=='>' ) { nopen--; q++; }
-+ if ( !strcmp("length",key.s) ) continue;
-+ if ( !strcmp("ID",key.s) )
-+ {
-+ if ( khash_str2int_has_key(chr_seen,val.s) ) continue;
-+ chr_len = faidx_seq_len(fai, val.s);
-+ if ( chr_len==-1 )
-+ {
-+ free(val.s); free(key.s); free(tmp.s);
-+ return end; // the sequence is not in fai, remove
-+ }
-+ chr_name = strdup(val.s);
-+ khash_str2int_inc(chr_seen, chr_name);
-+ continue;
-+ }
-+ kputc(',',&tmp);
-+ kputs(key.s,&tmp);
-+ kputc('=',&tmp);
-+ if ( quoted ) kputc('"',&tmp);
-+ kputs(val.s,&tmp);
-+ if ( quoted ) kputc('"',&tmp);
-+ }
-+ if ( !chr_name ) return end;
-+ ksprintf(dst,"##contig=<ID=%s,length=%d%s>",chr_name,chr_len,tmp.l ? tmp.s : "");
-+ free(key.s); free(val.s); free(tmp.s);
-+ return q;
-+}
-+static void update_from_fai(args_t *args)
-+{
-+ if ( !strcmp("-",args->fname) )
-+ error("Cannot use the --fai option when reading from standard input.\n");
-+
-+ faidx_t *fai = fai_load3(args->fai_fname,args->fai_fname,NULL,FAI_FASTA);
-+ if ( !fai ) error("Could not parse %s\n", args->fai_fname);
-+#ifdef _WIN32
-+ char tmp_path[MAX_PATH];
-+ int ret = GetTempPath(MAX_PATH, tmp_path);
-+ if (!ret || ret > MAX_PATH)
-+ error("Could not get the path to the temporary folder\n");
-+ if (strlen(tmp_path) + strlen("/bcftools-fai-header-XXXXXX") >= MAX_PATH)
-+ error("Full path to the temporary folder is too long\n");
-+ strcat(tmp_path, "/bcftools-fai-header-XXXXXX");
-+ args->rm_tmpfile = strdup(tmp_path);
-+#else
-+ args->rm_tmpfile = strdup("/tmp/bcftools-fai-header-XXXXXX");
-+#endif
-+ int fd = mkstemp(args->rm_tmpfile);
-+ if ( fd<0 ) error("Could not open a temporary file for writing: %s\n", args->rm_tmpfile);
-+
-+ // get a template header: either from the original VCF or from --header
-+ char *ori_hdr_fname = args->header_fname ? args->header_fname : args->fname;
-+ htsFile *fp = hts_open(ori_hdr_fname,"r");
-+ if ( !fp ) error("Failed to open: %s\n", ori_hdr_fname);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp);
-+ if ( !hdr ) error("Failed to read the header: %s\n", ori_hdr_fname);
-+ hts_close(fp); // no need to check the return status here
-+
-+ // put the header in a text buffer
-+ kstring_t hdr_txt_ori = {0,0,0}, hdr_txt_new = {0,0,0};
-+ bcf_hdr_format(hdr, 0, &hdr_txt_ori);
-+ bcf_hdr_destroy(hdr);
-+
-+ // update the existing contig lines and remove lines not present in the fai file
-+ void *chr_seen = khash_str2int_init();
-+ char *tmp, *beg = hdr_txt_ori.s;
-+ while ( beg && *beg )
-+ {
-+ tmp = strstr(beg, "\n##contig=<");
-+ if ( !tmp ) break;
-+ kputsn(beg, tmp-beg+1, &hdr_txt_new);
-+ size_t l_prev = hdr_txt_new.l;
-+ beg = copy_and_update_contig_line(fai,tmp+1,chr_seen, &hdr_txt_new);
-+ if ( l_prev==hdr_txt_new.l ) hdr_txt_new.l--; // nothing was added, remove the newline
-+ }
-+ if ( !beg || !(tmp=strstr(beg,"\n#CHROM")) ) error("Failed to parse the header, #CHROM not found\n");
-+ kputsn(beg, tmp-beg+1, &hdr_txt_new);
-+
-+ // add any new contig lines
-+ int i, n = faidx_nseq(fai);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( khash_str2int_has_key(chr_seen,faidx_iseq(fai,i)) ) continue;
-+ ksprintf(&hdr_txt_new,"##contig=<ID=%s,length=%d>\n",faidx_iseq(fai,i),faidx_seq_len(fai,faidx_iseq(fai,i)));
-+ }
-+ kputs(tmp+1,&hdr_txt_new);
-+
-+ if ( write(fd, hdr_txt_new.s, hdr_txt_new.l)!=hdr_txt_new.l ) error("Failed to write %zu bytes to %s\n", hdr_txt_new.l,args->rm_tmpfile);
-+ if ( close(fd)!=0 ) error("Failed to close %s\n", args->rm_tmpfile);
-+ args->header_fname = args->rm_tmpfile;
-+
-+ free(hdr_txt_ori.s);
-+ free(hdr_txt_new.s);
-+ fai_destroy(fai);
-+ khash_str2int_destroy_free(chr_seen);
-+}
-+
- static void read_header_file(char *fname, kstring_t *hdr)
- {
- kstring_t tmp = {0,0,0};
-@@ -313,8 +471,8 @@
- kputc('\n',&fp->line);
- if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
- }
-- hts_close(fp);
-- close(out);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
-+ if ( close(out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- }
-
- static bcf_hdr_t *strip_header(bcf_hdr_t *src, bcf_hdr_t *dst)
-@@ -346,12 +504,14 @@
- if ( j>=0 )
- {
- j = atoi(src_hrec->vals[j]);
-- hrec_add_idx(tmp, j);
-+ if (hrec_add_idx(tmp, j) < 0)
-+ error_errno("[%s] Failed to add IDX header", __func__);
- }
- bcf_hdr_add_hrec(out, tmp);
- }
- }
-- bcf_hdr_sync(out);
-+ if (bcf_hdr_sync(out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- for (i=0; i<dst->nhrec; i++)
- {
- // finally add new structured fields
-@@ -375,11 +535,10 @@
-
- if ( args->n_threads > 0 )
- {
-- args->threads = calloc(1, sizeof(*args->threads));
-+ args->threads = (htsThreadPool *) calloc(1, sizeof(htsThreadPool));
- if ( !args->threads ) error("Could not allocate memory\n");
- if ( !(args->threads->pool = hts_tpool_init(args->n_threads)) ) error("Could not initialize threading\n");
-- BGZF *bgzf = hts_get_bgzfp(fp);
-- if ( bgzf ) bgzf_thread_pool(bgzf, args->threads->pool, args->threads->qsize);
-+ hts_set_thread_pool(fp, args->threads);
- }
-
- bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to read the header: %s\n", args->fname);
-@@ -410,11 +569,8 @@
- htsFile *fp_out = hts_open(args->output_fname ? args->output_fname : "-",is_compressed ? "wb" : "wbu");
- if ( !fp_out ) error("%s: %s\n", args->output_fname ? args->output_fname : "-", strerror(errno));
- if ( args->threads )
-- {
-- BGZF *bgzf = hts_get_bgzfp(fp_out);
-- if ( bgzf ) bgzf_thread_pool(bgzf, args->threads->pool, args->threads->qsize);
-- }
-- bcf_hdr_write(fp_out, hdr_out);
-+ hts_set_thread_pool(fp_out, args->threads);
-+ if ( bcf_hdr_write(fp_out, hdr_out)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname ? args->output_fname : "standard output");
-
- bcf1_t *rec = bcf_init();
- while ( bcf_read(fp, hdr, rec)==0 )
-@@ -459,13 +615,13 @@
- if ( i!=rec->n_fmt )
- error("The FORMAT tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.fmt[i].id));
-
-- bcf_write(fp_out,hdr_out,rec);
-+ if ( bcf_write(fp_out,hdr_out,rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname ? args->output_fname : "standard output");
- }
- bcf_destroy(rec);
-
- free(htxt.s);
-- hts_close(fp_out);
-- hts_close(fp);
-+ if ( hts_close(fp_out)!=0 ) error("[%s] Error: failed to close the file %s\n",__func__,args->output_fname ? args->output_fname : "standard output");
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
- bcf_hdr_destroy(hdr_out);
- bcf_hdr_destroy(hdr);
- if ( args->threads )
-@@ -483,10 +639,21 @@
- fprintf(stderr, "Usage: bcftools reheader [OPTIONS] <in.vcf.gz>\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Options:\n");
-+ fprintf(stderr, " -f, --fai <file> update sequences and their lengths from the .fai file\n");
- fprintf(stderr, " -h, --header <file> new header\n");
- fprintf(stderr, " -o, --output <file> write output to a file [standard output]\n");
- fprintf(stderr, " -s, --samples <file> new sample names\n");
-- fprintf(stderr, " --threads <int> number of extra compression threads (BCF only) [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads (BCF only) [0]\n");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, "Example:\n");
-+ fprintf(stderr, " # Write out the header to be modified\n");
-+ fprintf(stderr, " bcftools view -h old.bcf > header.txt\n");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, " # Edit the header using your favorite text editor\n");
-+ fprintf(stderr, " vi header.txt\n");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, " # Reheader the file\n");
-+ fprintf(stderr, " bcftools reheader -h header.txt -o new.bcf old.bcf\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-@@ -499,21 +666,23 @@
-
- static struct option loptions[] =
- {
-+ {"fai",1,0,'f'},
- {"output",1,0,'o'},
- {"header",1,0,'h'},
- {"samples",1,0,'s'},
- {"threads",1,NULL,1},
- {0,0,0,0}
- };
-- while ((c = getopt_long(argc, argv, "s:h:o:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "s:h:o:f:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 1 : args->n_threads = strtol(optarg, 0, 0); break;
-+ case 'f': args->fai_fname = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 's': args->samples_fname = optarg; break;
- case 'h': args->header_fname = optarg; break;
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -525,11 +694,12 @@
- }
- else args->fname = argv[optind];
-
-+ if ( args->fai_fname ) update_from_fai(args);
- if ( !args->samples_fname && !args->header_fname ) usage(args);
- if ( !args->fname ) usage(args);
-
- args->fp = hts_open(args->fname,"r");
-- if ( !args->fp ) error("Failed to open: %s\n", args->fname);
-+ if ( !args->fp ) error("Failed to read from %s\n", !strcmp("-",args->fname)?"standard input":args->fname);
- args->type = *hts_get_format(args->fp);
-
- if ( args->type.format==vcf )
-@@ -542,6 +712,11 @@
- else
- reheader_bcf(args, args->type.compression==bgzf || args->type.compression==gzip);
-
-+ if ( args->rm_tmpfile )
-+ {
-+ unlink(args->rm_tmpfile);
-+ free(args->rm_tmpfile);
-+ }
- free(args);
- return 0;
- }
---- python-pysam.orig/bcftools/reheader.c.pysam.c
-+++ python-pysam/bcftools/reheader.c.pysam.c
-@@ -35,17 +35,23 @@
- #include <inttypes.h>
- #include <fcntl.h>
- #include <math.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#endif
- #include <htslib/vcf.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h> // for hts_get_bgzfp()
- #include <htslib/kseq.h>
- #include <htslib/thread_pool.h>
-+#include <htslib/faidx.h>
-+#include <htslib/khash_str2int.h>
- #include "bcftools.h"
- #include "khash_str2str.h"
-
- typedef struct _args_t
- {
- char **argv, *fname, *samples_fname, *header_fname, *output_fname;
-+ char *fai_fname, *rm_tmpfile;
- htsFile *fp;
- htsFormat type;
- htsThreadPool *threads;
-@@ -53,6 +59,158 @@
- }
- args_t;
-
-+static inline int is_escaped(const char *min, const char *str)
-+{
-+ int n = 0;
-+ while ( --str>=min && *str=='\\' ) n++;
-+ return n%2;
-+}
-+static char *copy_and_update_contig_line(faidx_t *fai, char *line, void *chr_seen, kstring_t *dst)
-+{
-+ kstring_t key = {0,0,0}, val = {0,0,0}, tmp = {0,0,0};
-+ char *chr_name = NULL, *p, *q = line + 9; // skip ##contig=
-+ char *end = q;
-+ int nopen = 1, chr_len = 0;
-+ while ( *end && *end!='\n' ) end++;
-+ while ( *q && *q!='\n' && nopen>0 )
-+ {
-+ p = ++q;
-+ while ( *q && (*q==' ' || *q=='\t') ) { p++; q++; }
-+ // ^[A-Za-z_][0-9A-Za-z_.]*$
-+ if (p==q && *q && (isalpha(*q) || *q=='_'))
-+ {
-+ q++;
-+ while ( *q && (isalnum(*q) || *q=='_' || *q=='.') ) q++;
-+ }
-+ int n = q-p;
-+ int m = 0;
-+ while ( *q && (*q==' ' || *q=='\t') ) { q++; m++; }
-+ if ( *q!='=' || !n )
-+ {
-+ char *x = q;
-+ while ( *x && *x!='\n' ) x++;
-+ *x = '\0';
-+ error("Could not parse the line: %s [%s][%s]\n", line,p,q);
-+ }
-+ key.l = 0;
-+ kputsn(p,q-p-m,&key);
-+ p = ++q;
-+ while ( *q && (*q==' ' || *q=='\t') ) { p++; q++; }
-+ int quoted = *p=='"' ? 1 : 0;
-+ if ( quoted ) p++, q++;
-+ while ( *q && *q != '\n' )
-+ {
-+ if ( quoted ) { if ( *q=='"' && !is_escaped(p,q) ) break; }
-+ else
-+ {
-+ if ( *q=='<' ) nopen++;
-+ if ( *q=='>' ) nopen--;
-+ if ( !nopen ) break;
-+ if ( *q==',' && nopen==1 ) break;
-+ }
-+ q++;
-+ }
-+ char *r = q;
-+ while ( r > p && r[-1] == ' ' ) r--;
-+ val.l = 0;
-+ kputsn(p,r-p,&val);
-+ if ( quoted && *q=='"' ) q++;
-+ if ( *q=='>' ) { nopen--; q++; }
-+ if ( !strcmp("length",key.s) ) continue;
-+ if ( !strcmp("ID",key.s) )
-+ {
-+ if ( khash_str2int_has_key(chr_seen,val.s) ) continue;
-+ chr_len = faidx_seq_len(fai, val.s);
-+ if ( chr_len==-1 )
-+ {
-+ free(val.s); free(key.s); free(tmp.s);
-+ return end; // the sequence is not in fai, remove
-+ }
-+ chr_name = strdup(val.s);
-+ khash_str2int_inc(chr_seen, chr_name);
-+ continue;
-+ }
-+ kputc(',',&tmp);
-+ kputs(key.s,&tmp);
-+ kputc('=',&tmp);
-+ if ( quoted ) kputc('"',&tmp);
-+ kputs(val.s,&tmp);
-+ if ( quoted ) kputc('"',&tmp);
-+ }
-+ if ( !chr_name ) return end;
-+ ksprintf(dst,"##contig=<ID=%s,length=%d%s>",chr_name,chr_len,tmp.l ? tmp.s : "");
-+ free(key.s); free(val.s); free(tmp.s);
-+ return q;
-+}
-+static void update_from_fai(args_t *args)
-+{
-+ if ( !strcmp("-",args->fname) )
-+ error("Cannot use the --fai option when reading from standard input.\n");
-+
-+ faidx_t *fai = fai_load3(args->fai_fname,args->fai_fname,NULL,FAI_FASTA);
-+ if ( !fai ) error("Could not parse %s\n", args->fai_fname);
-+#ifdef _WIN32
-+ char tmp_path[MAX_PATH];
-+ int ret = GetTempPath(MAX_PATH, tmp_path);
-+ if (!ret || ret > MAX_PATH)
-+ error("Could not get the path to the temporary folder\n");
-+ if (strlen(tmp_path) + strlen("/bcftools-fai-header-XXXXXX") >= MAX_PATH)
-+ error("Full path to the temporary folder is too long\n");
-+ strcat(tmp_path, "/bcftools-fai-header-XXXXXX");
-+ args->rm_tmpfile = strdup(tmp_path);
-+#else
-+ args->rm_tmpfile = strdup("/tmp/bcftools-fai-header-XXXXXX");
-+#endif
-+ int fd = mkstemp(args->rm_tmpfile);
-+ if ( fd<0 ) error("Could not open a temporary file for writing: %s\n", args->rm_tmpfile);
-+
-+ // get a template header: either from the original VCF or from --header
-+ char *ori_hdr_fname = args->header_fname ? args->header_fname : args->fname;
-+ htsFile *fp = hts_open(ori_hdr_fname,"r");
-+ if ( !fp ) error("Failed to open: %s\n", ori_hdr_fname);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp);
-+ if ( !hdr ) error("Failed to read the header: %s\n", ori_hdr_fname);
-+ hts_close(fp); // no need to check the return status here
-+
-+ // put the header in a text buffer
-+ kstring_t hdr_txt_ori = {0,0,0}, hdr_txt_new = {0,0,0};
-+ bcf_hdr_format(hdr, 0, &hdr_txt_ori);
-+ bcf_hdr_destroy(hdr);
-+
-+ // update the existing contig lines and remove lines not present in the fai file
-+ void *chr_seen = khash_str2int_init();
-+ char *tmp, *beg = hdr_txt_ori.s;
-+ while ( beg && *beg )
-+ {
-+ tmp = strstr(beg, "\n##contig=<");
-+ if ( !tmp ) break;
-+ kputsn(beg, tmp-beg+1, &hdr_txt_new);
-+ size_t l_prev = hdr_txt_new.l;
-+ beg = copy_and_update_contig_line(fai,tmp+1,chr_seen, &hdr_txt_new);
-+ if ( l_prev==hdr_txt_new.l ) hdr_txt_new.l--; // nothing was added, remove the newline
-+ }
-+ if ( !beg || !(tmp=strstr(beg,"\n#CHROM")) ) error("Failed to parse the header, #CHROM not found\n");
-+ kputsn(beg, tmp-beg+1, &hdr_txt_new);
-+
-+ // add any new contig lines
-+ int i, n = faidx_nseq(fai);
-+ for (i=0; i<n; i++)
-+ {
-+ if ( khash_str2int_has_key(chr_seen,faidx_iseq(fai,i)) ) continue;
-+ ksprintf(&hdr_txt_new,"##contig=<ID=%s,length=%d>\n",faidx_iseq(fai,i),faidx_seq_len(fai,faidx_iseq(fai,i)));
-+ }
-+ kputs(tmp+1,&hdr_txt_new);
-+
-+ if ( write(fd, hdr_txt_new.s, hdr_txt_new.l)!=hdr_txt_new.l ) error("Failed to write %zu bytes to %s\n", hdr_txt_new.l,args->rm_tmpfile);
-+ if ( close(fd)!=0 ) error("Failed to close %s\n", args->rm_tmpfile);
-+ args->header_fname = args->rm_tmpfile;
-+
-+ free(hdr_txt_ori.s);
-+ free(hdr_txt_new.s);
-+ fai_destroy(fai);
-+ khash_str2int_destroy_free(chr_seen);
-+}
-+
- static void read_header_file(char *fname, kstring_t *hdr)
- {
- kstring_t tmp = {0,0,0};
-@@ -315,8 +473,8 @@
- kputc('\n',&fp->line);
- if ( write(out, fp->line.s, fp->line.l)!=fp->line.l ) error("Failed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
- }
-- hts_close(fp);
-- close(out);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
-+ if ( close(out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- }
-
- static bcf_hdr_t *strip_header(bcf_hdr_t *src, bcf_hdr_t *dst)
-@@ -348,12 +506,14 @@
- if ( j>=0 )
- {
- j = atoi(src_hrec->vals[j]);
-- hrec_add_idx(tmp, j);
-+ if (hrec_add_idx(tmp, j) < 0)
-+ error_errno("[%s] Failed to add IDX header", __func__);
- }
- bcf_hdr_add_hrec(out, tmp);
- }
- }
-- bcf_hdr_sync(out);
-+ if (bcf_hdr_sync(out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- for (i=0; i<dst->nhrec; i++)
- {
- // finally add new structured fields
-@@ -377,11 +537,10 @@
-
- if ( args->n_threads > 0 )
- {
-- args->threads = calloc(1, sizeof(*args->threads));
-+ args->threads = (htsThreadPool *) calloc(1, sizeof(htsThreadPool));
- if ( !args->threads ) error("Could not allocate memory\n");
- if ( !(args->threads->pool = hts_tpool_init(args->n_threads)) ) error("Could not initialize threading\n");
-- BGZF *bgzf = hts_get_bgzfp(fp);
-- if ( bgzf ) bgzf_thread_pool(bgzf, args->threads->pool, args->threads->qsize);
-+ hts_set_thread_pool(fp, args->threads);
- }
-
- bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to read the header: %s\n", args->fname);
-@@ -412,11 +571,8 @@
- htsFile *fp_out = hts_open(args->output_fname ? args->output_fname : "-",is_compressed ? "wb" : "wbu");
- if ( !fp_out ) error("%s: %s\n", args->output_fname ? args->output_fname : "-", strerror(errno));
- if ( args->threads )
-- {
-- BGZF *bgzf = hts_get_bgzfp(fp_out);
-- if ( bgzf ) bgzf_thread_pool(bgzf, args->threads->pool, args->threads->qsize);
-- }
-- bcf_hdr_write(fp_out, hdr_out);
-+ hts_set_thread_pool(fp_out, args->threads);
-+ if ( bcf_hdr_write(fp_out, hdr_out)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname ? args->output_fname : "standard output");
-
- bcf1_t *rec = bcf_init();
- while ( bcf_read(fp, hdr, rec)==0 )
-@@ -461,13 +617,13 @@
- if ( i!=rec->n_fmt )
- error("The FORMAT tag is not defined: \"%s\"\n", bcf_hdr_int2id(hdr,BCF_DT_ID,rec->d.fmt[i].id));
-
-- bcf_write(fp_out,hdr_out,rec);
-+ if ( bcf_write(fp_out,hdr_out,rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname ? args->output_fname : "standard output");
- }
- bcf_destroy(rec);
-
- free(htxt.s);
-- hts_close(fp_out);
-- hts_close(fp);
-+ if ( hts_close(fp_out)!=0 ) error("[%s] Error: failed to close the file %s\n",__func__,args->output_fname ? args->output_fname : "standard output");
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fname);
- bcf_hdr_destroy(hdr_out);
- bcf_hdr_destroy(hdr);
- if ( args->threads )
-@@ -485,10 +641,21 @@
- fprintf(bcftools_stderr, "Usage: bcftools reheader [OPTIONS] <in.vcf.gz>\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Options:\n");
-+ fprintf(bcftools_stderr, " -f, --fai <file> update sequences and their lengths from the .fai file\n");
- fprintf(bcftools_stderr, " -h, --header <file> new header\n");
- fprintf(bcftools_stderr, " -o, --output <file> write output to a file [standard output]\n");
- fprintf(bcftools_stderr, " -s, --samples <file> new sample names\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra compression threads (BCF only) [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads (BCF only) [0]\n");
-+ fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, "Example:\n");
-+ fprintf(bcftools_stderr, " # Write out the header to be modified\n");
-+ fprintf(bcftools_stderr, " bcftools view -h old.bcf > header.txt\n");
-+ fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, " # Edit the header using your favorite text editor\n");
-+ fprintf(bcftools_stderr, " vi header.txt\n");
-+ fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, " # Reheader the file\n");
-+ fprintf(bcftools_stderr, " bcftools reheader -h header.txt -o new.bcf old.bcf\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-@@ -501,21 +668,23 @@
-
- static struct option loptions[] =
- {
-+ {"fai",1,0,'f'},
- {"output",1,0,'o'},
- {"header",1,0,'h'},
- {"samples",1,0,'s'},
- {"threads",1,NULL,1},
- {0,0,0,0}
- };
-- while ((c = getopt_long(argc, argv, "s:h:o:",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "s:h:o:f:",loptions,NULL)) >= 0)
- {
- switch (c)
- {
- case 1 : args->n_threads = strtol(optarg, 0, 0); break;
-+ case 'f': args->fai_fname = optarg; break;
- case 'o': args->output_fname = optarg; break;
- case 's': args->samples_fname = optarg; break;
- case 'h': args->header_fname = optarg; break;
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -527,11 +696,12 @@
- }
- else args->fname = argv[optind];
-
-+ if ( args->fai_fname ) update_from_fai(args);
- if ( !args->samples_fname && !args->header_fname ) usage(args);
- if ( !args->fname ) usage(args);
-
- args->fp = hts_open(args->fname,"r");
-- if ( !args->fp ) error("Failed to open: %s\n", args->fname);
-+ if ( !args->fp ) error("Failed to read from %s\n", !strcmp("-",args->fname)?"standard input":args->fname);
- args->type = *hts_get_format(args->fp);
-
- if ( args->type.format==vcf )
-@@ -544,6 +714,11 @@
- else
- reheader_bcf(args, args->type.compression==bgzf || args->type.compression==gzip);
-
-+ if ( args->rm_tmpfile )
-+ {
-+ unlink(args->rm_tmpfile);
-+ free(args->rm_tmpfile);
-+ }
- free(args);
- return 0;
- }
---- python-pysam.orig/bcftools/smpl_ilist.c
-+++ python-pysam/bcftools/smpl_ilist.c
-@@ -22,15 +22,29 @@
- THE SOFTWARE.
- */
-
-+#include <ctype.h>
- #include "bcftools.h"
- #include "smpl_ilist.h"
-
- void smpl_ilist_destroy(smpl_ilist_t *smpl)
- {
-+ int i;
-+ if ( smpl->pair )
-+ {
-+ for (i=0; i<smpl->n; i++) free(smpl->pair[i]);
-+ free(smpl->pair);
-+ }
- free(smpl->idx);
- free(smpl);
- }
-
-+static inline int is_space_or_escaped(const char *min, const char *str)
-+{
-+ if ( !isspace(*str) ) return 0;
-+ int n = 0;
-+ while ( --str>=min && *str=='\\' ) n++;
-+ return n%2 ? 0 : 1;
-+}
- smpl_ilist_t *smpl_ilist_init(bcf_hdr_t *hdr, char *sample_list, int is_file, int flags)
- {
- smpl_ilist_t *smpl = (smpl_ilist_t*) calloc(1,sizeof(smpl_ilist_t));
-@@ -44,32 +58,63 @@
- return smpl;
- }
-
-+ int negate = sample_list[0]=='^' ? 1 : 0;
- int nlist;
-- char **list = hts_readlist(sample_list[0]=='^'?sample_list+1:sample_list, is_file, &nlist);
-+ char **list = hts_readlist(negate?sample_list+1:sample_list, is_file, &nlist);
- if ( !list ) error("Could not parse %s\n", sample_list);
-
- // preserve the VCF order
- int *tmp = (int*)calloc(bcf_hdr_nsamples(hdr),sizeof(int));
-+ char **pair = NULL;
- for (i=0; i<nlist; i++)
- {
-- int idx = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, list[i]);
-- if ( idx>=0 )
-+ char *smpl1 = list[i];
-+ char *smpl2 = NULL;
-+
-+ char *ptr = list[i];
-+ while ( *ptr && !is_space_or_escaped(list[i], ptr) ) ptr++;
-+ if ( *ptr )
-+ {
-+ *ptr = 0;
-+ smpl2 = ptr+1;
-+ }
-+
-+ char *smpl_name = flags&SMPL_PAIR2 && smpl2 ? smpl2 : smpl1;
-+ int idx = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, smpl_name);
-+ if ( idx<0 )
- {
-- tmp[idx] = 1;
-- smpl->n++;
-+ if ( !(flags&SMPL_STRICT) )
-+ {
-+ if ( flags&SMPL_VERBOSE ) fprintf(stderr,"No such sample: \"%s\"\n",smpl_name);
-+ continue;
-+ }
-+ error("No such sample: \"%s\"\n", smpl_name);
- }
-- else if ( flags&SMPL_STRICT )
-- error("No such sample: %s\n", list[i]);
-+
-+ tmp[idx] = 1;
-+ if ( smpl2 )
-+ {
-+ if ( !pair ) pair = (char**)calloc(bcf_hdr_nsamples(hdr),sizeof(char*));
-+ if ( flags&SMPL_PAIR2 ) pair[idx] = strdup(smpl1);
-+ else if ( flags&SMPL_PAIR1 ) pair[idx] = strdup(smpl2);
-+ }
-+ smpl->n++;
- }
-
-- if ( sample_list[0]=='^' ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n;
-+ if ( negate ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n;
- smpl->idx = (int*) malloc(sizeof(int)*smpl->n);
-
- int j = 0;
-- if ( sample_list[0]!='^' )
-+ if ( !negate )
- {
-+ if ( pair ) smpl->pair = (char**) calloc(smpl->n,sizeof(char*));
- for (i=0; i<bcf_hdr_nsamples(hdr); i++)
-- if ( tmp[i] ) smpl->idx[j++] = i;
-+ {
-+ if ( !tmp[i] ) continue;
-+ smpl->idx[j] = i;
-+ if ( pair && pair[i] ) smpl->pair[j] = pair[i];
-+ j++;
-+ }
- }
- else
- {
-@@ -78,6 +123,7 @@
- }
-
- free(tmp);
-+ free(pair);
- for (i=0; i<nlist; i++) free(list[i]);
- free(list);
-
---- python-pysam.orig/bcftools/smpl_ilist.c.pysam.c
-+++ python-pysam/bcftools/smpl_ilist.c.pysam.c
-@@ -24,15 +24,29 @@
- THE SOFTWARE.
- */
-
-+#include <ctype.h>
- #include "bcftools.h"
- #include "smpl_ilist.h"
-
- void smpl_ilist_destroy(smpl_ilist_t *smpl)
- {
-+ int i;
-+ if ( smpl->pair )
-+ {
-+ for (i=0; i<smpl->n; i++) free(smpl->pair[i]);
-+ free(smpl->pair);
-+ }
- free(smpl->idx);
- free(smpl);
- }
-
-+static inline int is_space_or_escaped(const char *min, const char *str)
-+{
-+ if ( !isspace(*str) ) return 0;
-+ int n = 0;
-+ while ( --str>=min && *str=='\\' ) n++;
-+ return n%2 ? 0 : 1;
-+}
- smpl_ilist_t *smpl_ilist_init(bcf_hdr_t *hdr, char *sample_list, int is_file, int flags)
- {
- smpl_ilist_t *smpl = (smpl_ilist_t*) calloc(1,sizeof(smpl_ilist_t));
-@@ -46,32 +60,63 @@
- return smpl;
- }
-
-+ int negate = sample_list[0]=='^' ? 1 : 0;
- int nlist;
-- char **list = hts_readlist(sample_list[0]=='^'?sample_list+1:sample_list, is_file, &nlist);
-+ char **list = hts_readlist(negate?sample_list+1:sample_list, is_file, &nlist);
- if ( !list ) error("Could not parse %s\n", sample_list);
-
- // preserve the VCF order
- int *tmp = (int*)calloc(bcf_hdr_nsamples(hdr),sizeof(int));
-+ char **pair = NULL;
- for (i=0; i<nlist; i++)
- {
-- int idx = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, list[i]);
-- if ( idx>=0 )
-+ char *smpl1 = list[i];
-+ char *smpl2 = NULL;
-+
-+ char *ptr = list[i];
-+ while ( *ptr && !is_space_or_escaped(list[i], ptr) ) ptr++;
-+ if ( *ptr )
-+ {
-+ *ptr = 0;
-+ smpl2 = ptr+1;
-+ }
-+
-+ char *smpl_name = flags&SMPL_PAIR2 && smpl2 ? smpl2 : smpl1;
-+ int idx = bcf_hdr_id2int(hdr, BCF_DT_SAMPLE, smpl_name);
-+ if ( idx<0 )
- {
-- tmp[idx] = 1;
-- smpl->n++;
-+ if ( !(flags&SMPL_STRICT) )
-+ {
-+ if ( flags&SMPL_VERBOSE ) fprintf(bcftools_stderr,"No such sample: \"%s\"\n",smpl_name);
-+ continue;
-+ }
-+ error("No such sample: \"%s\"\n", smpl_name);
- }
-- else if ( flags&SMPL_STRICT )
-- error("No such sample: %s\n", list[i]);
-+
-+ tmp[idx] = 1;
-+ if ( smpl2 )
-+ {
-+ if ( !pair ) pair = (char**)calloc(bcf_hdr_nsamples(hdr),sizeof(char*));
-+ if ( flags&SMPL_PAIR2 ) pair[idx] = strdup(smpl1);
-+ else if ( flags&SMPL_PAIR1 ) pair[idx] = strdup(smpl2);
-+ }
-+ smpl->n++;
- }
-
-- if ( sample_list[0]=='^' ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n;
-+ if ( negate ) smpl->n = bcf_hdr_nsamples(hdr) - smpl->n;
- smpl->idx = (int*) malloc(sizeof(int)*smpl->n);
-
- int j = 0;
-- if ( sample_list[0]!='^' )
-+ if ( !negate )
- {
-+ if ( pair ) smpl->pair = (char**) calloc(smpl->n,sizeof(char*));
- for (i=0; i<bcf_hdr_nsamples(hdr); i++)
-- if ( tmp[i] ) smpl->idx[j++] = i;
-+ {
-+ if ( !tmp[i] ) continue;
-+ smpl->idx[j] = i;
-+ if ( pair && pair[i] ) smpl->pair[j] = pair[i];
-+ j++;
-+ }
- }
- else
- {
-@@ -80,6 +125,7 @@
- }
-
- free(tmp);
-+ free(pair);
- for (i=0; i<nlist; i++) free(list[i]);
- free(list);
-
---- python-pysam.orig/bcftools/smpl_ilist.h
-+++ python-pysam/bcftools/smpl_ilist.h
-@@ -30,12 +30,17 @@
-
- #include <htslib/vcf.h>
-
--#define SMPL_NONE 0 // flexible error recovery
--#define SMPL_STRICT 1 // samples must exist
-+#define SMPL_NONE 0 // flexible error recovery
-+#define SMPL_STRICT 1 // samples must exist
-+#define SMPL_SINGLE 2 // single sample expected
-+#define SMPL_PAIR1 4 // two samples expected, the first is from the bcf hdr
-+#define SMPL_PAIR2 8 // two samples expected, the second is from the bcf hdr
-+#define SMPL_VERBOSE 16 // print warnings
-
- typedef struct
- {
-- int *idx; // index to bcf_hdr_t.samples
-+ char **pair; // the other sample in the pair
-+ int *idx; // index to bcf_hdr_t.samples; the first (SMPL_SINGLE|SMPL_PAIR1) or second sample (SMPL_PAIR2)
- int n;
- }
- smpl_ilist_t;
---- python-pysam.orig/bcftools/tabix.c
-+++ python-pysam/bcftools/tabix.c
-@@ -27,6 +27,7 @@
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
-+#include <strings.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h>
-
-@@ -84,7 +85,6 @@
- {
- // auto-detect file type by file name
- int l = strlen(argv[optind]);
-- int strcasecmp(const char *s1, const char *s2);
- if (l>=7 && strcasecmp(argv[optind]+l-7, ".gff.gz") == 0) conf = tbx_conf_gff;
- else if (l>=7 && strcasecmp(argv[optind]+l-7, ".bed.gz") == 0) conf = tbx_conf_bed;
- else if (l>=7 && strcasecmp(argv[optind]+l-7, ".sam.gz") == 0) conf = tbx_conf_sam;
---- python-pysam.orig/bcftools/tabix.c.pysam.c
-+++ python-pysam/bcftools/tabix.c.pysam.c
-@@ -29,6 +29,7 @@
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
-+#include <strings.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h>
-
-@@ -86,7 +87,6 @@
- {
- // auto-detect file type by file name
- int l = strlen(argv[optind]);
-- int strcasecmp(const char *s1, const char *s2);
- if (l>=7 && strcasecmp(argv[optind]+l-7, ".gff.gz") == 0) conf = tbx_conf_gff;
- else if (l>=7 && strcasecmp(argv[optind]+l-7, ".bed.gz") == 0) conf = tbx_conf_bed;
- else if (l>=7 && strcasecmp(argv[optind]+l-7, ".sam.gz") == 0) conf = tbx_conf_sam;
---- python-pysam.orig/bcftools/test/test-regidx.c
-+++ python-pysam/bcftools/test/test-regidx.c
-@@ -32,6 +32,7 @@
- #include <string.h>
- #include <getopt.h>
- #include <htslib/kstring.h>
-+#include <htslib/hts_os.h>
- #include <time.h>
- #include "regidx.h"
-
-@@ -225,6 +226,54 @@
- regidx_destroy(idx);
- free(str.s);
- }
-+void test_explicit(char *tgt, char *qry, char *exp)
-+{
-+ regidx_t *idx = regidx_init(NULL,regidx_parse_reg,NULL,0,NULL);
-+
-+ char *beg = tgt, *end, *exp_ori = exp;
-+ kstring_t str = {0,0,0};
-+ while ( *beg )
-+ {
-+ end = tgt;
-+ while ( *end && *end!=';' ) end++;
-+ str.l = 0;
-+ kputsn(beg, end-beg, &str);
-+ debug("insert: %s\n", str.s);
-+ if ( regidx_insert(idx,str.s)!=0 ) error("insert failed: %s\n", str.s);
-+ beg = *end ? end + 1 : end;
-+ }
-+
-+ beg = qry;
-+ while ( *beg )
-+ {
-+ end = qry;
-+ while ( *end && *end!=';' ) end++;
-+ str.l = 0;
-+ kputsn(beg, end-beg, &str);
-+ beg = *end ? end + 1 : end;
-+
-+ char *chr_beg, *chr_end;
-+ uint32_t reg_beg, reg_end;
-+ if ( regidx_parse_reg(str.s, &chr_beg, &chr_end, ®_beg, ®_end, NULL, NULL)!=0 ) error("could not parse: %s in %s\n", str.s, qry);
-+ chr_end[1] = 0;
-+ int hit = regidx_overlap(idx,chr_beg,reg_beg,reg_end,NULL);
-+ if ( *exp=='1' )
-+ {
-+ if ( !hit ) error("query failed, there should be a hit .. %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ debug("ok: overlap found for %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ }
-+ else if ( *exp=='0' )
-+ {
-+ if ( hit ) error("query failed, there should be no hit .. %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ debug("ok: no overlap found for %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ }
-+ else error("could not parse: %s\n", exp_ori);
-+ exp++;
-+ }
-+
-+ free(str.s);
-+ regidx_destroy(idx);
-+}
-
- void create_line_bed(char *line, char *chr, int start, int end)
- {
-@@ -259,6 +308,11 @@
- set_line(line,chr,start,end);
- debug("insert: %s", line);
- if ( regidx_insert(idx,line)!=0 ) error("insert failed: %s\n", line);
-+
-+ start = 20000*i; end = start + 2000;
-+ set_line(line,chr,start,end);
-+ debug("insert: %s", line);
-+ if ( regidx_insert(idx,line)!=0 ) error("insert failed: %s\n", line);
- }
-
- regitr_t *itr = regitr_init(idx);
-@@ -311,6 +365,19 @@
- }
- if ( nhit!=2 ) error("query failed, expected two hits, found %d: %s:%d-%d\n",nhit,chr,start,end);
-
-+ // fully contained interval, one hit
-+ start = 20000*i - 5000; end = 20000*i + 3000;
-+ set_line(line,chr,start,end);
-+ if ( !regidx_overlap(idx,chr,start-1,end-1,itr) ) error("query failed, there should be a hit: %s:%d-%d\n",chr,start,end);
-+ debug("ok: overlap(s) found for %s:%d-%d\n",chr,start,end);
-+ nhit = 0;
-+ while ( regitr_overlap(itr) )
-+ {
-+ if ( itr->beg > end-1 || itr->end < start-1 ) error("query failed, incorrect region: %d-%d for %d-%d\n",itr->beg+1,itr->end+1,start,end);
-+ debug("\t %d-%d\n",itr->beg+1,itr->end+1);
-+ nhit++;
-+ }
-+ if ( nhit!=1 ) error("query failed, expected one hit, found %d: %s:%d-%d\n",nhit,chr,start,end);
- }
- regitr_destroy(itr);
- regidx_destroy(idx);
-@@ -363,6 +430,9 @@
- info("Testing custom payload\n");
- test_custom_payload();
-
-+ info("Testing cases encountered in past\n");
-+ test_explicit("12:2064519-2064763","12:2064488-2067434","1");
-+
- int i, ntest = 1000, nreg = 50;
- srandom(seed);
- info("%d randomized tests, %d regions per test. Random seed is %d\n", ntest,nreg,seed);
---- python-pysam.orig/bcftools/test/test-regidx.c.pysam.c
-+++ python-pysam/bcftools/test/test-regidx.c.pysam.c
-@@ -34,6 +34,7 @@
- #include <string.h>
- #include <getopt.h>
- #include <htslib/kstring.h>
-+#include <htslib/hts_os.h>
- #include <time.h>
- #include "regidx.h"
-
-@@ -227,6 +228,54 @@
- regidx_destroy(idx);
- free(str.s);
- }
-+void test_explicit(char *tgt, char *qry, char *exp)
-+{
-+ regidx_t *idx = regidx_init(NULL,regidx_parse_reg,NULL,0,NULL);
-+
-+ char *beg = tgt, *end, *exp_ori = exp;
-+ kstring_t str = {0,0,0};
-+ while ( *beg )
-+ {
-+ end = tgt;
-+ while ( *end && *end!=';' ) end++;
-+ str.l = 0;
-+ kputsn(beg, end-beg, &str);
-+ debug("insert: %s\n", str.s);
-+ if ( regidx_insert(idx,str.s)!=0 ) error("insert failed: %s\n", str.s);
-+ beg = *end ? end + 1 : end;
-+ }
-+
-+ beg = qry;
-+ while ( *beg )
-+ {
-+ end = qry;
-+ while ( *end && *end!=';' ) end++;
-+ str.l = 0;
-+ kputsn(beg, end-beg, &str);
-+ beg = *end ? end + 1 : end;
-+
-+ char *chr_beg, *chr_end;
-+ uint32_t reg_beg, reg_end;
-+ if ( regidx_parse_reg(str.s, &chr_beg, &chr_end, ®_beg, ®_end, NULL, NULL)!=0 ) error("could not parse: %s in %s\n", str.s, qry);
-+ chr_end[1] = 0;
-+ int hit = regidx_overlap(idx,chr_beg,reg_beg,reg_end,NULL);
-+ if ( *exp=='1' )
-+ {
-+ if ( !hit ) error("query failed, there should be a hit .. %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ debug("ok: overlap found for %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ }
-+ else if ( *exp=='0' )
-+ {
-+ if ( hit ) error("query failed, there should be no hit .. %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ debug("ok: no overlap found for %s:%d-%d\n",chr_beg,reg_beg+1,reg_end+1);
-+ }
-+ else error("could not parse: %s\n", exp_ori);
-+ exp++;
-+ }
-+
-+ free(str.s);
-+ regidx_destroy(idx);
-+}
-
- void create_line_bed(char *line, char *chr, int start, int end)
- {
-@@ -261,6 +310,11 @@
- set_line(line,chr,start,end);
- debug("insert: %s", line);
- if ( regidx_insert(idx,line)!=0 ) error("insert failed: %s\n", line);
-+
-+ start = 20000*i; end = start + 2000;
-+ set_line(line,chr,start,end);
-+ debug("insert: %s", line);
-+ if ( regidx_insert(idx,line)!=0 ) error("insert failed: %s\n", line);
- }
-
- regitr_t *itr = regitr_init(idx);
-@@ -313,6 +367,19 @@
- }
- if ( nhit!=2 ) error("query failed, expected two hits, found %d: %s:%d-%d\n",nhit,chr,start,end);
-
-+ // fully contained interval, one hit
-+ start = 20000*i - 5000; end = 20000*i + 3000;
-+ set_line(line,chr,start,end);
-+ if ( !regidx_overlap(idx,chr,start-1,end-1,itr) ) error("query failed, there should be a hit: %s:%d-%d\n",chr,start,end);
-+ debug("ok: overlap(s) found for %s:%d-%d\n",chr,start,end);
-+ nhit = 0;
-+ while ( regitr_overlap(itr) )
-+ {
-+ if ( itr->beg > end-1 || itr->end < start-1 ) error("query failed, incorrect region: %d-%d for %d-%d\n",itr->beg+1,itr->end+1,start,end);
-+ debug("\t %d-%d\n",itr->beg+1,itr->end+1);
-+ nhit++;
-+ }
-+ if ( nhit!=1 ) error("query failed, expected one hit, found %d: %s:%d-%d\n",nhit,chr,start,end);
- }
- regitr_destroy(itr);
- regidx_destroy(idx);
-@@ -365,6 +432,9 @@
- info("Testing custom payload\n");
- test_custom_payload();
-
-+ info("Testing cases encountered in past\n");
-+ test_explicit("12:2064519-2064763","12:2064488-2067434","1");
-+
- int i, ntest = 1000, nreg = 50;
- srandom(seed);
- info("%d randomized tests, %d regions per test. Random seed is %d\n", ntest,nreg,seed);
---- /dev/null
-+++ python-pysam/bcftools/variantkey.h
-@@ -0,0 +1,583 @@
-+// VariantKey
-+//
-+// variantkey.h
-+//
-+// @category Libraries
-+// @author Nicola Asuni <nicola.asuni@genomicsplc.com>
-+// @copyright 2017-2018 GENOMICS plc
-+// @license MIT (see LICENSE)
-+// @link https://github.com/genomicsplc/variantkey
-+//
-+// LICENSE
-+//
-+// Copyright (c) 2017-2018 GENOMICS plc
-+//
-+// Permission is hereby granted, free of charge, to any person obtaining a copy
-+// of this software and associated documentation files (the "Software"), to deal
-+// in the Software without restriction, including without limitation the rights
-+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+// copies of the Software, and to permit persons to whom the Software is
-+// furnished to do so, subject to the following conditions:
-+//
-+// The above copyright notice and this permission notice shall be included in
-+// all copies or substantial portions of the Software.
-+//
-+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+// THE SOFTWARE.
-+
-+/**
-+ * @file variantkey.h
-+ * @brief VariantKey main functions.
-+ *
-+ * The functions provided here allows to generate and process a 64 bit Unsigned Integer Keys for Human Genetic Variants.
-+ * The VariantKey is sortable for chromosome and position,
-+ * and it is also fully reversible for variants with up to 11 bases between Reference and Alternate alleles.
-+ * It can be used to sort, search and match variant-based data easily and very quickly.
-+ */
-+
-+#ifndef VARIANTKEY_H
-+#define VARIANTKEY_H
-+
-+#include <inttypes.h>
-+#include <stddef.h>
-+#include <stdio.h>
-+#include "hex.h"
-+
-+#define VKMASK_CHROM 0xF800000000000000 //!< VariantKey binary mask for CHROM [ 11111000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ]
-+#define VKMASK_POS 0x07FFFFFF80000000 //!< VariantKey binary mask for POS [ 00000111 11111111 11111111 11111111 10000000 00000000 00000000 00000000 ]
-+#define VKMASK_CHROMPOS 0xFFFFFFFF80000000 //!< VariantKey binary mask for CHROM+POS [ 11111111 11111111 11111111 11111111 10000000 00000000 00000000 00000000 ]
-+#define VKMASK_REFALT 0x000000007FFFFFFF //!< VariantKey binary mask for REF+ALT [ 00000000 00000000 00000000 00000000 01111111 11111111 11111111 11111111 ]
-+#define VKSHIFT_CHROM 59 //!< CHROM LSB position from the VariantKey LSB
-+#define VKSHIFT_POS 31 //!< POS LSB position from the VariantKey LSB
-+
-+/**
-+ * VariantKey struct.
-+ * Contains the numerically encoded VariantKey components (CHROM, POS, REF+ALT).
-+ */
-+typedef struct variantkey_t
-+{
-+ uint8_t chrom; //!< Chromosome encoded number (only the LSB 5 bit are used)
-+ uint32_t pos; //!< Reference position, with the first base having position 0 (only the LSB 28 bit are used)
-+ uint32_t refalt; //!< Code for Reference and Alternate allele (only the LSB 31 bits are used)
-+} variantkey_t;
-+
-+/**
-+ * Struct containing the minimum and maximum VariantKey values for range searches.
-+ */
-+typedef struct vkrange_t
-+{
-+ uint64_t min; //!< Minimum VariantKey value for any given REF+ALT encoding
-+ uint64_t max; //!< Maximum VariantKey value for any given REF+ALT encoding
-+} vkrange_t;
-+
-+/** @brief Returns chromosome numerical encoding.
-+ *
-+ * @param chrom Chromosome. An identifier from the reference genome, no white-space permitted.
-+ * @param size Length of the chrom string, excluding the terminating null byte.
-+ *
-+ * @return CHROM code
-+ */
-+static inline uint8_t encode_chrom(const char *chrom, size_t size)
-+{
-+ // X > 23 ; Y > 24 ; M > 25
-+ static const uint8_t onecharmap[] =
-+ {
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ /* M X Y */
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23,24, 0, 0, 0, 0, 0, 0,
-+ /* m x y */
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23,24, 0, 0, 0, 0, 0, 0,
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-+ };
-+ // remove "chr" prefix
-+ if ((size > 3)
-+ && ((chrom[0] == 'c') || (chrom[0] == 'C'))
-+ && ((chrom[1] == 'h') || (chrom[1] == 'H'))
-+ && ((chrom[2] == 'r') || (chrom[2] == 'R')))
-+ {
-+ chrom += 3;
-+ size -= 3;
-+ }
-+ if (size == 0)
-+ {
-+ return 0;
-+ }
-+ if ((chrom[0] <= '9') && (chrom[0] >= '0')) // Number
-+ {
-+ size_t i;
-+ uint8_t v = (chrom[0] - '0');
-+ for (i = 1; i < size; i++)
-+ {
-+ if ((chrom[i] > '9') || (chrom[i] < '0'))
-+ {
-+ return 0; // NA
-+ }
-+ v = ((v * 10) + (chrom[i] - '0'));
-+ }
-+ return v;
-+ }
-+ if ((size == 1) || ((size == 2) && ((chrom[1] == 'T') || (chrom[1] == 't'))))
-+ {
-+ return onecharmap[((uint8_t)chrom[0])];
-+ }
-+ return 0; // NA
-+}
-+
-+/** @brief Decode the chromosome numerical code.
-+ *
-+ * @param code CHROM code.
-+ * @param chrom CHROM string buffer to be returned. Its size should be enough to contain the results (max 4 bytes).
-+ *
-+ * @return If successful, the total number of characters written is returned,
-+ * excluding the null-character appended at the end of the string,
-+ * otherwise a negative number is returned in case of failure.
-+ */
-+static inline size_t decode_chrom(uint8_t code, char *chrom)
-+{
-+ if ((code < 1) || (code > 25))
-+ {
-+ return sprintf(chrom, "NA");
-+ }
-+ if (code < 23)
-+ {
-+ return sprintf(chrom, "%" PRIu8, code);
-+ }
-+ static const char *map[] = {"X", "Y", "MT"};
-+ return sprintf(chrom, "%s", map[(code - 23)]);
-+}
-+
-+static inline uint32_t encode_base(const uint8_t c)
-+{
-+ /*
-+ Encode base:
-+ A > 0
-+ C > 1
-+ G > 2
-+ T > 3
-+ */
-+ static const uint32_t map[] =
-+ {
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ /*A C G T*/
-+ 4,0,4,1,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,
-+ /*a c g t*/
-+ 4,0,4,1,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-+ };
-+ return map[c];
-+}
-+
-+static inline int encode_allele(uint32_t *h, uint8_t *bitpos, const char *str, size_t size)
-+{
-+ uint32_t v;
-+ while (size--)
-+ {
-+ v = encode_base(*str++);
-+ if (v > 3)
-+ {
-+ return -1;
-+ }
-+ *bitpos -= 2;
-+ *h |= (v << *bitpos);
-+ }
-+ return 0;
-+}
-+
-+static inline uint32_t encode_refalt_rev(const char *ref, size_t sizeref, const char *alt, size_t sizealt)
-+{
-+ //[******** ******** ******** ******** *RRRRAAA A1122334 45566778 8990011*]
-+ uint32_t h = 0;
-+ h |= ((uint32_t)(sizeref) << 27); // RRRR: length of (REF - 1)
-+ h |= ((uint32_t)(sizealt) << 23); // AAAA: length of (ALT - 1)
-+ uint8_t bitpos = 23;
-+ if ((encode_allele(&h, &bitpos, ref, sizeref) < 0) || (encode_allele(&h, &bitpos, alt, sizealt) < 0))
-+ {
-+ return 0; // error code
-+ }
-+ return h;
-+}
-+
-+// Mix two 32 bit hash numbers using a MurmurHash3-like algorithm
-+static inline uint32_t muxhash(uint32_t k, uint32_t h)
-+{
-+ k *= 0xcc9e2d51;
-+ k = (k >> 17) | (k << 15);
-+ k *= 0x1b873593;
-+ h ^= k;
-+ h = (h >> 19) | (h << 13);
-+ return ((h * 5) + 0xe6546b64);
-+}
-+
-+static inline uint32_t encode_packchar(int c)
-+{
-+ if (c < 'A')
-+ {
-+ return 27;
-+ }
-+ if (c >= 'a')
-+ {
-+ return (uint32_t)(c - 'a' + 1);
-+ }
-+ return (uint32_t)(c - 'A' + 1);
-+}
-+
-+// pack blocks of 6 characters in 32 bit (6 x 5 bit + 2 spare bit) [ 01111122 22233333 44444555 55666660 ]
-+static inline uint32_t pack_chars_tail(const char *str, size_t size)
-+{
-+ uint32_t h = 0;
-+ const char *pos = (str + size - 1);
-+ switch (size)
-+ {
-+ case 5:
-+ h ^= encode_packchar(*pos--) << (1 + (5 * 1));
-+ // fall through
-+ case 4:
-+ h ^= encode_packchar(*pos--) << (1 + (5 * 2));
-+ // fall through
-+ case 3:
-+ h ^= encode_packchar(*pos--) << (1 + (5 * 3));
-+ // fall through
-+ case 2:
-+ h ^= encode_packchar(*pos--) << (1 + (5 * 4));
-+ // fall through
-+ case 1:
-+ h ^= encode_packchar(*pos) << (1 + (5 * 5));
-+ }
-+ return h;
-+}
-+
-+static inline uint32_t pack_chars(const char *str)
-+{
-+ const char *pos = (str + 5);
-+ return ((encode_packchar(*pos) << 1)
-+ ^ (encode_packchar(*(pos-1)) << (1 + (5 * 1)))
-+ ^ (encode_packchar(*(pos-2)) << (1 + (5 * 2)))
-+ ^ (encode_packchar(*(pos-3)) << (1 + (5 * 3)))
-+ ^ (encode_packchar(*(pos-4)) << (1 + (5 * 4)))
-+ ^ (encode_packchar(*(pos-5)) << (1 + (5 * 5))));
-+}
-+
-+// Return a 32 bit hash of a nucleotide string
-+static inline uint32_t hash32(const char *str, size_t size)
-+{
-+ uint32_t h = 0;
-+ size_t len = 6;
-+ while (size >= len)
-+ {
-+ h = muxhash(pack_chars(str), h);
-+ str += len;
-+ size -= len;
-+ }
-+ if (size > 0)
-+ {
-+ h = muxhash(pack_chars_tail(str, size), h);
-+ }
-+ return h;
-+}
-+
-+static inline uint32_t encode_refalt_hash(const char *ref, size_t sizeref, const char *alt, size_t sizealt)
-+{
-+ // 0x3 is the separator character between REF and ALT [00000000 00000000 00000000 00000011]
-+ uint32_t h = muxhash(hash32(alt, sizealt), muxhash(0x3, hash32(ref, sizeref)));
-+ // MurmurHash3 finalization mix - force all bits of a hash block to avalanche
-+ h ^= h >> 16;
-+ h *= 0x85ebca6b;
-+ h ^= h >> 13;
-+ h *= 0xc2b2ae35;
-+ h ^= h >> 16;
-+ return ((h >> 1) | 0x1); // 0x1 is the set bit to indicate HASH mode [00000000 00000000 00000000 00000001]
-+}
-+
-+/** @brief Returns reference+alternate numerical encoding.
-+ *
-+ * @param ref Reference allele. String containing a sequence of nucleotide letters.
-+ * The value in the pos field refers to the position of the first nucleotide in the String.
-+ * Characters must be A-Z, a-z or *
-+ * @param sizeref Length of the ref string, excluding the terminating null byte.
-+ * @param alt Alternate non-reference allele string.
-+ * Characters must be A-Z, a-z or *
-+ * @param sizealt Length of the alt string, excluding the terminating null byte.
-+ *
-+ * @return REF+ALT code
-+ */
-+static inline uint32_t encode_refalt(const char *ref, size_t sizeref, const char *alt, size_t sizealt)
-+{
-+ if ((sizeref + sizealt) <= 11)
-+ {
-+ uint32_t h = encode_refalt_rev(ref, sizeref, alt, sizealt);
-+ if (h != 0)
-+ {
-+ return h;
-+ }
-+ }
-+ return encode_refalt_hash(ref, sizeref, alt, sizealt);
-+}
-+
-+static inline char decode_base(uint32_t code, int bitpos)
-+{
-+ static const char base[4] = {'A', 'C', 'G', 'T'};
-+ return base[((code >> bitpos) & 0x3)]; // 0x3 is the 2 bit mask [00000011]
-+}
-+
-+static inline size_t decode_refalt_rev(uint32_t code, char *ref, size_t *sizeref, char *alt, size_t *sizealt)
-+{
-+ *sizeref = (size_t)((code & 0x78000000) >> 27); // [01111000 00000000 00000000 00000000]
-+ *sizealt = (size_t)((code & 0x07800000) >> 23); // [00000111 10000000 00000000 00000000]
-+ switch (*sizeref)
-+ {
-+ case 10:
-+ ref[9] = decode_base(code, (3 + (2 * 0)));
-+ // fall through
-+ case 9:
-+ ref[8] = decode_base(code, (3 + (2 * 1)));
-+ // fall through
-+ case 8:
-+ ref[7] = decode_base(code, (3 + (2 * 2)));
-+ // fall through
-+ case 7:
-+ ref[6] = decode_base(code, (3 + (2 * 3)));
-+ // fall through
-+ case 6:
-+ ref[5] = decode_base(code, (3 + (2 * 4)));
-+ // fall through
-+ case 5:
-+ ref[4] = decode_base(code, (3 + (2 * 5)));
-+ // fall through
-+ case 4:
-+ ref[3] = decode_base(code, (3 + (2 * 6)));
-+ // fall through
-+ case 3:
-+ ref[2] = decode_base(code, (3 + (2 * 7)));
-+ // fall through
-+ case 2:
-+ ref[1] = decode_base(code, (3 + (2 * 8)));
-+ // fall through
-+ case 1:
-+ ref[0] = decode_base(code, (3 + (2 * 9)));
-+ }
-+ ref[*sizeref] = 0;
-+ uint8_t bitpos = (23 - ((*sizeref) << 1));
-+ switch (*sizealt)
-+ {
-+ case 10:
-+ alt[9] = decode_base(code, bitpos - (2 * 10));
-+ // fall through
-+ case 9:
-+ alt[8] = decode_base(code, bitpos - (2 * 9));
-+ // fall through
-+ case 8:
-+ alt[7] = decode_base(code, bitpos - (2 * 8));
-+ // fall through
-+ case 7:
-+ alt[6] = decode_base(code, bitpos - (2 * 7));
-+ // fall through
-+ case 6:
-+ alt[5] = decode_base(code, bitpos - (2 * 6));
-+ // fall through
-+ case 5:
-+ alt[4] = decode_base(code, bitpos - (2 * 5));
-+ // fall through
-+ case 4:
-+ alt[3] = decode_base(code, bitpos - (2 * 4));
-+ // fall through
-+ case 3:
-+ alt[2] = decode_base(code, bitpos - (2 * 3));
-+ // fall through
-+ case 2:
-+ alt[1] = decode_base(code, bitpos - (2 * 2));
-+ // fall through
-+ case 1:
-+ alt[0] = decode_base(code, bitpos - (2 * 1));
-+ }
-+ alt[*sizealt] = 0;
-+ return (*sizeref + *sizealt);
-+}
-+
-+/** @brief Decode the 32 bit REF+ALT code if reversible (if it has 11 or less bases in total and only contains ACGT letters).
-+ *
-+ * @param code REF+ALT code
-+ * @param ref REF string buffer to be returned.
-+ * @param sizeref Pointer to the size of the ref buffer, excluding the terminating null byte.
-+ * This will contain the final ref size.
-+ * @param alt ALT string buffer to be returned.
-+ * @param sizealt Pointer to the size of the alt buffer, excluding the terminating null byte.
-+ * This will contain the final alt size.
-+ *
-+ * @return If the code is reversible, then the total number of characters of REF+ALT is returned.
-+ * Otherwise 0 is returned.
-+ */
-+static inline size_t decode_refalt(uint32_t code, char *ref, size_t *sizeref, char *alt, size_t *sizealt)
-+{
-+ if (code & 0x1) // check last bit
-+ {
-+ return 0; // non-reversible encoding
-+ }
-+ return decode_refalt_rev(code, ref, sizeref, alt, sizealt);
-+}
-+
-+/** @brief Returns a 64 bit variant key based on the pre-encoded CHROM, POS (0-based) and REF+ALT.
-+ *
-+ * @param chrom Encoded Chromosome (see encode_chrom).
-+ * @param pos Position. The reference position, with the first base having position 0.
-+ * @param refalt Encoded Reference + Alternate (see encode_refalt).
-+ *
-+ * @return VariantKey 64 bit code.
-+ */
-+static inline uint64_t encode_variantkey(uint8_t chrom, uint32_t pos, uint32_t refalt)
-+{
-+ return (((uint64_t)chrom << VKSHIFT_CHROM) | ((uint64_t)pos << VKSHIFT_POS) | (uint64_t)refalt);
-+}
-+
-+/** @brief Extract the CHROM code from VariantKey.
-+ *
-+ * @param vk VariantKey code.
-+ *
-+ * @return CHROM code.
-+ */
-+static inline uint8_t extract_variantkey_chrom(uint64_t vk)
-+{
-+ return (uint8_t)((vk & VKMASK_CHROM) >> VKSHIFT_CHROM);
-+}
-+
-+/** @brief Extract the POS code from VariantKey.
-+ *
-+ * @param vk VariantKey code.
-+ *
-+ * @return POS.
-+ */
-+static inline uint32_t extract_variantkey_pos(uint64_t vk)
-+{
-+ return (uint32_t)((vk & VKMASK_POS) >> VKSHIFT_POS);
-+}
-+
-+/** @brief Extract the REF+ALT code from VariantKey.
-+ *
-+ * @param vk VariantKey code.
-+ *
-+ * @return REF+ALT code.
-+ */
-+static inline uint32_t extract_variantkey_refalt(uint64_t vk)
-+{
-+ return (uint32_t)(vk & VKMASK_REFALT);
-+}
-+
-+/** @brief Decode a VariantKey code and returns the components as variantkey_t structure.
-+ *
-+ * @param code VariantKey code.
-+ * @param vk Decoded variantkey structure.
-+ */
-+static inline void decode_variantkey(uint64_t code, variantkey_t *vk)
-+{
-+ vk->chrom = extract_variantkey_chrom(code);
-+ vk->pos = extract_variantkey_pos(code);
-+ vk->refalt = extract_variantkey_refalt(code);
-+}
-+
-+/** @brief Returns a 64 bit variant key based on CHROM, POS (0-based), REF, ALT.
-+ *
-+ * @param chrom Chromosome. An identifier from the reference genome, no white-space or leading zeros permitted.
-+ * @param sizechrom Length of the chrom string, excluding the terminating null byte.
-+ * @param pos Position. The reference position, with the first base having position 0.
-+ * @param ref Reference allele. String containing a sequence of nucleotide letters.
-+ * The value in the pos field refers to the position of the first nucleotide in the String.
-+ * Characters must be A-Z, a-z or *
-+ * @param sizeref Length of the ref string, excluding the terminating null byte.
-+ * @param alt Alternate non-reference allele string.
-+ * Characters must be A-Z, a-z or *
-+ * @param sizealt Length of the alt string, excluding the terminating null byte.
-+ *
-+ * @return VariantKey 64 bit code.
-+ */
-+static inline uint64_t variantkey(const char *chrom, size_t sizechrom, uint32_t pos, const char *ref, size_t sizeref, const char *alt, size_t sizealt)
-+{
-+ return encode_variantkey(encode_chrom(chrom, sizechrom), pos, encode_refalt(ref, sizeref, alt, sizealt));
-+}
-+
-+/** @brief Returns minimum and maximum VariantKeys for range searches.
-+ *
-+ * @param chrom Chromosome encoded number.
-+ * @param pos_min Start reference position, with the first base having position 0.
-+ * @param pos_max End reference position, with the first base having position 0.
-+ * @param range VariantKey range values.
-+ */
-+static inline void variantkey_range(uint8_t chrom, uint32_t pos_min, uint32_t pos_max, vkrange_t *range)
-+{
-+ uint64_t c = ((uint64_t)chrom << VKSHIFT_CHROM);
-+ range->min = (c | ((uint64_t)pos_min << VKSHIFT_POS));
-+ range->max = (c | ((uint64_t)pos_max << VKSHIFT_POS) | VKMASK_REFALT);
-+}
-+
-+static inline int8_t compare_uint64_t(uint64_t a, uint64_t b)
-+{
-+ return (a < b) ? -1 : (a > b);
-+}
-+
-+/** @brief Compares two VariantKeys by chromosome only.
-+ *
-+ * @param vka The first VariantKey to be compared.
-+ * @param vkb The second VariantKey to be compared.
-+ *
-+ * @return -1 if the first chromosome is smaller than the second, 0 if they are equal and 1 if the first is greater than the second.
-+ */
-+static inline int8_t compare_variantkey_chrom(uint64_t vka, uint64_t vkb)
-+{
-+ return compare_uint64_t((vka >> VKSHIFT_CHROM), (vkb >> VKSHIFT_CHROM));
-+}
-+
-+/** @brief Compares two VariantKeys by chromosome and position.
-+ *
-+ * @param vka The first VariantKey to be compared.
-+ * @param vkb The second VariantKey to be compared.
-+ *
-+ * @return -1 if the first CHROM+POS is smaller than the second, 0 if they are equal and 1 if the first is greater than the second.
-+ */
-+static inline int8_t compare_variantkey_chrom_pos(uint64_t vka, uint64_t vkb)
-+{
-+ return compare_uint64_t((vka >> VKSHIFT_POS), (vkb >> VKSHIFT_POS));
-+}
-+
-+/** @brief Returns VariantKey hexadecimal string (16 characters).
-+ *
-+ * The string represent a 64 bit number or:
-+ * - 5 bit for CHROM
-+ * - 28 bit for POS
-+ * - 31 bit for REF+ALT
-+ *
-+ * @param vk VariantKey code.
-+ * @param str String buffer to be returned (it must be sized 17 bytes at least).
-+ *
-+ * @return Upon successful return, these function returns the number of characters processed
-+ * (excluding the null byte used to end output to strings).
-+ * If the buffer size is not sufficient, then the return value is the number of characters required for
-+ * buffer string, including the terminating null byte.
-+ */
-+static inline size_t variantkey_hex(uint64_t vk, char *str)
-+{
-+ return hex_uint64_t(vk, str);
-+}
-+
-+/** @brief Parses a VariantKey hexadecimal string and returns the code.
-+ *
-+ * @param vs VariantKey hexadecimal string (it must contain 16 hexadecimal characters).
-+ *
-+ * @return A VariantKey code.
-+ */
-+static inline uint64_t parse_variantkey_hex(const char *vs)
-+{
-+ return parse_hex_uint64_t(vs);
-+}
-+
-+#endif // VARIANTKEY_H
---- python-pysam.orig/bcftools/vcfannotate.c
-+++ python-pysam/bcftools/vcfannotate.c
-@@ -1,6 +1,6 @@
- /* vcfannotate.c -- Annotate and edit VCF/BCF files.
-
-- Copyright (C) 2013-2018 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -33,16 +33,17 @@
- #include <sys/types.h>
- #include <dirent.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kseq.h>
- #include <htslib/khash_str2int.h>
--#include <dlfcn.h>
- #include "bcftools.h"
- #include "vcmp.h"
- #include "filter.h"
- #include "convert.h"
- #include "smpl_ilist.h"
-+#include "regidx.h"
-
- struct _args_t;
-
-@@ -65,15 +66,30 @@
- }
- annot_line_t;
-
--#define REPLACE_MISSING 0 // replace only missing values
--#define REPLACE_ALL 1 // replace both missing and existing values
--#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing
--#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise
-+#define REPLACE_MISSING 0 // replace only missing values
-+#define REPLACE_ALL 1 // replace both missing and existing values
-+#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing
-+#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise
-+#define MM_FIRST 0 // if multiple annotation lines overlap a VCF record, use the first, discarding the rest
-+#define MM_APPEND 1 // append, possibly multiple times
-+#define MM_UNIQUE 2 // append, only unique values
-+#define MM_SUM 3
-+#define MM_AVG 4
-+#define MM_MIN 5
-+#define MM_MAX 6
- typedef struct _annot_col_t
- {
- int icol, replace, number; // number: one of BCF_VL_* types
- char *hdr_key_src, *hdr_key_dst;
- int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*);
-+ int merge_method; // one of the MM_* defines
-+ khash_t(str2int) *mm_str_hash; // lookup table to ensure uniqueness of added string values
-+ kstring_t mm_kstr;
-+ double
-+ mm_dbl_nalloc, // the allocated size --merge-logic values array
-+ mm_dbl_nused, // the number of used elements in the mm_dbl array
-+ mm_dbl_ndat, // the number of merged rows (for calculating the average)
-+ *mm_dbl;
- }
- annot_col_t;
-
-@@ -92,6 +108,10 @@
- int output_type, n_threads;
- bcf_sr_regions_t *tgts;
-
-+ regidx_t *tgt_idx;
-+ regitr_t *tgt_itr;
-+ int tgt_is_bed;
-+
- filter_t *filter;
- char *filter_str;
- int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE
-@@ -104,7 +124,7 @@
- vcmp_t *vcmp; // for matching annotation and VCF lines by allele
- annot_line_t *alines; // buffered annotation lines
- int nalines, malines;
-- int ref_idx, alt_idx, chr_idx, from_idx, to_idx; // -1 if not present
-+ int ref_idx, alt_idx, chr_idx, beg_idx, end_idx; // -1 if not present
- annot_col_t *cols; // column indexes and setters
- int ncols;
-
-@@ -125,18 +145,40 @@
-
- char **argv, *output_fname, *targets_fname, *regions_list, *header_fname;
- char *remove_annots, *columns, *rename_chrs, *sample_names, *mark_sites;
-- int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic;
-+ char *merge_method_str;
-+ int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic, force, single_overlaps;
- }
- args_t;
-
- char *msprintf(const char *fmt, ...);
-
-+int parse_with_payload(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr)
-+{
-+ args_t *args = (args_t*) usr;
-+ int ret = args->tgt_is_bed ? regidx_parse_bed(line, chr_beg, chr_end, beg, end, NULL, NULL) : regidx_parse_tab(line, chr_beg, chr_end, beg, end, NULL, NULL);
-+ if ( ret<0 ) return ret;
-+ *((char **)payload) = strdup(line);
-+ return 0;
-+}
-+void free_payload(void *payload)
-+{
-+ char *str = *((char**)payload);
-+ free(str);
-+}
-+
- void remove_id(args_t *args, bcf1_t *line, rm_tag_t *tag)
- {
- bcf_update_id(args->hdr,line,NULL);
- }
- void remove_filter(args_t *args, bcf1_t *line, rm_tag_t *tag)
- {
-+ if ( tag->key && tag->hdr_id<0 )
-+ {
-+ error("Error: Cannot proceed, not even with the --force option, bad things could happen.\n"
-+ " Note that \"bcftools annotate -x FILTER\" can be used to remove ALL filters.\n"
-+ " Even better, use \"bcftools view -h\" and \"bcftools reheader\" to fix the header!\n"
-+ );
-+ }
- if ( !tag->key ) bcf_update_filter(args->hdr, line, NULL, args->flt_keep_pass);
- else bcf_remove_filter(args->hdr, line, tag->hdr_id, args->flt_keep_pass);
- }
-@@ -223,7 +265,10 @@
- memmove(&hdr->hrec[i],&hdr->hrec[i+1],(hdr->nhrec-i)*sizeof(bcf_hrec_t*));
- bcf_hrec_destroy(hrec);
- }
-- if ( nrm ) bcf_hdr_sync(hdr);
-+ if ( nrm ) {
-+ if (bcf_hdr_sync(hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
- }
-
- static void init_remove_annots(args_t *args)
-@@ -264,8 +309,14 @@
- tag->handler = remove_filter;
- tag->key = strdup(str.s);
- tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, tag->key);
-- if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) ) error("Cannot remove %s, not defined in the header.\n", str.s);
-- if ( !args->keep_sites ) bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key);
-+ if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) )
-+ {
-+ if ( args->keep_sites )
-+ error("Error: The filter \"%s\" is not defined in the header, cannot use the -k option\n", str.s);
-+ else
-+ fprintf(stderr,"Warning: The filter \"%s\" is not defined in the header\n", str.s);
-+ }
-+ else if ( !args->keep_sites ) bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key);
- }
- else
- {
-@@ -280,8 +331,14 @@
- int id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,str.s);
- if ( !bcf_hdr_idinfo_exists(args->hdr,type,id) )
- {
-- fprintf(stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s);
-- args->nrm--;
-+ if ( args->keep_sites )
-+ error("Error: The tag \"%s\" is not defined in the header, cannot use the -k option\n", str.s);
-+ else
-+ fprintf(stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s);
-+
-+ tag->key = strdup(str.s);
-+ if ( type==BCF_HL_INFO ) tag->handler = remove_info_tag;
-+ else if ( type==BCF_HL_FMT ) tag->handler = remove_format_tag;
- }
- else if ( (type==BCF_HL_FMT && keep_fmt) || (type==BCF_HL_INFO && keep_info) )
- {
-@@ -364,7 +421,8 @@
- }
- khash_str2int_destroy_free(keep);
- if ( !args->nrm ) error("No matching tag in -x %s\n", args->remove_annots);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- static void init_header_lines(args_t *args)
- {
-@@ -376,13 +434,17 @@
- if ( bcf_hdr_append(args->hdr_out,str.s) ) error("Could not parse %s: %s\n", args->header_fname, str.s);
- bcf_hdr_append(args->hdr,str.s); // the input file may not have the header line if run with -h (and nothing else)
- }
-- hts_close(file);
-+ if ( hts_close(file)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->header_fname);
- free(str.s);
-- bcf_hdr_sync(args->hdr_out);
-- bcf_hdr_sync(args->hdr);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update output header", __func__);
-+ if (bcf_hdr_sync(args->hdr) < 0)
-+ error_errno("[%s] Failed to update input header", __func__);
- }
- static int setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FILTER (yet?)\n");
-+
- // note: so far this works only with one filter, not a list of filters
- annot_line_t *tab = (annot_line_t*) data;
- if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "."
-@@ -432,6 +494,8 @@
- }
- static int setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with ID (yet?)\n");
-+
- // possible cases:
- // IN ANNOT OUT ACHIEVED_BY
- // x y x -c +ID
-@@ -493,6 +557,8 @@
- }
- static int setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with QUAL (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- char *str = tab->cols[col->icol];
- if ( str[0]=='.' && str[1]==0 ) return 0; // empty
-@@ -501,7 +567,7 @@
-
- line->qual = strtod(str, &str);
- if ( str == tab->cols[col->icol] )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
- return 0;
- }
- static int vcf_setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
-@@ -514,13 +580,15 @@
- }
- static int setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with INFO type=Flag (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- char *str = tab->cols[col->icol];
- if ( str[0]=='.' && str[1]==0 ) return 0;
-
- if ( str[0]=='1' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,1);
- if ( str[0]=='0' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,0);
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
- return -1;
- }
- static int vcf_setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
-@@ -533,13 +601,13 @@
- static int setter_ARinfo_int32(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpi)
- {
- if ( col->number==BCF_VL_A && ntmpi!=nals-1 && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && ntmpi!=nals && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int ntmpi2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2);
-@@ -565,19 +633,75 @@
- static int setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- annot_line_t *tab = (annot_line_t*) data;
-- char *str = tab->cols[col->icol], *end = str;
-- if ( str[0]=='.' && str[1]==0 ) return 0;
-
-- int ntmpi = 0;
-- while ( *end )
-+ if ( !tab )
-+ {
-+ if ( col->merge_method!=MM_SUM && col->merge_method!=MM_AVG && col->merge_method!=MM_MIN && col->merge_method!=MM_MAX && col->merge_method!=MM_APPEND )
-+ error("Error: at the moment only the sum,avg,min,max,append options are supported with --merge-logic for INFO type=Integer\n");
-+ }
-+
-+ int i,ntmpi = 0;
-+ if ( tab )
-+ {
-+ char *str = tab->cols[col->icol], *end = str;
-+ if ( str[0]=='.' && str[1]==0 ) return 0;
-+
-+ while ( *end )
-+ {
-+ int val = strtol(str, &end, 10);
-+ if ( end==str )
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-+ ntmpi++;
-+ hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-+ args->tmpi[ntmpi-1] = val;
-+ str = end+1;
-+ }
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( !col->mm_dbl_nused )
-+ {
-+ col->mm_dbl_nused = ntmpi;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpi; i++)
-+ col->mm_dbl[i] = args->tmpi[i];
-+ }
-+ else
-+ {
-+ if ( col->merge_method==MM_APPEND )
-+ {
-+ int nori = col->mm_dbl_nused;
-+ col->mm_dbl_nused += ntmpi;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpi; i++)
-+ col->mm_dbl[i+nori] = args->tmpi[i];
-+ }
-+ else
-+ {
-+ if ( ntmpi!=col->mm_dbl_nused ) error("Error: cannot merge fields of unequal length\n");
-+ if ( col->merge_method==MM_SUM || col->merge_method==MM_AVG )
-+ for (i=0; i<ntmpi; i++) col->mm_dbl[i] += args->tmpi[i];
-+ else if ( col->merge_method==MM_MIN )
-+ for (i=0; i<ntmpi; i++) { if ( col->mm_dbl[i] > args->tmpi[i] ) col->mm_dbl[i] = args->tmpi[i]; }
-+ else if ( col->merge_method==MM_MAX )
-+ for (i=0; i<ntmpi; i++) { if ( col->mm_dbl[i] < args->tmpi[i] ) col->mm_dbl[i] = args->tmpi[i]; }
-+ }
-+ }
-+ col->mm_dbl_ndat++;
-+ }
-+ }
-+ else if ( col->merge_method==MM_SUM || col->merge_method==MM_MIN || col->merge_method==MM_MAX || col->merge_method==MM_APPEND )
-+ {
-+ ntmpi = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-+ for (i=0; i<ntmpi; i++) args->tmpi[i] = col->mm_dbl[i];
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
-+ }
-+ else if ( col->merge_method==MM_AVG )
- {
-- int val = strtol(str, &end, 10);
-- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-- ntmpi++;
-+ ntmpi = col->mm_dbl_nused;
- hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-- args->tmpi[ntmpi-1] = val;
-- str = end+1;
-+ for (i=0; i<ntmpi; i++) args->tmpi[i] = col->mm_dbl[i]/col->mm_dbl_ndat;
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
- }
-
- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-@@ -613,13 +737,13 @@
- static int setter_ARinfo_real(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpf)
- {
- if ( col->number==BCF_VL_A && ntmpf!=nals-1 && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && ntmpf!=nals && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int ntmpf2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2);
-@@ -645,19 +769,75 @@
- static int setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- annot_line_t *tab = (annot_line_t*) data;
-- char *str = tab->cols[col->icol], *end = str;
-- if ( str[0]=='.' && str[1]==0 ) return 0;
-
-- int ntmpf = 0;
-- while ( *end )
-+ if ( !tab )
- {
-- double val = strtod(str, &end);
-- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-- ntmpf++;
-- hts_expand(float,ntmpf,args->mtmpf,args->tmpf);
-- args->tmpf[ntmpf-1] = val;
-- str = end+1;
-+ if ( col->merge_method!=MM_SUM && col->merge_method!=MM_AVG && col->merge_method!=MM_MIN && col->merge_method!=MM_MAX && col->merge_method!=MM_APPEND )
-+ error("Error: at the moment only the sum,avg,min,max,append options are supported with --merge-logic for INFO type=Float\n");
-+ }
-+
-+ int i,ntmpf = 0;
-+ if ( tab )
-+ {
-+ char *str = tab->cols[col->icol], *end = str;
-+ if ( str[0]=='.' && str[1]==0 ) return 0;
-+
-+ while ( *end )
-+ {
-+ double val = strtod(str, &end);
-+ if ( end==str )
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-+ ntmpf++;
-+ hts_expand(float,ntmpf,args->mtmpf,args->tmpf);
-+ args->tmpf[ntmpf-1] = val;
-+ str = end+1;
-+ }
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( !col->mm_dbl_nused )
-+ {
-+ col->mm_dbl_nused = ntmpf;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpf; i++)
-+ col->mm_dbl[i] = args->tmpf[i];
-+ }
-+ else
-+ {
-+ if ( col->merge_method==MM_APPEND )
-+ {
-+ int nori = col->mm_dbl_nused;
-+ col->mm_dbl_nused += ntmpf;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpf; i++)
-+ col->mm_dbl[i+nori] = args->tmpf[i];
-+ }
-+ else
-+ {
-+ if ( ntmpf!=col->mm_dbl_nused ) error("Error: cannot merge fields of unequal length\n");
-+ if ( col->merge_method==MM_SUM || col->merge_method==MM_AVG )
-+ for (i=0; i<ntmpf; i++) col->mm_dbl[i] += args->tmpf[i];
-+ else if ( col->merge_method==MM_MIN )
-+ for (i=0; i<ntmpf; i++) { if ( col->mm_dbl[i] > args->tmpf[i] ) col->mm_dbl[i] = args->tmpf[i]; }
-+ else if ( col->merge_method==MM_MAX )
-+ for (i=0; i<ntmpf; i++) { if ( col->mm_dbl[i] < args->tmpf[i] ) col->mm_dbl[i] = args->tmpf[i]; }
-+ }
-+ }
-+ col->mm_dbl_ndat++;
-+ }
-+ }
-+ else if ( col->merge_method==MM_SUM || col->merge_method==MM_MIN || col->merge_method==MM_MAX || col->merge_method==MM_APPEND )
-+ {
-+ ntmpf = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpf,args->mtmpf,args->tmpf);
-+ for (i=0; i<ntmpf; i++) args->tmpf[i] = col->mm_dbl[i];
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
-+ }
-+ else if ( col->merge_method==MM_AVG )
-+ {
-+ ntmpf = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpf,args->mtmpf,args->tmpf);
-+ for (i=0; i<ntmpf; i++) args->tmpf[i] = col->mm_dbl[i]/col->mm_dbl_ndat;
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
- }
-
- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-@@ -693,6 +873,8 @@
- int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c
- static int setter_ARinfo_string(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als)
- {
-+ assert( col->merge_method==MM_FIRST );
-+
- int nsrc = 1, lsrc = 0;
- while ( args->tmps[lsrc] )
- {
-@@ -700,13 +882,13 @@
- lsrc++;
- }
- if ( col->number==BCF_VL_A && nsrc!=nals-1 && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && nsrc!=nals && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int i, empty = 0, nstr, mstr = args->tmpks.m;
-@@ -746,22 +928,76 @@
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s);
- return 0;
- }
-+void khash_str2int_clear_free(void *_hash)
-+{
-+ khash_t(str2int) *hash = (khash_t(str2int)*)_hash;
-+ khint_t k;
-+ if (hash == 0) return;
-+ for (k = 0; k < kh_end(hash); ++k)
-+ if (kh_exist(hash, k)) free((char*)kh_key(hash, k));
-+ kh_clear(str2int, hash);
-+}
- static int setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( col->replace==REPLACE_MISSING && col->number!=BCF_VL_A && col->number!=BCF_VL_R )
-+ {
-+ int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2);
-+ if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0;
-+ }
-+
- annot_line_t *tab = (annot_line_t*) data;
-- int len = strlen(tab->cols[col->icol]);
-- if ( !len ) return 0;
-- hts_expand(char,len+1,args->mtmps,args->tmps);
-- memcpy(args->tmps,tab->cols[col->icol],len+1);
-- if ( args->tmps[0]=='.' && args->tmps[1]==0 ) return 0;
-+
-+ int len = 0;
-+ if ( tab )
-+ {
-+ len = strlen(tab->cols[col->icol]);
-+ if ( !len ) return 0;
-+ if ( len==1 && tab->cols[col->icol][0]=='.' ) return 0;
-+ }
-
-- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-- return setter_ARinfo_string(args,line,col,tab->nals,tab->als);
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-+ error("Error: the --merge-logic option cannot be used with INFO tags Type=String,Number={A,R,G}\n");
-
-- if ( col->replace==REPLACE_MISSING )
-+ if ( data )
-+ {
-+ assert( col->merge_method==MM_APPEND || col->merge_method==MM_UNIQUE );
-+ if ( col->merge_method==MM_UNIQUE )
-+ {
-+ if ( !col->mm_str_hash ) col->mm_str_hash = (khash_t(str2int)*)khash_str2int_init();
-+ if ( khash_str2int_has_key(col->mm_str_hash, tab->cols[col->icol]) ) return 0;
-+ khash_str2int_inc(col->mm_str_hash, strdup(tab->cols[col->icol]));
-+ }
-+
-+ if ( col->mm_kstr.l ) kputc(',',&col->mm_kstr);
-+ kputs(tab->cols[col->icol], &col->mm_kstr);
-+ return 0;
-+ }
-+
-+ if ( col->mm_kstr.l )
-+ {
-+ hts_expand(char,col->mm_kstr.l+1,args->mtmps,args->tmps);
-+ memcpy(args->tmps,col->mm_kstr.s,col->mm_kstr.l+1);
-+ }
-+ else
-+ return 0;
-+
-+ if ( !data ) // flush the line
-+ {
-+ if ( col->merge_method==MM_UNIQUE )
-+ khash_str2int_clear_free(col->mm_str_hash);
-+ col->mm_kstr.l = 0;
-+ }
-+ }
-+ else
- {
-- int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2);
-- if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0;
-+ assert(tab);
-+ hts_expand(char,len+1,args->mtmps,args->tmps);
-+ memcpy(args->tmps,tab->cols[col->icol],len+1);
-+
-+ if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-+ return setter_ARinfo_string(args,line,col,tab->nals,tab->als);
- }
-
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps);
-@@ -785,6 +1021,48 @@
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps);
- return 0;
- }
-+static int genotypes_to_string(args_t *args, int nsrc1, int32_t *src, int nsmpl_dst, kstring_t *str)
-+{
-+ int i, isrc, idst;
-+ int blen = nsrc1 > 1 ? nsrc1 + 1 : 1; // typically the genotypes take three bytes 0/1, no 0-termination is needed
-+
-+gt_length_too_big:
-+ str->l = 0;
-+ for (idst=0; idst<nsmpl_dst; idst++)
-+ {
-+ isrc = args->sample_map ? args->sample_map[idst] : idst;
-+ if ( isrc==-1 )
-+ {
-+ kputc_('.', str);
-+ for (i=1; i < blen; i++) kputc_(0, str);
-+ continue;
-+ }
-+
-+ size_t plen = str->l;
-+ int32_t *ptr = src + isrc*nsrc1;
-+ for (i=0; i<nsrc1 && ptr[i]!=bcf_int32_vector_end; i++)
-+ {
-+ if ( i ) kputc("/|"[bcf_gt_is_phased(ptr[i])], str);
-+ if ( bcf_gt_is_missing(ptr[i]) ) kputc('.', str);
-+ else kputw(bcf_gt_allele(ptr[i]), str);
-+ }
-+ if ( i==0 ) kputc('.', str);
-+ if ( str->l - plen > blen )
-+ {
-+ // too many alternate alleles or ploidy is too large, the genotype does not fit
-+ // three characters ("0/0" vs "10/10").
-+ blen *= 2;
-+ goto gt_length_too_big;
-+ }
-+ plen = str->l - plen;
-+ while ( plen < blen )
-+ {
-+ kputc_(0, str);
-+ plen++;
-+ }
-+ }
-+ return 0;
-+}
- static int vcf_setter_format_gt(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- bcf1_t *rec = (bcf1_t*) data;
-@@ -792,6 +1070,16 @@
- if ( nsrc==-3 ) return 0; // the tag is not present
- if ( nsrc<=0 ) return 1; // error
-
-+ // Genotypes are internally represented as integers. This is a complication when
-+ // adding as a different Type=String field, such as FMT/newGT:=GT
-+ if ( strcmp(col->hdr_key_src,col->hdr_key_dst) )
-+ {
-+ int nsmpl_dst = bcf_hdr_nsamples(args->hdr_out);
-+ int nsmpl_src = bcf_hdr_nsamples(args->files->readers[1].header);
-+ genotypes_to_string(args,nsrc/nsmpl_src,args->tmpi,nsmpl_dst,&args->tmpks);
-+ return bcf_update_format_char(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s,args->tmpks.l);
-+ }
-+
- if ( !args->sample_map )
- return bcf_update_genotypes(args->hdr_out,line,args->tmpi,nsrc);
-
-@@ -1057,9 +1345,11 @@
- }
- static int setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot);
- hts_expand(int32_t,nvals*args->nsmpl_annot,args->mtmpi,args->tmpi);
-
-@@ -1082,7 +1372,7 @@
- char *end = str;
- ptr[ival] = strtol(str, &end, 10);
- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-
- ival++;
- str = *end ? end+1 : end;
-@@ -1094,9 +1384,11 @@
- }
- static int setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot);
- hts_expand(float,nvals*args->nsmpl_annot,args->mtmpf,args->tmpf);
-
-@@ -1120,7 +1412,7 @@
- char *end = str;
- ptr[ival] = strtod(str, &end);
- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-
- ival++;
- str = *end ? end+1 : end;
-@@ -1132,9 +1424,11 @@
- }
- static int setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ismpl;
- for (ismpl=0; ismpl<args->nsmpl_annot; ismpl++)
-@@ -1186,7 +1480,7 @@
- // create mapping from src to dst genotypes, haploid and diploid version
- int nmap_hap = col->number==BCF_VL_G || col->number==BCF_VL_R ? rec->n_allele : rec->n_allele - 1;
- int *map_hap = vcmp_map_ARvalues(args->vcmp,nmap_hap,line->n_allele,line->d.allele,rec->n_allele,rec->d.allele);
-- if ( !map_hap ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map_hap ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int i, j;
- if ( rec->n_allele==line->n_allele )
-@@ -1226,15 +1520,15 @@
- }
- int pld_src = determine_ploidy(rec->n_allele, args->tmpi, nsrc1, args->src_smpl_pld, nsmpl_src);
- if ( pld_src<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),rec->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),(int64_t) rec->pos+1);
- int pld_dst = determine_ploidy(line->n_allele, args->tmpi2, ndst1, args->dst_smpl_pld, nsmpl_dst);
- if ( pld_dst<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst1_new = pld_dst==1 ? line->n_allele : line->n_allele*(line->n_allele+1)/2;
- if ( ndst1_new != ndst1 )
- {
-- if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%d\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%"PRId64"\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- ndst1 = ndst1_new;
- hts_expand(int32_t, ndst1*nsmpl_dst, args->mtmpi2, args->tmpi2);
- }
-@@ -1254,7 +1548,7 @@
- if ( col->number==BCF_VL_G )
- {
- if ( args->src_smpl_pld[ii] > 0 && args->dst_smpl_pld[i] > 0 && args->src_smpl_pld[ii]!=args->dst_smpl_pld[i] )
-- error("Sample ploidy differs at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Sample ploidy differs at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- if ( !args->dst_smpl_pld[i] )
- for (j=0; j<ndst1; j++) ptr_dst[j] = bcf_int32_missing;
- }
-@@ -1281,7 +1575,6 @@
- }
- static int vcf_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
--
- bcf1_t *rec = (bcf1_t*) data;
- int nsrc = bcf_get_format_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf);
- if ( nsrc==-3 ) return 0; // the tag is not present
-@@ -1294,7 +1587,7 @@
- // create mapping from src to dst genotypes, haploid and diploid version
- int nmap_hap = col->number==BCF_VL_G || col->number==BCF_VL_R ? rec->n_allele : rec->n_allele - 1;
- int *map_hap = vcmp_map_ARvalues(args->vcmp,nmap_hap,line->n_allele,line->d.allele,rec->n_allele,rec->d.allele);
-- if ( !map_hap ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map_hap ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int i, j;
- if ( rec->n_allele==line->n_allele )
-@@ -1334,15 +1627,15 @@
- }
- int pld_src = determine_ploidy(rec->n_allele, args->tmpi, nsrc1, args->src_smpl_pld, nsmpl_src);
- if ( pld_src<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),rec->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),(int64_t) rec->pos+1);
- int pld_dst = determine_ploidy(line->n_allele, args->tmpi2, ndst1, args->dst_smpl_pld, nsmpl_dst);
- if ( pld_dst<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst1_new = pld_dst==1 ? line->n_allele : line->n_allele*(line->n_allele+1)/2;
- if ( ndst1_new != ndst1 )
- {
-- if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%d\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%"PRId64"\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- ndst1 = ndst1_new;
- hts_expand(float, ndst1*nsmpl_dst, args->mtmpf2, args->tmpf2);
- }
-@@ -1362,7 +1655,7 @@
- if ( col->number==BCF_VL_G )
- {
- if ( args->src_smpl_pld[ii] > 0 && args->dst_smpl_pld[i] > 0 && args->src_smpl_pld[ii]!=args->dst_smpl_pld[i] )
-- error("Sample ploidy differs at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Sample ploidy differs at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- if ( !args->dst_smpl_pld[i] )
- for (j=0; j<ndst1; j++) bcf_float_set_missing(ptr_dst[j]);
- }
-@@ -1407,7 +1700,66 @@
- args->tmps = args->tmpp[0]; // tmps might be realloced
- if ( ret==-3 ) return 0; // the tag is not present
- if ( ret<=0 ) return 1; // error
-- return core_setter_format_str(args,line,col,args->tmpp);
-+ if ( strcmp("GT",col->hdr_key_dst) )
-+ return core_setter_format_str(args,line,col,args->tmpp);
-+
-+ // Genotypes are internally represented as integers. This is a complication for FMT/GT:=oldGT
-+ // First determine the maximum number of alleles per-sample ndst1
-+ int nsmpl_src = bcf_hdr_nsamples(args->files->readers[1].header);
-+ int nsmpl_dst = bcf_hdr_nsamples(args->hdr_out);
-+ int isrc,idst, ndst1 = 0, nsrc1 = ret / nsmpl_src;
-+ char *ptr = args->tmps, *ptr_end = ptr + ret;
-+ while ( ptr < ptr_end )
-+ {
-+ char *smpl_end = ptr + nsrc1;
-+ int n = 1;
-+ while ( ptr < smpl_end )
-+ {
-+ if ( *ptr=='/' || *ptr=='|' ) n++;
-+ ptr++;
-+ }
-+ if ( ndst1 < n ) ndst1 = n;
-+ }
-+ assert( ndst1 );
-+
-+ int ndst = ndst1*nsmpl_dst;
-+ hts_expand(int32_t,ndst,args->mtmpi,args->tmpi);
-+ hts_expand(char,ret+1,args->mtmps,args->tmps); args->tmps[ret] = 0; // the FORMAT string may not be 0-terminated
-+ for (idst=0; idst<nsmpl_dst; idst++)
-+ {
-+ int i = 0, is_phased = 0;
-+ int32_t *dst = args->tmpi + idst*ndst1;
-+ isrc = args->sample_map ? args->sample_map[idst] : idst;
-+ if ( isrc==-1 )
-+ {
-+ dst[0] = bcf_gt_missing;
-+ for (i=1; i<ndst1; i++) dst[i] = bcf_int32_vector_end;
-+ continue;
-+ }
-+ char *beg = args->tmps + isrc*nsrc1, *tmp;
-+ char *keep_ptr = beg+nsrc1, keep = *keep_ptr; *keep_ptr = 0;
-+ while ( *beg )
-+ {
-+ char *end = beg;
-+ while ( *end && *end!='/' && *end!='|' ) end++;
-+ if ( *beg=='.' && end-beg==1 ) dst[i] = bcf_gt_missing;
-+ else
-+ {
-+ if ( *end=='|' ) is_phased = 1;
-+ dst[i] = strtol(beg, &tmp, 10);
-+ if ( tmp!=end )
-+ error("Could not parse the %s field at %s:%"PRId64" in %s\n", col->hdr_key_src,bcf_seqname(args->files->readers[1].header,rec),(int64_t) rec->pos+1,args->targets_fname);
-+ if ( dst[i] >= line->n_allele )
-+ error("The source allele index is bigger than the number of destination alleles at %s:%"PRId64"\n", bcf_seqname(args->files->readers[1].header,rec),(int64_t) rec->pos+1);
-+ dst[i] = is_phased ? bcf_gt_phased(dst[i]) : bcf_gt_unphased(dst[i]);
-+ }
-+ beg = *end ? end+1 : end;
-+ i++;
-+ }
-+ *keep_ptr = keep;
-+ for (; i<ndst1; i++) dst[i] = bcf_int32_vector_end;
-+ }
-+ return bcf_update_genotypes(args->hdr_out,line,args->tmpi,ndst);
- }
- static int init_sample_map(args_t *args, bcf_hdr_t *src, bcf_hdr_t *dst)
- {
-@@ -1446,62 +1798,25 @@
- args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map);
- for (i=0; i<args->nsample_map; i++) args->sample_map[i] = -1;
-
-- // possible todo: could do with smpl_ilist only
-- smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, SMPL_STRICT);
-- if ( !ilist || !ilist->n ) error("Could not parse: %s\n", args->sample_names);
-- char **samples = (char**) malloc(sizeof(char*)*ilist->n);
-- for (i=0; i<ilist->n; i++) samples[i] = strdup(dst->samples[i]);
-+ int flags = !src ? SMPL_STRICT|SMPL_SINGLE : SMPL_STRICT|SMPL_SINGLE|SMPL_PAIR2; // is vcf vs tab annotation file
-+ smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, flags); // gives mapping dst->src
-+ if ( !ilist || !ilist->n ) error("Could not parse the samples: %s\n", args->sample_names);
- args->nsmpl_annot = ilist->n;
-- smpl_ilist_destroy(ilist);
- int need_sample_map = args->nsmpl_annot==bcf_hdr_nsamples(dst) ? 0 : 1;
-- if ( !src )
-+ for (i=0; i<args->nsmpl_annot; i++)
- {
-- // tab annotation file
-- for (i=0; i<args->nsmpl_annot; i++)
-+ int idst = ilist->idx[i];
-+ const char *src_name = ilist->pair && ilist->pair[i] ? ilist->pair[i] : bcf_hdr_int2id(dst, BCF_DT_SAMPLE, idst);
-+ int isrc = i;
-+ if ( src ) // the annotation file is a VCF, not a tab-delimited file
- {
-- int idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE, samples[i]);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", samples[i]);
-- args->sample_map[idst] = i;
-- if ( idst!=i ) need_sample_map = 1;
-- }
-- }
-- else
-- {
-- // vcf annotation file
-- for (i=0; i<args->nsmpl_annot; i++)
-- {
-- int isrc, idst;
-- char *ss = samples[i], *se = samples[i];
-- while ( *se && !isspace(*se) ) se++;
-- if ( !*se )
-- {
-- // only one sample name
-- isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss);
-- if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss);
-- idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss);
-- args->sample_map[idst] = isrc;
-- if ( idst!=isrc ) need_sample_map = 1;
-- continue;
-- }
-- *se = 0;
-- isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss);
-- if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss);
--
-- ss = se+1;
-- while ( isspace(*ss) ) ss++;
-- se = ss;
-- while ( *se && !isspace(*se) ) se++;
--
-- idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss);
--
-- args->sample_map[idst] = isrc;
-- if ( idst!=isrc ) need_sample_map = 1;
-+ isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE, src_name);
-+ if ( isrc==-1 ) error("Sample \"%s\" not found in the annotation file\n", src_name);
- }
-+ if ( isrc!=idst ) need_sample_map = 1;
-+ args->sample_map[idst] = isrc;
- }
-- for (i=0; i<args->nsmpl_annot; i++) free(samples[i]);
-- free(samples);
-+ smpl_ilist_destroy(ilist);
- return need_sample_map;
- }
- static char *columns_complement(char *columns, void **skip_info, void **skip_fmt)
-@@ -1605,9 +1920,9 @@
- kputsn(ss, se-ss, &str);
- if ( !str.s[0] || !strcasecmp("-",str.s) ) ;
- else if ( !strcasecmp("CHROM",str.s) ) args->chr_idx = icol;
-- else if ( !strcasecmp("POS",str.s) ) args->from_idx = icol;
-- else if ( !strcasecmp("FROM",str.s) ) args->from_idx = icol;
-- else if ( !strcasecmp("TO",str.s) ) args->to_idx = icol;
-+ else if ( !strcasecmp("POS",str.s) ) args->beg_idx = icol;
-+ else if ( !strcasecmp("FROM",str.s) || !strcasecmp("BEG",str.s) ) args->beg_idx = icol;
-+ else if ( !strcasecmp("TO",str.s) || !strcasecmp("END",str.s) ) args->end_idx = icol;
- else if ( !strcasecmp("REF",str.s) )
- {
- if ( args->tgts_is_vcf )
-@@ -1667,7 +1982,8 @@
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
- }
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- }
- else if ( !strcasecmp("QUAL",str.s) )
-@@ -1698,7 +2014,8 @@
- tmp.l = 0;
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
- args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols);
- annot_col_t *col = &args->cols[args->ncols-1];
-@@ -1732,7 +2049,8 @@
- tmp.l = 0;
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
- args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols);
- annot_col_t *col = &args->cols[args->ncols-1];
-@@ -1774,7 +2092,8 @@
- tmp.l = 0;
- bcf_hrec_format_rename(hrec, key_dst, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst);
- if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_FMT,hdr_id) )
-@@ -1811,13 +2130,30 @@
- {
- if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n");
- if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n");
-- char *key_dst = !strncasecmp("INFO/",str.s,5) ? str.s + 5 : str.s;
-+ int explicit_info = 0;
-+ char *key_dst;
-+ if ( !strncasecmp("INFO/",str.s,5) )
-+ {
-+ key_dst = str.s + 5;
-+ explicit_info = 1;
-+ }
-+ else
-+ key_dst = str.s;
- char *key_src = strstr(key_dst,":=");
- if ( key_src )
- {
- *key_src = 0;
- key_src += 2;
-- if ( !strncasecmp("INFO/",key_src,5) ) key_src += 5;
-+ if ( !strncasecmp("INFO/",key_src,5) )
-+ {
-+ key_src += 5;
-+ explicit_info = 1;
-+ }
-+ else if ( !strncasecmp("FMT/",key_src,4) || !strncasecmp("FORMAT/",key_src,5) )
-+ {
-+ key_src[-2] = ':';
-+ error("Did you mean \"FMT/%s\" rather than \"%s\"?\n",str.s,str.s);
-+ }
- }
- else
- key_src = key_dst;
-@@ -1827,11 +2163,18 @@
- if ( args->tgts_is_vcf ) // reading annotations from a VCF, add a new header line
- {
- bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_INFO, "ID", key_src, NULL);
-- if ( !hrec ) error("The tag \"%s\" is not defined in %s\n", str.s,args->files->readers[1].fname);
-+ if ( !hrec )
-+ {
-+ if ( !explicit_info && bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_FMT, "ID", key_src, NULL) )
-+ error("Did you mean \"FMT/%s\" rather than \"%s\"?\n",str.s,str.s);
-+ fprintf(stderr,"[%s] %d\n",key_src,explicit_info);
-+ error("The tag \"%s\" is not defined in %s\n", key_src,args->files->readers[1].fname);
-+ }
- tmp.l = 0;
- bcf_hrec_format_rename(hrec, key_dst, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst);
- }
- else
-@@ -1860,7 +2203,6 @@
- }
- free(str.s);
- free(tmp.s);
-- if ( args->to_idx==-1 ) args->to_idx = args->from_idx;
- free(args->columns);
- if ( skip_info ) khash_str2int_destroy_free(skip_info);
- if ( skip_fmt ) khash_str2int_destroy_free(skip_fmt);
-@@ -1879,6 +2221,54 @@
- else if ( sample_map_ok<0 )
- error("No matching samples in source and destination file?\n");
- }
-+static void init_merge_method(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->ncols; i++)
-+ {
-+ args->cols[i].merge_method = MM_FIRST;
-+ args->cols[i].mm_str_hash = NULL;
-+ args->cols[i].mm_dbl = NULL;
-+ args->cols[i].mm_dbl_nalloc = args->cols[i].mm_dbl_nused = args->cols[i].mm_dbl_ndat = 0;
-+ memset(&args->cols[i].mm_kstr, 0, sizeof(args->cols[i].mm_kstr));
-+ }
-+ if ( !args->merge_method_str ) return;
-+ if ( args->tgts_is_vcf ) error("Error: the --merge-logic is intended for use with BED or TAB-delimited files only.\n");
-+ if ( !args->tgt_idx ) error("Error: BEG,END (or FROM,TO) columns are expected with the --merge-logic option.\n");
-+ char *sb = args->merge_method_str;
-+ while ( *sb )
-+ {
-+ char *se = sb;
-+ while ( *se && *se!=',' ) se++;
-+ args->tmpks.l = 0;
-+ kputsn(sb, se-sb, &args->tmpks);
-+ kputc(0, &args->tmpks);
-+ char *mm_type_str = args->tmpks.s + args->tmpks.l;
-+ while ( *mm_type_str!=':' && mm_type_str > args->tmpks.s ) mm_type_str--;
-+ if ( *mm_type_str!=':' )
-+ error("Error: could not parse the argument to --merge-logic: %s\n", args->merge_method_str);
-+ *mm_type_str = 0;
-+ mm_type_str++;
-+ int mm_type = MM_FIRST;
-+ if ( !strcasecmp("unique",mm_type_str) ) mm_type = MM_UNIQUE;
-+ else if ( !strcasecmp("append",mm_type_str) ) mm_type = MM_APPEND;
-+ else if ( !strcasecmp("sum",mm_type_str) ) mm_type = MM_SUM;
-+ else if ( !strcasecmp("avg",mm_type_str) ) mm_type = MM_AVG;
-+ else if ( !strcasecmp("min",mm_type_str) ) mm_type = MM_MIN;
-+ else if ( !strcasecmp("max",mm_type_str) ) mm_type = MM_MAX;
-+ else error("Error: could not parse --merge-logic %s, the logic \"%s\" is not recognised\n", args->merge_method_str,mm_type_str);
-+ for (i=0; i<args->ncols; i++)
-+ {
-+ if ( strcmp(args->cols[i].hdr_key_dst,args->tmpks.s) ) continue;
-+ if ( mm_type==MM_APPEND && args->cols[i].number!=BCF_VL_VAR )
-+ error("Error: --merge-logic append can be requested only for tags of variable length (Number=.)\n");
-+ args->cols[i].merge_method = mm_type;
-+ break;
-+ }
-+ if ( i==args->ncols ) error("No such tag in the destination file: %s\n", args->tmpks.s);
-+ sb = *se ? se + 1 : se;
-+ }
-+}
-
- static void rename_chrs(args_t *args, char *fname)
- {
-@@ -1927,13 +2317,30 @@
- {
- if ( !args->columns ) error("The -c option not given\n");
- if ( args->chr_idx==-1 ) error("The -c CHROM option not given\n");
-- if ( args->from_idx==-1 ) error("The -c POS option not given\n");
-- if ( args->to_idx==-1 ) args->to_idx = -args->from_idx - 1;
--
-- args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->from_idx,args->to_idx);
-- if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname);
-- if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname);
-+ if ( args->beg_idx==-1 ) error("The -c POS option not given\n");
-+ if ( args->single_overlaps && args->merge_method_str ) error("The options --merge-logic and --single-overlaps cannot be combined\n");
-+ if ( args->end_idx==-1 || (args->single_overlaps && !args->merge_method_str) )
-+ {
-+ args->end_idx = -args->beg_idx - 1;
-+ args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->beg_idx,args->end_idx);
-+ if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname);
-+ if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname);
-+ }
-+ else
-+ {
-+ if ( args->ref_idx!=-1 ) error("Error: the REF columns will be ignored when BEG,END (or FROM,TO) is present. Replace END (or TO) with \"-\".\n");
-+ int len = strlen(args->targets_fname);
-+ if ( len>=7 && !strcasecmp(".bed.gz",args->targets_fname+len-7) ) args->tgt_is_bed = 1;
-+ else if ( len>=8 && !strcasecmp(".bed.bgz",args->targets_fname+len-8) ) args->tgt_is_bed = 1;
-+ else if ( len>=4 && !strcasecmp(".bed",args->targets_fname+len-4) ) args->tgt_is_bed = 1;
-+ args->tgt_idx = regidx_init(args->targets_fname,parse_with_payload,free_payload,sizeof(char*),args);
-+ if ( !args->tgt_idx ) error("Failed to parse: %s\n", args->targets_fname);
-+ args->tgt_itr = regitr_init(args->tgt_idx);
-+ args->nalines++;
-+ hts_expand0(annot_line_t,args->nalines,args->malines,args->alines);
-+ }
- }
-+ init_merge_method(args);
- args->vcmp = vcmp_init();
-
- if ( args->filter_str )
-@@ -1958,10 +2365,10 @@
- if ( args->rename_chrs ) rename_chrs(args, args->rename_chrs);
-
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( args->out_fh == NULL ) error("[%s] Error: cannot write to \"%s\": %s\n", __func__,args->output_fname, strerror(errno));
- if ( args->n_threads )
- hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p);
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: failed to write the header to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -1976,6 +2383,9 @@
- {
- free(args->cols[i].hdr_key_src);
- free(args->cols[i].hdr_key_dst);
-+ free(args->cols[i].mm_kstr.s);
-+ if ( args->cols[i].mm_str_hash ) khash_str2int_destroy_free(args->cols[i].mm_str_hash);
-+ free(args->cols[i].mm_dbl);
- }
- free(args->cols);
- for (i=0; i<args->malines; i++)
-@@ -1985,6 +2395,11 @@
- free(args->alines[i].line.s);
- }
- free(args->alines);
-+ if ( args->tgt_idx )
-+ {
-+ regidx_destroy(args->tgt_idx);
-+ regitr_destroy(args->tgt_itr);
-+ }
- if ( args->tgts ) bcf_sr_regions_destroy(args->tgts);
- free(args->tmpks.s);
- free(args->tmpi);
-@@ -2007,6 +2422,48 @@
- free(args->sample_map);
- }
-
-+static void parse_annot_line(args_t *args, char *str, annot_line_t *tmp)
-+{
-+ tmp->line.l = 0;
-+ kputs(str, &tmp->line);
-+ char *s = tmp->line.s;
-+ tmp->ncols = 1;
-+ hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-+ tmp->cols[0] = s;
-+ while ( *s )
-+ {
-+ if ( *s=='\t' )
-+ {
-+ tmp->ncols++;
-+ hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-+ tmp->cols[tmp->ncols-1] = s+1;
-+ *s = 0;
-+ }
-+ s++;
-+ }
-+ if ( args->ref_idx != -1 )
-+ {
-+ if ( args->ref_idx >= tmp->ncols )
-+ error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,str);
-+ if ( args->alt_idx >= tmp->ncols )
-+ error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,str);
-+ tmp->nals = 2;
-+ hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-+ tmp->als[0] = tmp->cols[args->ref_idx];
-+ tmp->als[1] = s = tmp->cols[args->alt_idx];
-+ while ( *s )
-+ {
-+ if ( *s==',' )
-+ {
-+ tmp->nals++;
-+ hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-+ tmp->als[tmp->nals-1] = s+1;
-+ *s = 0;
-+ }
-+ s++;
-+ }
-+ }
-+}
- static void buffer_annot_lines(args_t *args, bcf1_t *line, int start_pos, int end_pos)
- {
- if ( args->nalines && args->alines[0].rid != line->rid ) args->nalines = 0;
-@@ -2037,44 +2494,9 @@
- tmp->rid = line->rid;
- tmp->start = args->tgts->start;
- tmp->end = args->tgts->end;
-- tmp->line.l = 0;
-- kputs(args->tgts->line.s, &tmp->line);
-- char *s = tmp->line.s;
-- tmp->ncols = 1;
-- hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-- tmp->cols[0] = s;
-- while ( *s )
-- {
-- if ( *s=='\t' )
-- {
-- tmp->ncols++;
-- hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-- tmp->cols[tmp->ncols-1] = s+1;
-- *s = 0;
-- }
-- s++;
-- }
-+ parse_annot_line(args, args->tgts->line.s, tmp);
- if ( args->ref_idx != -1 )
- {
-- if ( args->ref_idx >= tmp->ncols )
-- error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,args->tgts->line.s);
-- if ( args->alt_idx >= tmp->ncols )
-- error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,args->tgts->line.s);
-- tmp->nals = 2;
-- hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-- tmp->als[0] = tmp->cols[args->ref_idx];
-- tmp->als[1] = s = tmp->cols[args->alt_idx];
-- while ( *s )
-- {
-- if ( *s==',' )
-- {
-- tmp->nals++;
-- hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-- tmp->als[tmp->nals-1] = s+1;
-- *s = 0;
-- }
-- s++;
-- }
- int iseq = args->tgts->iseq;
- if ( bcf_sr_regions_next(args->tgts)<0 || args->tgts->iseq!=iseq ) break;
- }
-@@ -2088,7 +2510,30 @@
- for (i=0; i<args->nrm; i++)
- args->rm[i].handler(args, line, &args->rm[i]);
-
-- if ( args->tgts )
-+ int has_overlap = 0;
-+
-+ if ( args->tgt_idx )
-+ {
-+ if ( regidx_overlap(args->tgt_idx, bcf_seqname(args->hdr,line),line->pos,line->pos+line->rlen-1, args->tgt_itr) )
-+ {
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ annot_line_t *tmp = &args->alines[0];
-+ tmp->rid = line->rid;
-+ tmp->start = args->tgt_itr->beg;
-+ tmp->end = args->tgt_itr->end;
-+ parse_annot_line(args, regitr_payload(args->tgt_itr,char*), tmp);
-+ for (j=0; j<args->ncols; j++)
-+ if ( args->cols[j].setter(args,line,&args->cols[j],tmp) )
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-+ }
-+ has_overlap = 1;
-+ }
-+ for (j=0; j<args->ncols; j++)
-+ if ( args->cols[j].merge_method != MM_FIRST )
-+ args->cols[j].setter(args,line,&args->cols[j],NULL);
-+ }
-+ else if ( args->tgts )
- {
- // Buffer annotation lines. When multiple ALT alleles are present in the
- // annotation file, at least one must match one of the VCF alleles.
-@@ -2119,18 +2564,9 @@
- // there is a matching line
- for (j=0; j<args->ncols; j++)
- if ( args->cols[j].setter(args,line,&args->cols[j],&args->alines[i]) )
-- error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
--
-- }
--
-- if ( args->mark_sites )
-- {
-- // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87
-- if ( args->mark_sites_logic==MARK_LISTED )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,i<args->nalines?1:0);
-- else
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,i<args->nalines?0:1);
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- }
-+ has_overlap = i<args->nalines ? 1 : 0;
- }
- else if ( args->files->nreaders == 2 )
- {
-@@ -2139,13 +2575,10 @@
- bcf1_t *aline = bcf_sr_get_line(args->files,1);
- for (j=0; j<args->ncols; j++)
- if ( args->cols[j].setter(args,line,&args->cols[j],aline) )
-- error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
-- if ( args->mark_sites )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,args->mark_sites_logic==MARK_LISTED ? 1 : 0);
-+ has_overlap = 1;
- }
-- else if ( args->mark_sites )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL, args->mark_sites_logic==MARK_UNLISTED ? 1 : 0);
- }
- if ( args->set_ids )
- {
-@@ -2160,6 +2593,15 @@
- bcf_update_id(args->hdr_out,line,args->tmpks.s);
- }
- }
-+
-+ if ( args->mark_sites )
-+ {
-+ // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87
-+ if ( args->mark_sites_logic==MARK_LISTED )
-+ bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,has_overlap?1:0);
-+ else
-+ bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,has_overlap?0:1);
-+ }
- }
-
- static void usage(args_t *args)
-@@ -2173,10 +2615,12 @@
- fprintf(stderr, " --collapse <string> matching records by <snps|indels|both|all|some|none>, see man page for details [some]\n");
- fprintf(stderr, " -c, --columns <list> list of columns in the annotation file, e.g. CHROM,POS,REF,ALT,-,INFO/TAG. See man page for details\n");
- fprintf(stderr, " -e, --exclude <expr> exclude sites for which the expression is true (see man page for details)\n");
-+ fprintf(stderr, " --force continue despite parsing error (at your own risk!)\n");
- fprintf(stderr, " -h, --header-lines <file> lines which should be appended to the VCF header\n");
- fprintf(stderr, " -I, --set-id [+]<format> set ID column, see man page for details\n");
- fprintf(stderr, " -i, --include <expr> select sites for which the expression is true (see man page for details)\n");
- fprintf(stderr, " -k, --keep-sites leave -i/-e sites unchanged instead of discarding them\n");
-+ fprintf(stderr, " -l, --merge-logic <tag:type> merge logic for multiple overlapping regions (see man page for details), EXPERIMENTAL\n");
- fprintf(stderr, " -m, --mark-sites [+-]<tag> add INFO/tag flag to sites which are (\"+\") or are not (\"-\") listed in the -a file\n");
- fprintf(stderr, " --no-version do not append version and command line to the header\n");
- fprintf(stderr, " -o, --output <file> write output to a file [standard output]\n");
-@@ -2186,6 +2630,7 @@
- fprintf(stderr, " --rename-chrs <file> rename sequences according to map file: from\\tto\n");
- fprintf(stderr, " -s, --samples [^]<list> comma separated list of samples to annotate (or exclude with \"^\" prefix)\n");
- fprintf(stderr, " -S, --samples-file [^]<file> file of samples to annotate (or exclude with \"^\" prefix)\n");
-+ fprintf(stderr, " --single-overlaps keep memory low by avoiding complexities arising from handling multiple overlapping intervals\n");
- fprintf(stderr, " -x, --remove <list> list of annotations (e.g. ID,INFO/DP,FORMAT/DP,FILTER) to remove (or keep with \"^\" prefix). See man page for details\n");
- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
- fprintf(stderr, "\n");
-@@ -2202,19 +2647,20 @@
- args->output_type = FT_VCF;
- args->n_threads = 0;
- args->record_cmd_line = 1;
-- args->ref_idx = args->alt_idx = args->chr_idx = args->from_idx = args->to_idx = -1;
-+ args->ref_idx = args->alt_idx = args->chr_idx = args->beg_idx = args->end_idx = -1;
- args->set_ids_replace = 1;
- int regions_is_file = 0, collapse = 0;
-
- static struct option loptions[] =
- {
-- {"keep-sites",required_argument,NULL,'k'},
-+ {"keep-sites",no_argument,NULL,'k'},
- {"mark-sites",required_argument,NULL,'m'},
- {"set-id",required_argument,NULL,'I'},
- {"output",required_argument,NULL,'o'},
- {"output-type",required_argument,NULL,'O'},
- {"threads",required_argument,NULL,9},
- {"annotations",required_argument,NULL,'a'},
-+ {"merge-logic",required_argument,NULL,'l'},
- {"collapse",required_argument,NULL,2},
- {"include",required_argument,NULL,'i'},
- {"exclude",required_argument,NULL,'e'},
-@@ -2226,12 +2672,15 @@
- {"header-lines",required_argument,NULL,'h'},
- {"samples",required_argument,NULL,'s'},
- {"samples-file",required_argument,NULL,'S'},
-+ {"single-overlaps",no_argument,NULL,10},
- {"no-version",no_argument,NULL,8},
-+ {"force",no_argument,NULL,'f'},
- {NULL,0,NULL,0}
- };
-- while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:k",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:kl:f",loptions,NULL)) >= 0)
- {
- switch (c) {
-+ case 'f': args->force = 1; break;
- case 'k': args->keep_sites = 1; break;
- case 'm':
- args->mark_sites_logic = MARK_LISTED;
-@@ -2239,6 +2688,7 @@
- else if ( optarg[0]=='-' ) { args->mark_sites = optarg+1; args->mark_sites_logic = MARK_UNLISTED; }
- else args->mark_sites = optarg;
- break;
-+ case 'l': args->merge_method_str = optarg; break;
- case 'I': args->set_ids_fmt = optarg; break;
- case 's': args->sample_names = optarg; break;
- case 'S': args->sample_names = optarg; args->sample_is_file = 1; break;
-@@ -2273,6 +2723,7 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 10 : args->single_overlaps = 1; break;
- case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
-@@ -2294,6 +2745,7 @@
- if ( args->targets_fname )
- {
- htsFile *fp = hts_open(args->targets_fname,"r");
-+ if ( !fp ) error("Failed to open %s\n", args->targets_fname);
- htsFormat type = *hts_get_format(fp);
- hts_close(fp);
-
-@@ -2305,26 +2757,40 @@
- }
- }
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
-+ static int line_errcode_warned = 0;
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
- {
- if ( !bcf_sr_has_line(args->files,0) ) continue;
- bcf1_t *line = bcf_sr_get_line(args->files,0);
-- if ( line->errcode ) error("Encountered error, cannot proceed. Please check the error output above.\n");
-+ if ( line->errcode )
-+ {
-+ if ( !args->force )
-+ error("Encountered an error, cannot proceed. Please check the error output above.\n"
-+ "If feeling adventurous, use the --force option. (At your own risk!)\n");
-+ else if ( !line_errcode_warned )
-+ {
-+ fprintf(stderr,
-+ "Warning: Encountered an error, proceeding only because --force was given.\n"
-+ " Note that this can result in a segfault or a silent corruption of the output file!\n");
-+ line_errcode_warned = 1;
-+ line->errcode = 0;
-+ }
-+ }
- if ( args->filter )
- {
- int pass = filter_test(args->filter, line, NULL);
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass )
- {
-- if ( args->keep_sites ) bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( args->keep_sites && bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
- continue;
- }
- }
- annotate(args, line);
-- bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
- }
- destroy_data(args);
- bcf_sr_destroy(args->files);
---- python-pysam.orig/bcftools/vcfannotate.c.pysam.c
-+++ python-pysam/bcftools/vcfannotate.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* vcfannotate.c -- Annotate and edit VCF/BCF files.
-
-- Copyright (C) 2013-2018 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -35,16 +35,17 @@
- #include <sys/types.h>
- #include <dirent.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kseq.h>
- #include <htslib/khash_str2int.h>
--#include <dlfcn.h>
- #include "bcftools.h"
- #include "vcmp.h"
- #include "filter.h"
- #include "convert.h"
- #include "smpl_ilist.h"
-+#include "regidx.h"
-
- struct _args_t;
-
-@@ -67,15 +68,30 @@
- }
- annot_line_t;
-
--#define REPLACE_MISSING 0 // replace only missing values
--#define REPLACE_ALL 1 // replace both missing and existing values
--#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing
--#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise
-+#define REPLACE_MISSING 0 // replace only missing values
-+#define REPLACE_ALL 1 // replace both missing and existing values
-+#define REPLACE_NON_MISSING 2 // replace only if tgt is not missing
-+#define SET_OR_APPEND 3 // set new value if missing or non-existent, append otherwise
-+#define MM_FIRST 0 // if multiple annotation lines overlap a VCF record, use the first, discarding the rest
-+#define MM_APPEND 1 // append, possibly multiple times
-+#define MM_UNIQUE 2 // append, only unique values
-+#define MM_SUM 3
-+#define MM_AVG 4
-+#define MM_MIN 5
-+#define MM_MAX 6
- typedef struct _annot_col_t
- {
- int icol, replace, number; // number: one of BCF_VL_* types
- char *hdr_key_src, *hdr_key_dst;
- int (*setter)(struct _args_t *, bcf1_t *, struct _annot_col_t *, void*);
-+ int merge_method; // one of the MM_* defines
-+ khash_t(str2int) *mm_str_hash; // lookup table to ensure uniqueness of added string values
-+ kstring_t mm_kstr;
-+ double
-+ mm_dbl_nalloc, // the allocated size --merge-logic values array
-+ mm_dbl_nused, // the number of used elements in the mm_dbl array
-+ mm_dbl_ndat, // the number of merged rows (for calculating the average)
-+ *mm_dbl;
- }
- annot_col_t;
-
-@@ -94,6 +110,10 @@
- int output_type, n_threads;
- bcf_sr_regions_t *tgts;
-
-+ regidx_t *tgt_idx;
-+ regitr_t *tgt_itr;
-+ int tgt_is_bed;
-+
- filter_t *filter;
- char *filter_str;
- int filter_logic; // include or exclude sites which match the filters? One of FLT_INCLUDE/FLT_EXCLUDE
-@@ -106,7 +126,7 @@
- vcmp_t *vcmp; // for matching annotation and VCF lines by allele
- annot_line_t *alines; // buffered annotation lines
- int nalines, malines;
-- int ref_idx, alt_idx, chr_idx, from_idx, to_idx; // -1 if not present
-+ int ref_idx, alt_idx, chr_idx, beg_idx, end_idx; // -1 if not present
- annot_col_t *cols; // column indexes and setters
- int ncols;
-
-@@ -127,18 +147,40 @@
-
- char **argv, *output_fname, *targets_fname, *regions_list, *header_fname;
- char *remove_annots, *columns, *rename_chrs, *sample_names, *mark_sites;
-- int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic;
-+ char *merge_method_str;
-+ int argc, drop_header, record_cmd_line, tgts_is_vcf, mark_sites_logic, force, single_overlaps;
- }
- args_t;
-
- char *msprintf(const char *fmt, ...);
-
-+int parse_with_payload(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr)
-+{
-+ args_t *args = (args_t*) usr;
-+ int ret = args->tgt_is_bed ? regidx_parse_bed(line, chr_beg, chr_end, beg, end, NULL, NULL) : regidx_parse_tab(line, chr_beg, chr_end, beg, end, NULL, NULL);
-+ if ( ret<0 ) return ret;
-+ *((char **)payload) = strdup(line);
-+ return 0;
-+}
-+void free_payload(void *payload)
-+{
-+ char *str = *((char**)payload);
-+ free(str);
-+}
-+
- void remove_id(args_t *args, bcf1_t *line, rm_tag_t *tag)
- {
- bcf_update_id(args->hdr,line,NULL);
- }
- void remove_filter(args_t *args, bcf1_t *line, rm_tag_t *tag)
- {
-+ if ( tag->key && tag->hdr_id<0 )
-+ {
-+ error("Error: Cannot proceed, not even with the --force option, bad things could happen.\n"
-+ " Note that \"bcftools annotate -x FILTER\" can be used to remove ALL filters.\n"
-+ " Even better, use \"bcftools view -h\" and \"bcftools reheader\" to fix the header!\n"
-+ );
-+ }
- if ( !tag->key ) bcf_update_filter(args->hdr, line, NULL, args->flt_keep_pass);
- else bcf_remove_filter(args->hdr, line, tag->hdr_id, args->flt_keep_pass);
- }
-@@ -225,7 +267,10 @@
- memmove(&hdr->hrec[i],&hdr->hrec[i+1],(hdr->nhrec-i)*sizeof(bcf_hrec_t*));
- bcf_hrec_destroy(hrec);
- }
-- if ( nrm ) bcf_hdr_sync(hdr);
-+ if ( nrm ) {
-+ if (bcf_hdr_sync(hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-+ }
- }
-
- static void init_remove_annots(args_t *args)
-@@ -266,8 +311,14 @@
- tag->handler = remove_filter;
- tag->key = strdup(str.s);
- tag->hdr_id = bcf_hdr_id2int(args->hdr, BCF_DT_ID, tag->key);
-- if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) ) error("Cannot remove %s, not defined in the header.\n", str.s);
-- if ( !args->keep_sites ) bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key);
-+ if ( !bcf_hdr_idinfo_exists(args->hdr,BCF_HL_FLT,tag->hdr_id) )
-+ {
-+ if ( args->keep_sites )
-+ error("Error: The filter \"%s\" is not defined in the header, cannot use the -k option\n", str.s);
-+ else
-+ fprintf(bcftools_stderr,"Warning: The filter \"%s\" is not defined in the header\n", str.s);
-+ }
-+ else if ( !args->keep_sites ) bcf_hdr_remove(args->hdr_out,BCF_HL_FLT,tag->key);
- }
- else
- {
-@@ -282,8 +333,14 @@
- int id = bcf_hdr_id2int(args->hdr,BCF_DT_ID,str.s);
- if ( !bcf_hdr_idinfo_exists(args->hdr,type,id) )
- {
-- fprintf(bcftools_stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s);
-- args->nrm--;
-+ if ( args->keep_sites )
-+ error("Error: The tag \"%s\" is not defined in the header, cannot use the -k option\n", str.s);
-+ else
-+ fprintf(bcftools_stderr,"Warning: The tag \"%s\" not defined in the header\n", str.s);
-+
-+ tag->key = strdup(str.s);
-+ if ( type==BCF_HL_INFO ) tag->handler = remove_info_tag;
-+ else if ( type==BCF_HL_FMT ) tag->handler = remove_format_tag;
- }
- else if ( (type==BCF_HL_FMT && keep_fmt) || (type==BCF_HL_INFO && keep_info) )
- {
-@@ -366,7 +423,8 @@
- }
- khash_str2int_destroy_free(keep);
- if ( !args->nrm ) error("No matching tag in -x %s\n", args->remove_annots);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- static void init_header_lines(args_t *args)
- {
-@@ -378,13 +436,17 @@
- if ( bcf_hdr_append(args->hdr_out,str.s) ) error("Could not parse %s: %s\n", args->header_fname, str.s);
- bcf_hdr_append(args->hdr,str.s); // the input file may not have the header line if run with -h (and nothing else)
- }
-- hts_close(file);
-+ if ( hts_close(file)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->header_fname);
- free(str.s);
-- bcf_hdr_sync(args->hdr_out);
-- bcf_hdr_sync(args->hdr);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update output header", __func__);
-+ if (bcf_hdr_sync(args->hdr) < 0)
-+ error_errno("[%s] Failed to update input header", __func__);
- }
- static int setter_filter(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FILTER (yet?)\n");
-+
- // note: so far this works only with one filter, not a list of filters
- annot_line_t *tab = (annot_line_t*) data;
- if ( tab->cols[col->icol] && tab->cols[col->icol][0]=='.' && !tab->cols[col->icol][1] ) return 0; // don't replace with "."
-@@ -434,6 +496,8 @@
- }
- static int setter_id(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with ID (yet?)\n");
-+
- // possible cases:
- // IN ANNOT OUT ACHIEVED_BY
- // x y x -c +ID
-@@ -495,6 +559,8 @@
- }
- static int setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with QUAL (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- char *str = tab->cols[col->icol];
- if ( str[0]=='.' && str[1]==0 ) return 0; // empty
-@@ -503,7 +569,7 @@
-
- line->qual = strtod(str, &str);
- if ( str == tab->cols[col->icol] )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
- return 0;
- }
- static int vcf_setter_qual(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
-@@ -516,13 +582,15 @@
- }
- static int setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with INFO type=Flag (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- char *str = tab->cols[col->icol];
- if ( str[0]=='.' && str[1]==0 ) return 0;
-
- if ( str[0]=='1' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,1);
- if ( str[0]=='0' && str[1]==0 ) return bcf_update_info_flag(args->hdr_out,line,col->hdr_key_dst,NULL,0);
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
- return -1;
- }
- static int vcf_setter_info_flag(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
-@@ -535,13 +603,13 @@
- static int setter_ARinfo_int32(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpi)
- {
- if ( col->number==BCF_VL_A && ntmpi!=nals-1 && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && ntmpi!=nals && (ntmpi!=1 || args->tmpi[0]!=bcf_int32_missing || args->tmpi[1]!=bcf_int32_vector_end) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpi,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int ntmpi2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpi2, &args->mtmpi2);
-@@ -567,19 +635,75 @@
- static int setter_info_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- annot_line_t *tab = (annot_line_t*) data;
-- char *str = tab->cols[col->icol], *end = str;
-- if ( str[0]=='.' && str[1]==0 ) return 0;
-
-- int ntmpi = 0;
-- while ( *end )
-+ if ( !tab )
-+ {
-+ if ( col->merge_method!=MM_SUM && col->merge_method!=MM_AVG && col->merge_method!=MM_MIN && col->merge_method!=MM_MAX && col->merge_method!=MM_APPEND )
-+ error("Error: at the moment only the sum,avg,min,max,append options are supported with --merge-logic for INFO type=Integer\n");
-+ }
-+
-+ int i,ntmpi = 0;
-+ if ( tab )
-+ {
-+ char *str = tab->cols[col->icol], *end = str;
-+ if ( str[0]=='.' && str[1]==0 ) return 0;
-+
-+ while ( *end )
-+ {
-+ int val = strtol(str, &end, 10);
-+ if ( end==str )
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-+ ntmpi++;
-+ hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-+ args->tmpi[ntmpi-1] = val;
-+ str = end+1;
-+ }
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( !col->mm_dbl_nused )
-+ {
-+ col->mm_dbl_nused = ntmpi;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpi; i++)
-+ col->mm_dbl[i] = args->tmpi[i];
-+ }
-+ else
-+ {
-+ if ( col->merge_method==MM_APPEND )
-+ {
-+ int nori = col->mm_dbl_nused;
-+ col->mm_dbl_nused += ntmpi;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpi; i++)
-+ col->mm_dbl[i+nori] = args->tmpi[i];
-+ }
-+ else
-+ {
-+ if ( ntmpi!=col->mm_dbl_nused ) error("Error: cannot merge fields of unequal length\n");
-+ if ( col->merge_method==MM_SUM || col->merge_method==MM_AVG )
-+ for (i=0; i<ntmpi; i++) col->mm_dbl[i] += args->tmpi[i];
-+ else if ( col->merge_method==MM_MIN )
-+ for (i=0; i<ntmpi; i++) { if ( col->mm_dbl[i] > args->tmpi[i] ) col->mm_dbl[i] = args->tmpi[i]; }
-+ else if ( col->merge_method==MM_MAX )
-+ for (i=0; i<ntmpi; i++) { if ( col->mm_dbl[i] < args->tmpi[i] ) col->mm_dbl[i] = args->tmpi[i]; }
-+ }
-+ }
-+ col->mm_dbl_ndat++;
-+ }
-+ }
-+ else if ( col->merge_method==MM_SUM || col->merge_method==MM_MIN || col->merge_method==MM_MAX || col->merge_method==MM_APPEND )
-+ {
-+ ntmpi = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-+ for (i=0; i<ntmpi; i++) args->tmpi[i] = col->mm_dbl[i];
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
-+ }
-+ else if ( col->merge_method==MM_AVG )
- {
-- int val = strtol(str, &end, 10);
-- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-- ntmpi++;
-+ ntmpi = col->mm_dbl_nused;
- hts_expand(int32_t,ntmpi,args->mtmpi,args->tmpi);
-- args->tmpi[ntmpi-1] = val;
-- str = end+1;
-+ for (i=0; i<ntmpi; i++) args->tmpi[i] = col->mm_dbl[i]/col->mm_dbl_ndat;
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
- }
-
- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-@@ -615,13 +739,13 @@
- static int setter_ARinfo_real(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als, int ntmpf)
- {
- if ( col->number==BCF_VL_A && ntmpf!=nals-1 && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && ntmpf!=nals && (ntmpf!=1 || !bcf_float_is_missing(args->tmpf[0]) || !bcf_float_is_vector_end(args->tmpf[0])) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", ntmpf,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int ntmpf2 = bcf_get_info_float(args->hdr, line, col->hdr_key_dst, &args->tmpf2, &args->mtmpf2);
-@@ -647,19 +771,75 @@
- static int setter_info_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- annot_line_t *tab = (annot_line_t*) data;
-- char *str = tab->cols[col->icol], *end = str;
-- if ( str[0]=='.' && str[1]==0 ) return 0;
-
-- int ntmpf = 0;
-- while ( *end )
-+ if ( !tab )
- {
-- double val = strtod(str, &end);
-- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-- ntmpf++;
-- hts_expand(float,ntmpf,args->mtmpf,args->tmpf);
-- args->tmpf[ntmpf-1] = val;
-- str = end+1;
-+ if ( col->merge_method!=MM_SUM && col->merge_method!=MM_AVG && col->merge_method!=MM_MIN && col->merge_method!=MM_MAX && col->merge_method!=MM_APPEND )
-+ error("Error: at the moment only the sum,avg,min,max,append options are supported with --merge-logic for INFO type=Float\n");
-+ }
-+
-+ int i,ntmpf = 0;
-+ if ( tab )
-+ {
-+ char *str = tab->cols[col->icol], *end = str;
-+ if ( str[0]=='.' && str[1]==0 ) return 0;
-+
-+ while ( *end )
-+ {
-+ double val = strtod(str, &end);
-+ if ( end==str )
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-+ ntmpf++;
-+ hts_expand(float,ntmpf,args->mtmpf,args->tmpf);
-+ args->tmpf[ntmpf-1] = val;
-+ str = end+1;
-+ }
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( !col->mm_dbl_nused )
-+ {
-+ col->mm_dbl_nused = ntmpf;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpf; i++)
-+ col->mm_dbl[i] = args->tmpf[i];
-+ }
-+ else
-+ {
-+ if ( col->merge_method==MM_APPEND )
-+ {
-+ int nori = col->mm_dbl_nused;
-+ col->mm_dbl_nused += ntmpf;
-+ hts_expand(double,col->mm_dbl_nused,col->mm_dbl_nalloc,col->mm_dbl);
-+ for (i=0; i<ntmpf; i++)
-+ col->mm_dbl[i+nori] = args->tmpf[i];
-+ }
-+ else
-+ {
-+ if ( ntmpf!=col->mm_dbl_nused ) error("Error: cannot merge fields of unequal length\n");
-+ if ( col->merge_method==MM_SUM || col->merge_method==MM_AVG )
-+ for (i=0; i<ntmpf; i++) col->mm_dbl[i] += args->tmpf[i];
-+ else if ( col->merge_method==MM_MIN )
-+ for (i=0; i<ntmpf; i++) { if ( col->mm_dbl[i] > args->tmpf[i] ) col->mm_dbl[i] = args->tmpf[i]; }
-+ else if ( col->merge_method==MM_MAX )
-+ for (i=0; i<ntmpf; i++) { if ( col->mm_dbl[i] < args->tmpf[i] ) col->mm_dbl[i] = args->tmpf[i]; }
-+ }
-+ }
-+ col->mm_dbl_ndat++;
-+ }
-+ }
-+ else if ( col->merge_method==MM_SUM || col->merge_method==MM_MIN || col->merge_method==MM_MAX || col->merge_method==MM_APPEND )
-+ {
-+ ntmpf = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpf,args->mtmpf,args->tmpf);
-+ for (i=0; i<ntmpf; i++) args->tmpf[i] = col->mm_dbl[i];
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
-+ }
-+ else if ( col->merge_method==MM_AVG )
-+ {
-+ ntmpf = col->mm_dbl_nused;
-+ hts_expand(int32_t,ntmpf,args->mtmpf,args->tmpf);
-+ for (i=0; i<ntmpf; i++) args->tmpf[i] = col->mm_dbl[i]/col->mm_dbl_ndat;
-+ col->mm_dbl_nused = col->mm_dbl_ndat = 0;
- }
-
- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-@@ -695,6 +875,8 @@
- int copy_string_field(char *src, int isrc, int src_len, kstring_t *dst, int idst); // see vcfmerge.c
- static int setter_ARinfo_string(args_t *args, bcf1_t *line, annot_col_t *col, int nals, char **als)
- {
-+ assert( col->merge_method==MM_FIRST );
-+
- int nsrc = 1, lsrc = 0;
- while ( args->tmps[lsrc] )
- {
-@@ -702,13 +884,13 @@
- lsrc++;
- }
- if ( col->number==BCF_VL_A && nsrc!=nals-1 && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( col->number==BCF_VL_R && nsrc!=nals && (nsrc!=1 || args->tmps[0]!='.' || args->tmps[1]!=0 ) )
-- error("Incorrect number of values (%d) for the %s tag at %s:%d\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values (%d) for the %s tag at %s:%"PRId64"\n", nsrc,col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst = col->number==BCF_VL_A ? line->n_allele - 1 : line->n_allele;
- int *map = vcmp_map_ARvalues(args->vcmp,ndst,nals,als,line->n_allele,line->d.allele);
-- if ( !map ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- // fill in any missing values in the target VCF (or all, if not present)
- int i, empty = 0, nstr, mstr = args->tmpks.m;
-@@ -748,22 +930,76 @@
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s);
- return 0;
- }
-+void khash_str2int_clear_free(void *_hash)
-+{
-+ khash_t(str2int) *hash = (khash_t(str2int)*)_hash;
-+ khint_t k;
-+ if (hash == 0) return;
-+ for (k = 0; k < kh_end(hash); ++k)
-+ if (kh_exist(hash, k)) free((char*)kh_key(hash, k));
-+ kh_clear(str2int, hash);
-+}
- static int setter_info_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( col->replace==REPLACE_MISSING && col->number!=BCF_VL_A && col->number!=BCF_VL_R )
-+ {
-+ int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2);
-+ if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0;
-+ }
-+
- annot_line_t *tab = (annot_line_t*) data;
-- int len = strlen(tab->cols[col->icol]);
-- if ( !len ) return 0;
-- hts_expand(char,len+1,args->mtmps,args->tmps);
-- memcpy(args->tmps,tab->cols[col->icol],len+1);
-- if ( args->tmps[0]=='.' && args->tmps[1]==0 ) return 0;
-+
-+ int len = 0;
-+ if ( tab )
-+ {
-+ len = strlen(tab->cols[col->icol]);
-+ if ( !len ) return 0;
-+ if ( len==1 && tab->cols[col->icol][0]=='.' ) return 0;
-+ }
-
-- if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-- return setter_ARinfo_string(args,line,col,tab->nals,tab->als);
-+ if ( col->merge_method!=MM_FIRST )
-+ {
-+ if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-+ error("Error: the --merge-logic option cannot be used with INFO tags Type=String,Number={A,R,G}\n");
-
-- if ( col->replace==REPLACE_MISSING )
-+ if ( data )
-+ {
-+ assert( col->merge_method==MM_APPEND || col->merge_method==MM_UNIQUE );
-+ if ( col->merge_method==MM_UNIQUE )
-+ {
-+ if ( !col->mm_str_hash ) col->mm_str_hash = (khash_t(str2int)*)khash_str2int_init();
-+ if ( khash_str2int_has_key(col->mm_str_hash, tab->cols[col->icol]) ) return 0;
-+ khash_str2int_inc(col->mm_str_hash, strdup(tab->cols[col->icol]));
-+ }
-+
-+ if ( col->mm_kstr.l ) kputc(',',&col->mm_kstr);
-+ kputs(tab->cols[col->icol], &col->mm_kstr);
-+ return 0;
-+ }
-+
-+ if ( col->mm_kstr.l )
-+ {
-+ hts_expand(char,col->mm_kstr.l+1,args->mtmps,args->tmps);
-+ memcpy(args->tmps,col->mm_kstr.s,col->mm_kstr.l+1);
-+ }
-+ else
-+ return 0;
-+
-+ if ( !data ) // flush the line
-+ {
-+ if ( col->merge_method==MM_UNIQUE )
-+ khash_str2int_clear_free(col->mm_str_hash);
-+ col->mm_kstr.l = 0;
-+ }
-+ }
-+ else
- {
-- int ret = bcf_get_info_string(args->hdr, line, col->hdr_key_dst, &args->tmps2, &args->mtmps2);
-- if ( ret>0 && (args->tmps2[0]!='.' || args->tmps2[1]!=0) ) return 0;
-+ assert(tab);
-+ hts_expand(char,len+1,args->mtmps,args->tmps);
-+ memcpy(args->tmps,tab->cols[col->icol],len+1);
-+
-+ if ( col->number==BCF_VL_A || col->number==BCF_VL_R )
-+ return setter_ARinfo_string(args,line,col,tab->nals,tab->als);
- }
-
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps);
-@@ -787,6 +1023,48 @@
- bcf_update_info_string(args->hdr_out,line,col->hdr_key_dst,args->tmps);
- return 0;
- }
-+static int genotypes_to_string(args_t *args, int nsrc1, int32_t *src, int nsmpl_dst, kstring_t *str)
-+{
-+ int i, isrc, idst;
-+ int blen = nsrc1 > 1 ? nsrc1 + 1 : 1; // typically the genotypes take three bytes 0/1, no 0-termination is needed
-+
-+gt_length_too_big:
-+ str->l = 0;
-+ for (idst=0; idst<nsmpl_dst; idst++)
-+ {
-+ isrc = args->sample_map ? args->sample_map[idst] : idst;
-+ if ( isrc==-1 )
-+ {
-+ kputc_('.', str);
-+ for (i=1; i < blen; i++) kputc_(0, str);
-+ continue;
-+ }
-+
-+ size_t plen = str->l;
-+ int32_t *ptr = src + isrc*nsrc1;
-+ for (i=0; i<nsrc1 && ptr[i]!=bcf_int32_vector_end; i++)
-+ {
-+ if ( i ) kputc("/|"[bcf_gt_is_phased(ptr[i])], str);
-+ if ( bcf_gt_is_missing(ptr[i]) ) kputc('.', str);
-+ else kputw(bcf_gt_allele(ptr[i]), str);
-+ }
-+ if ( i==0 ) kputc('.', str);
-+ if ( str->l - plen > blen )
-+ {
-+ // too many alternate alleles or ploidy is too large, the genotype does not fit
-+ // three characters ("0/0" vs "10/10").
-+ blen *= 2;
-+ goto gt_length_too_big;
-+ }
-+ plen = str->l - plen;
-+ while ( plen < blen )
-+ {
-+ kputc_(0, str);
-+ plen++;
-+ }
-+ }
-+ return 0;
-+}
- static int vcf_setter_format_gt(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
- bcf1_t *rec = (bcf1_t*) data;
-@@ -794,6 +1072,16 @@
- if ( nsrc==-3 ) return 0; // the tag is not present
- if ( nsrc<=0 ) return 1; // error
-
-+ // Genotypes are internally represented as integers. This is a complication when
-+ // adding as a different Type=String field, such as FMT/newGT:=GT
-+ if ( strcmp(col->hdr_key_src,col->hdr_key_dst) )
-+ {
-+ int nsmpl_dst = bcf_hdr_nsamples(args->hdr_out);
-+ int nsmpl_src = bcf_hdr_nsamples(args->files->readers[1].header);
-+ genotypes_to_string(args,nsrc/nsmpl_src,args->tmpi,nsmpl_dst,&args->tmpks);
-+ return bcf_update_format_char(args->hdr_out,line,col->hdr_key_dst,args->tmpks.s,args->tmpks.l);
-+ }
-+
- if ( !args->sample_map )
- return bcf_update_genotypes(args->hdr_out,line,args->tmpi,nsrc);
-
-@@ -1059,9 +1347,11 @@
- }
- static int setter_format_int(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot);
- hts_expand(int32_t,nvals*args->nsmpl_annot,args->mtmpi,args->tmpi);
-
-@@ -1084,7 +1374,7 @@
- char *end = str;
- ptr[ival] = strtol(str, &end, 10);
- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-
- ival++;
- str = *end ? end+1 : end;
-@@ -1096,9 +1386,11 @@
- }
- static int setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- int nvals = count_vals(tab,col->icol,col->icol+args->nsmpl_annot);
- hts_expand(float,nvals*args->nsmpl_annot,args->mtmpf,args->tmpf);
-
-@@ -1122,7 +1414,7 @@
- char *end = str;
- ptr[ival] = strtod(str, &end);
- if ( end==str )
-- error("Could not parse %s at %s:%d .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1,tab->cols[col->icol]);
-+ error("Could not parse %s at %s:%"PRId64" .. [%s]\n", col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1,tab->cols[col->icol]);
-
- ival++;
- str = *end ? end+1 : end;
-@@ -1134,9 +1426,11 @@
- }
- static int setter_format_str(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
-+ if ( !data ) error("Error: the --merge-logic option cannot be used with FORMAT tags (yet?)\n");
-+
- annot_line_t *tab = (annot_line_t*) data;
- if ( col->icol+args->nsmpl_annot > tab->ncols )
-- error("Incorrect number of values for %s at %s:%d\n",col->hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Incorrect number of values for %s at %s:%"PRId64"\n",col->hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ismpl;
- for (ismpl=0; ismpl<args->nsmpl_annot; ismpl++)
-@@ -1188,7 +1482,7 @@
- // create mapping from src to dst genotypes, haploid and diploid version
- int nmap_hap = col->number==BCF_VL_G || col->number==BCF_VL_R ? rec->n_allele : rec->n_allele - 1;
- int *map_hap = vcmp_map_ARvalues(args->vcmp,nmap_hap,line->n_allele,line->d.allele,rec->n_allele,rec->d.allele);
-- if ( !map_hap ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map_hap ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int i, j;
- if ( rec->n_allele==line->n_allele )
-@@ -1228,15 +1522,15 @@
- }
- int pld_src = determine_ploidy(rec->n_allele, args->tmpi, nsrc1, args->src_smpl_pld, nsmpl_src);
- if ( pld_src<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),rec->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),(int64_t) rec->pos+1);
- int pld_dst = determine_ploidy(line->n_allele, args->tmpi2, ndst1, args->dst_smpl_pld, nsmpl_dst);
- if ( pld_dst<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst1_new = pld_dst==1 ? line->n_allele : line->n_allele*(line->n_allele+1)/2;
- if ( ndst1_new != ndst1 )
- {
-- if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%d\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%"PRId64"\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- ndst1 = ndst1_new;
- hts_expand(int32_t, ndst1*nsmpl_dst, args->mtmpi2, args->tmpi2);
- }
-@@ -1256,7 +1550,7 @@
- if ( col->number==BCF_VL_G )
- {
- if ( args->src_smpl_pld[ii] > 0 && args->dst_smpl_pld[i] > 0 && args->src_smpl_pld[ii]!=args->dst_smpl_pld[i] )
-- error("Sample ploidy differs at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Sample ploidy differs at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- if ( !args->dst_smpl_pld[i] )
- for (j=0; j<ndst1; j++) ptr_dst[j] = bcf_int32_missing;
- }
-@@ -1283,7 +1577,6 @@
- }
- static int vcf_setter_format_real(args_t *args, bcf1_t *line, annot_col_t *col, void *data)
- {
--
- bcf1_t *rec = (bcf1_t*) data;
- int nsrc = bcf_get_format_float(args->files->readers[1].header,rec,col->hdr_key_src,&args->tmpf,&args->mtmpf);
- if ( nsrc==-3 ) return 0; // the tag is not present
-@@ -1296,7 +1589,7 @@
- // create mapping from src to dst genotypes, haploid and diploid version
- int nmap_hap = col->number==BCF_VL_G || col->number==BCF_VL_R ? rec->n_allele : rec->n_allele - 1;
- int *map_hap = vcmp_map_ARvalues(args->vcmp,nmap_hap,line->n_allele,line->d.allele,rec->n_allele,rec->d.allele);
-- if ( !map_hap ) error("REF alleles not compatible at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !map_hap ) error("REF alleles not compatible at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int i, j;
- if ( rec->n_allele==line->n_allele )
-@@ -1336,15 +1629,15 @@
- }
- int pld_src = determine_ploidy(rec->n_allele, args->tmpi, nsrc1, args->src_smpl_pld, nsmpl_src);
- if ( pld_src<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),rec->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_src, rec->n_allele, bcf_seqname(bcf_sr_get_header(args->files,1),rec),(int64_t) rec->pos+1);
- int pld_dst = determine_ploidy(line->n_allele, args->tmpi2, ndst1, args->dst_smpl_pld, nsmpl_dst);
- if ( pld_dst<0 )
-- error("Unexpected number of %s values (%d) for %d alleles at %s:%d\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Unexpected number of %s values (%d) for %d alleles at %s:%"PRId64"\n", col->hdr_key_src,-pld_dst, line->n_allele, bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
- int ndst1_new = pld_dst==1 ? line->n_allele : line->n_allele*(line->n_allele+1)/2;
- if ( ndst1_new != ndst1 )
- {
-- if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%d\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( ndst1 ) error("todo: %s ndst1!=ndst .. %d %d at %s:%"PRId64"\n",col->hdr_key_src,ndst1_new,ndst1,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- ndst1 = ndst1_new;
- hts_expand(float, ndst1*nsmpl_dst, args->mtmpf2, args->tmpf2);
- }
-@@ -1364,7 +1657,7 @@
- if ( col->number==BCF_VL_G )
- {
- if ( args->src_smpl_pld[ii] > 0 && args->dst_smpl_pld[i] > 0 && args->src_smpl_pld[ii]!=args->dst_smpl_pld[i] )
-- error("Sample ploidy differs at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Sample ploidy differs at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- if ( !args->dst_smpl_pld[i] )
- for (j=0; j<ndst1; j++) bcf_float_set_missing(ptr_dst[j]);
- }
-@@ -1409,7 +1702,66 @@
- args->tmps = args->tmpp[0]; // tmps might be realloced
- if ( ret==-3 ) return 0; // the tag is not present
- if ( ret<=0 ) return 1; // error
-- return core_setter_format_str(args,line,col,args->tmpp);
-+ if ( strcmp("GT",col->hdr_key_dst) )
-+ return core_setter_format_str(args,line,col,args->tmpp);
-+
-+ // Genotypes are internally represented as integers. This is a complication for FMT/GT:=oldGT
-+ // First determine the maximum number of alleles per-sample ndst1
-+ int nsmpl_src = bcf_hdr_nsamples(args->files->readers[1].header);
-+ int nsmpl_dst = bcf_hdr_nsamples(args->hdr_out);
-+ int isrc,idst, ndst1 = 0, nsrc1 = ret / nsmpl_src;
-+ char *ptr = args->tmps, *ptr_end = ptr + ret;
-+ while ( ptr < ptr_end )
-+ {
-+ char *smpl_end = ptr + nsrc1;
-+ int n = 1;
-+ while ( ptr < smpl_end )
-+ {
-+ if ( *ptr=='/' || *ptr=='|' ) n++;
-+ ptr++;
-+ }
-+ if ( ndst1 < n ) ndst1 = n;
-+ }
-+ assert( ndst1 );
-+
-+ int ndst = ndst1*nsmpl_dst;
-+ hts_expand(int32_t,ndst,args->mtmpi,args->tmpi);
-+ hts_expand(char,ret+1,args->mtmps,args->tmps); args->tmps[ret] = 0; // the FORMAT string may not be 0-terminated
-+ for (idst=0; idst<nsmpl_dst; idst++)
-+ {
-+ int i = 0, is_phased = 0;
-+ int32_t *dst = args->tmpi + idst*ndst1;
-+ isrc = args->sample_map ? args->sample_map[idst] : idst;
-+ if ( isrc==-1 )
-+ {
-+ dst[0] = bcf_gt_missing;
-+ for (i=1; i<ndst1; i++) dst[i] = bcf_int32_vector_end;
-+ continue;
-+ }
-+ char *beg = args->tmps + isrc*nsrc1, *tmp;
-+ char *keep_ptr = beg+nsrc1, keep = *keep_ptr; *keep_ptr = 0;
-+ while ( *beg )
-+ {
-+ char *end = beg;
-+ while ( *end && *end!='/' && *end!='|' ) end++;
-+ if ( *beg=='.' && end-beg==1 ) dst[i] = bcf_gt_missing;
-+ else
-+ {
-+ if ( *end=='|' ) is_phased = 1;
-+ dst[i] = strtol(beg, &tmp, 10);
-+ if ( tmp!=end )
-+ error("Could not parse the %s field at %s:%"PRId64" in %s\n", col->hdr_key_src,bcf_seqname(args->files->readers[1].header,rec),(int64_t) rec->pos+1,args->targets_fname);
-+ if ( dst[i] >= line->n_allele )
-+ error("The source allele index is bigger than the number of destination alleles at %s:%"PRId64"\n", bcf_seqname(args->files->readers[1].header,rec),(int64_t) rec->pos+1);
-+ dst[i] = is_phased ? bcf_gt_phased(dst[i]) : bcf_gt_unphased(dst[i]);
-+ }
-+ beg = *end ? end+1 : end;
-+ i++;
-+ }
-+ *keep_ptr = keep;
-+ for (; i<ndst1; i++) dst[i] = bcf_int32_vector_end;
-+ }
-+ return bcf_update_genotypes(args->hdr_out,line,args->tmpi,ndst);
- }
- static int init_sample_map(args_t *args, bcf_hdr_t *src, bcf_hdr_t *dst)
- {
-@@ -1448,62 +1800,25 @@
- args->sample_map = (int*) malloc(sizeof(int)*args->nsample_map);
- for (i=0; i<args->nsample_map; i++) args->sample_map[i] = -1;
-
-- // possible todo: could do with smpl_ilist only
-- smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, SMPL_STRICT);
-- if ( !ilist || !ilist->n ) error("Could not parse: %s\n", args->sample_names);
-- char **samples = (char**) malloc(sizeof(char*)*ilist->n);
-- for (i=0; i<ilist->n; i++) samples[i] = strdup(dst->samples[i]);
-+ int flags = !src ? SMPL_STRICT|SMPL_SINGLE : SMPL_STRICT|SMPL_SINGLE|SMPL_PAIR2; // is vcf vs tab annotation file
-+ smpl_ilist_t *ilist = smpl_ilist_init(dst, args->sample_names, args->sample_is_file, flags); // gives mapping dst->src
-+ if ( !ilist || !ilist->n ) error("Could not parse the samples: %s\n", args->sample_names);
- args->nsmpl_annot = ilist->n;
-- smpl_ilist_destroy(ilist);
- int need_sample_map = args->nsmpl_annot==bcf_hdr_nsamples(dst) ? 0 : 1;
-- if ( !src )
-+ for (i=0; i<args->nsmpl_annot; i++)
- {
-- // tab annotation file
-- for (i=0; i<args->nsmpl_annot; i++)
-+ int idst = ilist->idx[i];
-+ const char *src_name = ilist->pair && ilist->pair[i] ? ilist->pair[i] : bcf_hdr_int2id(dst, BCF_DT_SAMPLE, idst);
-+ int isrc = i;
-+ if ( src ) // the annotation file is a VCF, not a tab-delimited file
- {
-- int idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE, samples[i]);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", samples[i]);
-- args->sample_map[idst] = i;
-- if ( idst!=i ) need_sample_map = 1;
-- }
-- }
-- else
-- {
-- // vcf annotation file
-- for (i=0; i<args->nsmpl_annot; i++)
-- {
-- int isrc, idst;
-- char *ss = samples[i], *se = samples[i];
-- while ( *se && !isspace(*se) ) se++;
-- if ( !*se )
-- {
-- // only one sample name
-- isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss);
-- if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss);
-- idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss);
-- args->sample_map[idst] = isrc;
-- if ( idst!=isrc ) need_sample_map = 1;
-- continue;
-- }
-- *se = 0;
-- isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE,ss);
-- if ( isrc==-1 ) error("Sample \"%s\" not found in the source file\n", ss);
--
-- ss = se+1;
-- while ( isspace(*ss) ) ss++;
-- se = ss;
-- while ( *se && !isspace(*se) ) se++;
--
-- idst = bcf_hdr_id2int(dst, BCF_DT_SAMPLE,ss);
-- if ( idst==-1 ) error("Sample \"%s\" not found in the destination file\n", ss);
--
-- args->sample_map[idst] = isrc;
-- if ( idst!=isrc ) need_sample_map = 1;
-+ isrc = bcf_hdr_id2int(src, BCF_DT_SAMPLE, src_name);
-+ if ( isrc==-1 ) error("Sample \"%s\" not found in the annotation file\n", src_name);
- }
-+ if ( isrc!=idst ) need_sample_map = 1;
-+ args->sample_map[idst] = isrc;
- }
-- for (i=0; i<args->nsmpl_annot; i++) free(samples[i]);
-- free(samples);
-+ smpl_ilist_destroy(ilist);
- return need_sample_map;
- }
- static char *columns_complement(char *columns, void **skip_info, void **skip_fmt)
-@@ -1607,9 +1922,9 @@
- kputsn(ss, se-ss, &str);
- if ( !str.s[0] || !strcasecmp("-",str.s) ) ;
- else if ( !strcasecmp("CHROM",str.s) ) args->chr_idx = icol;
-- else if ( !strcasecmp("POS",str.s) ) args->from_idx = icol;
-- else if ( !strcasecmp("FROM",str.s) ) args->from_idx = icol;
-- else if ( !strcasecmp("TO",str.s) ) args->to_idx = icol;
-+ else if ( !strcasecmp("POS",str.s) ) args->beg_idx = icol;
-+ else if ( !strcasecmp("FROM",str.s) || !strcasecmp("BEG",str.s) ) args->beg_idx = icol;
-+ else if ( !strcasecmp("TO",str.s) || !strcasecmp("END",str.s) ) args->end_idx = icol;
- else if ( !strcasecmp("REF",str.s) )
- {
- if ( args->tgts_is_vcf )
-@@ -1669,7 +1984,8 @@
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
- }
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- }
- else if ( !strcasecmp("QUAL",str.s) )
-@@ -1700,7 +2016,8 @@
- tmp.l = 0;
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
- args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols);
- annot_col_t *col = &args->cols[args->ncols-1];
-@@ -1734,7 +2051,8 @@
- tmp.l = 0;
- bcf_hrec_format(hrec, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, hrec->vals[k]);
- args->ncols++; args->cols = (annot_col_t*) realloc(args->cols,sizeof(annot_col_t)*args->ncols);
- annot_col_t *col = &args->cols[args->ncols-1];
-@@ -1776,7 +2094,8 @@
- tmp.l = 0;
- bcf_hrec_format_rename(hrec, key_dst, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- int hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst);
- if ( !bcf_hdr_idinfo_exists(args->hdr_out,BCF_HL_FMT,hdr_id) )
-@@ -1813,13 +2132,30 @@
- {
- if ( replace==REPLACE_NON_MISSING ) error("Apologies, the -INFO/TAG feature has not been implemented yet.\n");
- if ( replace==SET_OR_APPEND ) error("Apologies, the =INFO/TAG feature has not been implemented yet.\n");
-- char *key_dst = !strncasecmp("INFO/",str.s,5) ? str.s + 5 : str.s;
-+ int explicit_info = 0;
-+ char *key_dst;
-+ if ( !strncasecmp("INFO/",str.s,5) )
-+ {
-+ key_dst = str.s + 5;
-+ explicit_info = 1;
-+ }
-+ else
-+ key_dst = str.s;
- char *key_src = strstr(key_dst,":=");
- if ( key_src )
- {
- *key_src = 0;
- key_src += 2;
-- if ( !strncasecmp("INFO/",key_src,5) ) key_src += 5;
-+ if ( !strncasecmp("INFO/",key_src,5) )
-+ {
-+ key_src += 5;
-+ explicit_info = 1;
-+ }
-+ else if ( !strncasecmp("FMT/",key_src,4) || !strncasecmp("FORMAT/",key_src,5) )
-+ {
-+ key_src[-2] = ':';
-+ error("Did you mean \"FMT/%s\" rather than \"%s\"?\n",str.s,str.s);
-+ }
- }
- else
- key_src = key_dst;
-@@ -1829,11 +2165,18 @@
- if ( args->tgts_is_vcf ) // reading annotations from a VCF, add a new header line
- {
- bcf_hrec_t *hrec = bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_INFO, "ID", key_src, NULL);
-- if ( !hrec ) error("The tag \"%s\" is not defined in %s\n", str.s,args->files->readers[1].fname);
-+ if ( !hrec )
-+ {
-+ if ( !explicit_info && bcf_hdr_get_hrec(args->files->readers[1].header, BCF_HL_FMT, "ID", key_src, NULL) )
-+ error("Did you mean \"FMT/%s\" rather than \"%s\"?\n",str.s,str.s);
-+ fprintf(bcftools_stderr,"[%s] %d\n",key_src,explicit_info);
-+ error("The tag \"%s\" is not defined in %s\n", key_src,args->files->readers[1].fname);
-+ }
- tmp.l = 0;
- bcf_hrec_format_rename(hrec, key_dst, &tmp);
- bcf_hdr_append(args->hdr_out, tmp.s);
-- bcf_hdr_sync(args->hdr_out);
-+ if (bcf_hdr_sync(args->hdr_out) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- hdr_id = bcf_hdr_id2int(args->hdr_out, BCF_DT_ID, key_dst);
- }
- else
-@@ -1862,7 +2205,6 @@
- }
- free(str.s);
- free(tmp.s);
-- if ( args->to_idx==-1 ) args->to_idx = args->from_idx;
- free(args->columns);
- if ( skip_info ) khash_str2int_destroy_free(skip_info);
- if ( skip_fmt ) khash_str2int_destroy_free(skip_fmt);
-@@ -1881,6 +2223,54 @@
- else if ( sample_map_ok<0 )
- error("No matching samples in source and destination file?\n");
- }
-+static void init_merge_method(args_t *args)
-+{
-+ int i;
-+ for (i=0; i<args->ncols; i++)
-+ {
-+ args->cols[i].merge_method = MM_FIRST;
-+ args->cols[i].mm_str_hash = NULL;
-+ args->cols[i].mm_dbl = NULL;
-+ args->cols[i].mm_dbl_nalloc = args->cols[i].mm_dbl_nused = args->cols[i].mm_dbl_ndat = 0;
-+ memset(&args->cols[i].mm_kstr, 0, sizeof(args->cols[i].mm_kstr));
-+ }
-+ if ( !args->merge_method_str ) return;
-+ if ( args->tgts_is_vcf ) error("Error: the --merge-logic is intended for use with BED or TAB-delimited files only.\n");
-+ if ( !args->tgt_idx ) error("Error: BEG,END (or FROM,TO) columns are expected with the --merge-logic option.\n");
-+ char *sb = args->merge_method_str;
-+ while ( *sb )
-+ {
-+ char *se = sb;
-+ while ( *se && *se!=',' ) se++;
-+ args->tmpks.l = 0;
-+ kputsn(sb, se-sb, &args->tmpks);
-+ kputc(0, &args->tmpks);
-+ char *mm_type_str = args->tmpks.s + args->tmpks.l;
-+ while ( *mm_type_str!=':' && mm_type_str > args->tmpks.s ) mm_type_str--;
-+ if ( *mm_type_str!=':' )
-+ error("Error: could not parse the argument to --merge-logic: %s\n", args->merge_method_str);
-+ *mm_type_str = 0;
-+ mm_type_str++;
-+ int mm_type = MM_FIRST;
-+ if ( !strcasecmp("unique",mm_type_str) ) mm_type = MM_UNIQUE;
-+ else if ( !strcasecmp("append",mm_type_str) ) mm_type = MM_APPEND;
-+ else if ( !strcasecmp("sum",mm_type_str) ) mm_type = MM_SUM;
-+ else if ( !strcasecmp("avg",mm_type_str) ) mm_type = MM_AVG;
-+ else if ( !strcasecmp("min",mm_type_str) ) mm_type = MM_MIN;
-+ else if ( !strcasecmp("max",mm_type_str) ) mm_type = MM_MAX;
-+ else error("Error: could not parse --merge-logic %s, the logic \"%s\" is not recognised\n", args->merge_method_str,mm_type_str);
-+ for (i=0; i<args->ncols; i++)
-+ {
-+ if ( strcmp(args->cols[i].hdr_key_dst,args->tmpks.s) ) continue;
-+ if ( mm_type==MM_APPEND && args->cols[i].number!=BCF_VL_VAR )
-+ error("Error: --merge-logic append can be requested only for tags of variable length (Number=.)\n");
-+ args->cols[i].merge_method = mm_type;
-+ break;
-+ }
-+ if ( i==args->ncols ) error("No such tag in the destination file: %s\n", args->tmpks.s);
-+ sb = *se ? se + 1 : se;
-+ }
-+}
-
- static void rename_chrs(args_t *args, char *fname)
- {
-@@ -1929,13 +2319,30 @@
- {
- if ( !args->columns ) error("The -c option not given\n");
- if ( args->chr_idx==-1 ) error("The -c CHROM option not given\n");
-- if ( args->from_idx==-1 ) error("The -c POS option not given\n");
-- if ( args->to_idx==-1 ) args->to_idx = -args->from_idx - 1;
--
-- args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->from_idx,args->to_idx);
-- if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname);
-- if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname);
-+ if ( args->beg_idx==-1 ) error("The -c POS option not given\n");
-+ if ( args->single_overlaps && args->merge_method_str ) error("The options --merge-logic and --single-overlaps cannot be combined\n");
-+ if ( args->end_idx==-1 || (args->single_overlaps && !args->merge_method_str) )
-+ {
-+ args->end_idx = -args->beg_idx - 1;
-+ args->tgts = bcf_sr_regions_init(args->targets_fname,1,args->chr_idx,args->beg_idx,args->end_idx);
-+ if ( !args->tgts ) error("Could not initialize the annotation file: %s\n", args->targets_fname);
-+ if ( !args->tgts->tbx ) error("Expected tabix-indexed annotation file: %s\n", args->targets_fname);
-+ }
-+ else
-+ {
-+ if ( args->ref_idx!=-1 ) error("Error: the REF columns will be ignored when BEG,END (or FROM,TO) is present. Replace END (or TO) with \"-\".\n");
-+ int len = strlen(args->targets_fname);
-+ if ( len>=7 && !strcasecmp(".bed.gz",args->targets_fname+len-7) ) args->tgt_is_bed = 1;
-+ else if ( len>=8 && !strcasecmp(".bed.bgz",args->targets_fname+len-8) ) args->tgt_is_bed = 1;
-+ else if ( len>=4 && !strcasecmp(".bed",args->targets_fname+len-4) ) args->tgt_is_bed = 1;
-+ args->tgt_idx = regidx_init(args->targets_fname,parse_with_payload,free_payload,sizeof(char*),args);
-+ if ( !args->tgt_idx ) error("Failed to parse: %s\n", args->targets_fname);
-+ args->tgt_itr = regitr_init(args->tgt_idx);
-+ args->nalines++;
-+ hts_expand0(annot_line_t,args->nalines,args->malines,args->alines);
-+ }
- }
-+ init_merge_method(args);
- args->vcmp = vcmp_init();
-
- if ( args->filter_str )
-@@ -1960,10 +2367,10 @@
- if ( args->rename_chrs ) rename_chrs(args, args->rename_chrs);
-
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( args->out_fh == NULL ) error("[%s] Error: cannot write to \"%s\": %s\n", __func__,args->output_fname, strerror(errno));
- if ( args->n_threads )
- hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->files->p);
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: failed to write the header to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -1978,6 +2385,9 @@
- {
- free(args->cols[i].hdr_key_src);
- free(args->cols[i].hdr_key_dst);
-+ free(args->cols[i].mm_kstr.s);
-+ if ( args->cols[i].mm_str_hash ) khash_str2int_destroy_free(args->cols[i].mm_str_hash);
-+ free(args->cols[i].mm_dbl);
- }
- free(args->cols);
- for (i=0; i<args->malines; i++)
-@@ -1987,6 +2397,11 @@
- free(args->alines[i].line.s);
- }
- free(args->alines);
-+ if ( args->tgt_idx )
-+ {
-+ regidx_destroy(args->tgt_idx);
-+ regitr_destroy(args->tgt_itr);
-+ }
- if ( args->tgts ) bcf_sr_regions_destroy(args->tgts);
- free(args->tmpks.s);
- free(args->tmpi);
-@@ -2009,6 +2424,48 @@
- free(args->sample_map);
- }
-
-+static void parse_annot_line(args_t *args, char *str, annot_line_t *tmp)
-+{
-+ tmp->line.l = 0;
-+ kputs(str, &tmp->line);
-+ char *s = tmp->line.s;
-+ tmp->ncols = 1;
-+ hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-+ tmp->cols[0] = s;
-+ while ( *s )
-+ {
-+ if ( *s=='\t' )
-+ {
-+ tmp->ncols++;
-+ hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-+ tmp->cols[tmp->ncols-1] = s+1;
-+ *s = 0;
-+ }
-+ s++;
-+ }
-+ if ( args->ref_idx != -1 )
-+ {
-+ if ( args->ref_idx >= tmp->ncols )
-+ error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,str);
-+ if ( args->alt_idx >= tmp->ncols )
-+ error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,str);
-+ tmp->nals = 2;
-+ hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-+ tmp->als[0] = tmp->cols[args->ref_idx];
-+ tmp->als[1] = s = tmp->cols[args->alt_idx];
-+ while ( *s )
-+ {
-+ if ( *s==',' )
-+ {
-+ tmp->nals++;
-+ hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-+ tmp->als[tmp->nals-1] = s+1;
-+ *s = 0;
-+ }
-+ s++;
-+ }
-+ }
-+}
- static void buffer_annot_lines(args_t *args, bcf1_t *line, int start_pos, int end_pos)
- {
- if ( args->nalines && args->alines[0].rid != line->rid ) args->nalines = 0;
-@@ -2039,44 +2496,9 @@
- tmp->rid = line->rid;
- tmp->start = args->tgts->start;
- tmp->end = args->tgts->end;
-- tmp->line.l = 0;
-- kputs(args->tgts->line.s, &tmp->line);
-- char *s = tmp->line.s;
-- tmp->ncols = 1;
-- hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-- tmp->cols[0] = s;
-- while ( *s )
-- {
-- if ( *s=='\t' )
-- {
-- tmp->ncols++;
-- hts_expand(char*,tmp->ncols,tmp->mcols,tmp->cols);
-- tmp->cols[tmp->ncols-1] = s+1;
-- *s = 0;
-- }
-- s++;
-- }
-+ parse_annot_line(args, args->tgts->line.s, tmp);
- if ( args->ref_idx != -1 )
- {
-- if ( args->ref_idx >= tmp->ncols )
-- error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->ref_idx+1,tmp->ncols,args->tgts->line.s);
-- if ( args->alt_idx >= tmp->ncols )
-- error("Could not parse the line, expected %d+ columns, found %d:\n\t%s\n",args->alt_idx+1,tmp->ncols,args->tgts->line.s);
-- tmp->nals = 2;
-- hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-- tmp->als[0] = tmp->cols[args->ref_idx];
-- tmp->als[1] = s = tmp->cols[args->alt_idx];
-- while ( *s )
-- {
-- if ( *s==',' )
-- {
-- tmp->nals++;
-- hts_expand(char*,tmp->nals,tmp->mals,tmp->als);
-- tmp->als[tmp->nals-1] = s+1;
-- *s = 0;
-- }
-- s++;
-- }
- int iseq = args->tgts->iseq;
- if ( bcf_sr_regions_next(args->tgts)<0 || args->tgts->iseq!=iseq ) break;
- }
-@@ -2090,7 +2512,30 @@
- for (i=0; i<args->nrm; i++)
- args->rm[i].handler(args, line, &args->rm[i]);
-
-- if ( args->tgts )
-+ int has_overlap = 0;
-+
-+ if ( args->tgt_idx )
-+ {
-+ if ( regidx_overlap(args->tgt_idx, bcf_seqname(args->hdr,line),line->pos,line->pos+line->rlen-1, args->tgt_itr) )
-+ {
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ annot_line_t *tmp = &args->alines[0];
-+ tmp->rid = line->rid;
-+ tmp->start = args->tgt_itr->beg;
-+ tmp->end = args->tgt_itr->end;
-+ parse_annot_line(args, regitr_payload(args->tgt_itr,char*), tmp);
-+ for (j=0; j<args->ncols; j++)
-+ if ( args->cols[j].setter(args,line,&args->cols[j],tmp) )
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-+ }
-+ has_overlap = 1;
-+ }
-+ for (j=0; j<args->ncols; j++)
-+ if ( args->cols[j].merge_method != MM_FIRST )
-+ args->cols[j].setter(args,line,&args->cols[j],NULL);
-+ }
-+ else if ( args->tgts )
- {
- // Buffer annotation lines. When multiple ALT alleles are present in the
- // annotation file, at least one must match one of the VCF alleles.
-@@ -2121,18 +2566,9 @@
- // there is a matching line
- for (j=0; j<args->ncols; j++)
- if ( args->cols[j].setter(args,line,&args->cols[j],&args->alines[i]) )
-- error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
--
-- }
--
-- if ( args->mark_sites )
-- {
-- // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87
-- if ( args->mark_sites_logic==MARK_LISTED )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,i<args->nalines?1:0);
-- else
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,i<args->nalines?0:1);
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- }
-+ has_overlap = i<args->nalines ? 1 : 0;
- }
- else if ( args->files->nreaders == 2 )
- {
-@@ -2141,13 +2577,10 @@
- bcf1_t *aline = bcf_sr_get_line(args->files,1);
- for (j=0; j<args->ncols; j++)
- if ( args->cols[j].setter(args,line,&args->cols[j],aline) )
-- error("fixme: Could not set %s at %s:%d\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),line->pos+1);
-+ error("fixme: Could not set %s at %s:%"PRId64"\n", args->cols[j].hdr_key_src,bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
-
-- if ( args->mark_sites )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,args->mark_sites_logic==MARK_LISTED ? 1 : 0);
-+ has_overlap = 1;
- }
-- else if ( args->mark_sites )
-- bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL, args->mark_sites_logic==MARK_UNLISTED ? 1 : 0);
- }
- if ( args->set_ids )
- {
-@@ -2162,6 +2595,15 @@
- bcf_update_id(args->hdr_out,line,args->tmpks.s);
- }
- }
-+
-+ if ( args->mark_sites )
-+ {
-+ // ideally, we'd like to be far more general than this in future, see https://github.com/samtools/bcftools/issues/87
-+ if ( args->mark_sites_logic==MARK_LISTED )
-+ bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,has_overlap?1:0);
-+ else
-+ bcf_update_info_flag(args->hdr_out,line,args->mark_sites,NULL,has_overlap?0:1);
-+ }
- }
-
- static void usage(args_t *args)
-@@ -2175,10 +2617,12 @@
- fprintf(bcftools_stderr, " --collapse <string> matching records by <snps|indels|both|all|some|none>, see man page for details [some]\n");
- fprintf(bcftools_stderr, " -c, --columns <list> list of columns in the annotation file, e.g. CHROM,POS,REF,ALT,-,INFO/TAG. See man page for details\n");
- fprintf(bcftools_stderr, " -e, --exclude <expr> exclude sites for which the expression is true (see man page for details)\n");
-+ fprintf(bcftools_stderr, " --force continue despite parsing error (at your own risk!)\n");
- fprintf(bcftools_stderr, " -h, --header-lines <file> lines which should be appended to the VCF header\n");
- fprintf(bcftools_stderr, " -I, --set-id [+]<format> set ID column, see man page for details\n");
- fprintf(bcftools_stderr, " -i, --include <expr> select sites for which the expression is true (see man page for details)\n");
- fprintf(bcftools_stderr, " -k, --keep-sites leave -i/-e sites unchanged instead of discarding them\n");
-+ fprintf(bcftools_stderr, " -l, --merge-logic <tag:type> merge logic for multiple overlapping regions (see man page for details), EXPERIMENTAL\n");
- fprintf(bcftools_stderr, " -m, --mark-sites [+-]<tag> add INFO/tag flag to sites which are (\"+\") or are not (\"-\") listed in the -a file\n");
- fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n");
- fprintf(bcftools_stderr, " -o, --output <file> write output to a file [standard output]\n");
-@@ -2188,6 +2632,7 @@
- fprintf(bcftools_stderr, " --rename-chrs <file> rename sequences according to map file: from\\tto\n");
- fprintf(bcftools_stderr, " -s, --samples [^]<list> comma separated list of samples to annotate (or exclude with \"^\" prefix)\n");
- fprintf(bcftools_stderr, " -S, --samples-file [^]<file> file of samples to annotate (or exclude with \"^\" prefix)\n");
-+ fprintf(bcftools_stderr, " --single-overlaps keep memory low by avoiding complexities arising from handling multiple overlapping intervals\n");
- fprintf(bcftools_stderr, " -x, --remove <list> list of annotations (e.g. ID,INFO/DP,FORMAT/DP,FILTER) to remove (or keep with \"^\" prefix). See man page for details\n");
- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
- fprintf(bcftools_stderr, "\n");
-@@ -2204,19 +2649,20 @@
- args->output_type = FT_VCF;
- args->n_threads = 0;
- args->record_cmd_line = 1;
-- args->ref_idx = args->alt_idx = args->chr_idx = args->from_idx = args->to_idx = -1;
-+ args->ref_idx = args->alt_idx = args->chr_idx = args->beg_idx = args->end_idx = -1;
- args->set_ids_replace = 1;
- int regions_is_file = 0, collapse = 0;
-
- static struct option loptions[] =
- {
-- {"keep-sites",required_argument,NULL,'k'},
-+ {"keep-sites",no_argument,NULL,'k'},
- {"mark-sites",required_argument,NULL,'m'},
- {"set-id",required_argument,NULL,'I'},
- {"output",required_argument,NULL,'o'},
- {"output-type",required_argument,NULL,'O'},
- {"threads",required_argument,NULL,9},
- {"annotations",required_argument,NULL,'a'},
-+ {"merge-logic",required_argument,NULL,'l'},
- {"collapse",required_argument,NULL,2},
- {"include",required_argument,NULL,'i'},
- {"exclude",required_argument,NULL,'e'},
-@@ -2228,12 +2674,15 @@
- {"header-lines",required_argument,NULL,'h'},
- {"samples",required_argument,NULL,'s'},
- {"samples-file",required_argument,NULL,'S'},
-+ {"single-overlaps",no_argument,NULL,10},
- {"no-version",no_argument,NULL,8},
-+ {"force",no_argument,NULL,'f'},
- {NULL,0,NULL,0}
- };
-- while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:k",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h:?o:O:r:R:a:x:c:i:e:S:s:I:m:kl:f",loptions,NULL)) >= 0)
- {
- switch (c) {
-+ case 'f': args->force = 1; break;
- case 'k': args->keep_sites = 1; break;
- case 'm':
- args->mark_sites_logic = MARK_LISTED;
-@@ -2241,6 +2690,7 @@
- else if ( optarg[0]=='-' ) { args->mark_sites = optarg+1; args->mark_sites_logic = MARK_UNLISTED; }
- else args->mark_sites = optarg;
- break;
-+ case 'l': args->merge_method_str = optarg; break;
- case 'I': args->set_ids_fmt = optarg; break;
- case 's': args->sample_names = optarg; break;
- case 'S': args->sample_names = optarg; args->sample_is_file = 1; break;
-@@ -2275,6 +2725,7 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 10 : args->single_overlaps = 1; break;
- case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
-@@ -2296,6 +2747,7 @@
- if ( args->targets_fname )
- {
- htsFile *fp = hts_open(args->targets_fname,"r");
-+ if ( !fp ) error("Failed to open %s\n", args->targets_fname);
- htsFormat type = *hts_get_format(fp);
- hts_close(fp);
-
-@@ -2307,26 +2759,40 @@
- }
- }
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
-+ static int line_errcode_warned = 0;
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
- {
- if ( !bcf_sr_has_line(args->files,0) ) continue;
- bcf1_t *line = bcf_sr_get_line(args->files,0);
-- if ( line->errcode ) error("Encountered error, cannot proceed. Please check the error output above.\n");
-+ if ( line->errcode )
-+ {
-+ if ( !args->force )
-+ error("Encountered an error, cannot proceed. Please check the error output above.\n"
-+ "If feeling adventurous, use the --force option. (At your own risk!)\n");
-+ else if ( !line_errcode_warned )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: Encountered an error, proceeding only because --force was given.\n"
-+ " Note that this can result in a segfault or a silent corruption of the output file!\n");
-+ line_errcode_warned = 1;
-+ line->errcode = 0;
-+ }
-+ }
- if ( args->filter )
- {
- int pass = filter_test(args->filter, line, NULL);
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass )
- {
-- if ( args->keep_sites ) bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( args->keep_sites && bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
- continue;
- }
- }
- annotate(args, line);
-- bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
- }
- destroy_data(args);
- bcf_sr_destroy(args->files);
---- python-pysam.orig/bcftools/vcfbuf.c
-+++ python-pysam/bcftools/vcfbuf.c
-@@ -1,6 +1,6 @@
- /* The MIT License
-
-- Copyright (c) 2016 Genome Research Ltd.
-+ Copyright (c) 2016-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -57,6 +57,12 @@
-
- typedef struct
- {
-+ int active;
-+}
-+rmdup_t;
-+
-+typedef struct
-+{
- int active, rid, end;
- }
- overlap_t;
-@@ -70,6 +76,7 @@
- ld_t ld;
- prune_t prune;
- overlap_t overlap;
-+ rmdup_t rmdup;
- };
-
- vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win)
-@@ -103,6 +110,7 @@
- if ( key==VCFBUF_NSITES ) { buf->prune.max_sites = *((int*)value); return; }
- if ( key==VCFBUF_AF_TAG ) { buf->prune.af_tag = *((char**)value); return; }
- if ( key==VCFBUF_OVERLAP_WIN ) { buf->overlap.active = *((int*)value); return; }
-+ if ( key==VCFBUF_RMDUP) { buf->rmdup.active = *((int*)value); return; }
- }
-
- int vcfbuf_nsites(vcfbuf_t *buf)
-@@ -126,6 +134,21 @@
- return ret;
- }
-
-+bcf1_t *vcfbuf_peek(vcfbuf_t *buf, int idx)
-+{
-+ int i = rbuf_kth(&buf->rbuf, idx);
-+ return i<0 ? NULL : buf->vcf[i].rec;
-+}
-+
-+bcf1_t *vcfbuf_remove(vcfbuf_t *buf, int idx)
-+{
-+ int i = rbuf_kth(&buf->rbuf, idx);
-+ if ( i<0 ) return NULL;
-+ bcf1_t *rec = buf->vcf[i].rec;
-+ rbuf_remove_kth(&buf->rbuf, vcfrec_t, idx, buf->vcf);
-+ return rec;
-+}
-+
- static int cmpvrec(const void *_a, const void *_b)
- {
- vcfrec_t *a = *((vcfrec_t**) _a);
-@@ -198,6 +221,24 @@
- rbuf_remove_kth(&buf->rbuf, vcfrec_t, buf->prune.idx[i], buf->vcf);
- }
-
-+static int _rmdup_can_flush(vcfbuf_t *buf, int flush_all)
-+{
-+ if ( flush_all ) return 1;
-+
-+ if ( buf->rbuf.n==1 ) return 0;
-+
-+ int k1 = rbuf_kth(&buf->rbuf, -1);
-+ int k2 = rbuf_kth(&buf->rbuf, -2);
-+
-+ vcfrec_t *rec1 = &buf->vcf[k1];
-+ vcfrec_t *rec2 = &buf->vcf[k2];
-+
-+ if ( rec1->rec->rid!=rec2->rec->rid ) return 1;
-+ if ( rec1->rec->pos!=rec2->rec->pos ) return 1;
-+
-+ return 0;
-+}
-+
- static int _overlap_can_flush(vcfbuf_t *buf, int flush_all)
- {
- if ( flush_all ) { buf->overlap.rid = -1; return 1; }
-@@ -252,13 +293,8 @@
- j = rbuf_last(&buf->rbuf); // last
-
- if ( buf->vcf[i].rec->rid != buf->vcf[j].rec->rid ) goto ret;
-- if ( buf->overlap.active )
-- {
-- int ret = _overlap_can_flush(buf, flush_all);
-- //printf("can_flush: %d %d - %d\n", ret, buf->vcf[i].rec->pos+1, buf->vcf[j].rec->pos+1);
-- if ( ret ) goto ret;
-- }
-- //if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret;
-+ if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret;
-+ if ( buf->rmdup.active && _rmdup_can_flush(buf, flush_all) ) goto ret;
-
- if ( buf->win > 0 )
- {
---- python-pysam.orig/bcftools/vcfbuf.c.pysam.c
-+++ python-pysam/bcftools/vcfbuf.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* The MIT License
-
-- Copyright (c) 2016 Genome Research Ltd.
-+ Copyright (c) 2016-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -59,6 +59,12 @@
-
- typedef struct
- {
-+ int active;
-+}
-+rmdup_t;
-+
-+typedef struct
-+{
- int active, rid, end;
- }
- overlap_t;
-@@ -72,6 +78,7 @@
- ld_t ld;
- prune_t prune;
- overlap_t overlap;
-+ rmdup_t rmdup;
- };
-
- vcfbuf_t *vcfbuf_init(bcf_hdr_t *hdr, int win)
-@@ -105,6 +112,7 @@
- if ( key==VCFBUF_NSITES ) { buf->prune.max_sites = *((int*)value); return; }
- if ( key==VCFBUF_AF_TAG ) { buf->prune.af_tag = *((char**)value); return; }
- if ( key==VCFBUF_OVERLAP_WIN ) { buf->overlap.active = *((int*)value); return; }
-+ if ( key==VCFBUF_RMDUP) { buf->rmdup.active = *((int*)value); return; }
- }
-
- int vcfbuf_nsites(vcfbuf_t *buf)
-@@ -128,6 +136,21 @@
- return ret;
- }
-
-+bcf1_t *vcfbuf_peek(vcfbuf_t *buf, int idx)
-+{
-+ int i = rbuf_kth(&buf->rbuf, idx);
-+ return i<0 ? NULL : buf->vcf[i].rec;
-+}
-+
-+bcf1_t *vcfbuf_remove(vcfbuf_t *buf, int idx)
-+{
-+ int i = rbuf_kth(&buf->rbuf, idx);
-+ if ( i<0 ) return NULL;
-+ bcf1_t *rec = buf->vcf[i].rec;
-+ rbuf_remove_kth(&buf->rbuf, vcfrec_t, idx, buf->vcf);
-+ return rec;
-+}
-+
- static int cmpvrec(const void *_a, const void *_b)
- {
- vcfrec_t *a = *((vcfrec_t**) _a);
-@@ -200,6 +223,24 @@
- rbuf_remove_kth(&buf->rbuf, vcfrec_t, buf->prune.idx[i], buf->vcf);
- }
-
-+static int _rmdup_can_flush(vcfbuf_t *buf, int flush_all)
-+{
-+ if ( flush_all ) return 1;
-+
-+ if ( buf->rbuf.n==1 ) return 0;
-+
-+ int k1 = rbuf_kth(&buf->rbuf, -1);
-+ int k2 = rbuf_kth(&buf->rbuf, -2);
-+
-+ vcfrec_t *rec1 = &buf->vcf[k1];
-+ vcfrec_t *rec2 = &buf->vcf[k2];
-+
-+ if ( rec1->rec->rid!=rec2->rec->rid ) return 1;
-+ if ( rec1->rec->pos!=rec2->rec->pos ) return 1;
-+
-+ return 0;
-+}
-+
- static int _overlap_can_flush(vcfbuf_t *buf, int flush_all)
- {
- if ( flush_all ) { buf->overlap.rid = -1; return 1; }
-@@ -254,13 +295,8 @@
- j = rbuf_last(&buf->rbuf); // last
-
- if ( buf->vcf[i].rec->rid != buf->vcf[j].rec->rid ) goto ret;
-- if ( buf->overlap.active )
-- {
-- int ret = _overlap_can_flush(buf, flush_all);
-- //printf("can_flush: %d %d - %d\n", ret, buf->vcf[i].rec->pos+1, buf->vcf[j].rec->pos+1);
-- if ( ret ) goto ret;
-- }
-- //if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret;
-+ if ( buf->overlap.active && _overlap_can_flush(buf, flush_all) ) goto ret;
-+ if ( buf->rmdup.active && _rmdup_can_flush(buf, flush_all) ) goto ret;
-
- if ( buf->win > 0 )
- {
---- python-pysam.orig/bcftools/vcfbuf.h
-+++ python-pysam/bcftools/vcfbuf.h
-@@ -1,6 +1,6 @@
- /* The MIT License
-
-- Copyright (c) 2017 Genome Research Ltd.
-+ Copyright (c) 2017-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -44,6 +44,7 @@
- VCFBUF_NSITES, // leave at max this many sites in the window
- VCFBUF_AF_TAG, // use this INFO tag with LD_NSITES
- VCFBUF_OVERLAP_WIN, // keep only overlapping variants in the window
-+ VCFBUF_RMDUP, // remove duplicate sites (completely)
- }
- vcfbuf_opt_t;
-
-@@ -64,6 +65,18 @@
- */
- bcf1_t *vcfbuf_push(vcfbuf_t *buf, bcf1_t *rec, int swap);
-
-+/*
-+ * vcfbuf_peek() - return pointer to i-th record in the buffer but do not remove it from the buffer
-+ * @idx: 0-based index to buffered lines
-+ */
-+bcf1_t *vcfbuf_peek(vcfbuf_t *buf, int idx);
-+
-+/*
-+ * vcfbuf_remove() - return pointer to i-th record in the buffer and remove it from the buffer
-+ * @idx: 0-based index to buffered lines
-+ */
-+bcf1_t *vcfbuf_remove(vcfbuf_t *buf, int idx);
-+
- bcf1_t *vcfbuf_flush(vcfbuf_t *buf, int flush_all);
-
- /*
---- python-pysam.orig/bcftools/vcfcall.c
-+++ python-pysam/bcftools/vcfcall.c
-@@ -42,14 +42,11 @@
- #include "prob1.h"
- #include "ploidy.h"
- #include "gvcf.h"
-+#include "regidx.h"
-+#include "vcfbuf.h"
-
- void error(const char *format, ...);
-
--#ifdef _WIN32
--#define srand48(x) srand(x)
--#define lrand48() rand()
--#endif
--
- #define CF_NO_GENO 1
- #define CF_INS_MISSED (1<<1)
- #define CF_CCALL (1<<2)
-@@ -68,6 +65,13 @@
-
- typedef struct
- {
-+ tgt_als_t *als;
-+ int nmatch_als, ibuf;
-+}
-+rec_tgt_t;
-+
-+typedef struct
-+{
- int flag; // combination of CF_* flags above
- int output_type, n_threads, record_cmd_line;
- htsFile *bcf_in, *out_fh;
-@@ -76,6 +80,9 @@
- int nsamples, *samples_map; // mapping from output sample names to original VCF
- char *regions, *targets; // regions to process
- int regions_is_file, targets_is_file;
-+ regidx_t *tgt_idx;
-+ regitr_t *tgt_itr, *tgt_itr_prev, *tgt_itr_tmp;
-+ vcfbuf_t *vcfbuf;
-
- char *samples_fname;
- int samples_is_file;
-@@ -86,6 +93,7 @@
-
- bcf1_t *missed_line;
- call_t aux; // parameters and temporary data
-+ kstring_t str;
-
- int argc;
- char **argv;
-@@ -297,7 +305,7 @@
- if ( ismpl < 0 ) { fprintf(stderr,"Warning: No such sample in the VCF: %s\n",ss); continue; }
- if ( old2new[ismpl] != -1 ) { fprintf(stderr,"Warning: The sample is listed multiple times: %s\n",ss); continue; }
-
-- ss = se+1;
-+ ss = se+(x != '\0');
- while ( *ss && isspace(*ss) ) ss++;
- if ( !*ss ) ss = "2"; // default ploidy
- se = ss;
-@@ -347,26 +355,253 @@
- bcf_float_set_missing(args->missed_line->qual);
- }
-
--static void print_missed_line(bcf_sr_regions_t *regs, void *data)
-+static int tgt_parse(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr)
-+{
-+ char *ss = (char*) line;
-+ while ( *ss && isspace(*ss) ) ss++;
-+ if ( !*ss ) { fprintf(stderr,"Could not parse the line: %s\n", line); return -2; }
-+ if ( *ss=='#' ) return -1; // skip comments
-+
-+ char *se = ss;
-+ while ( *se && !isspace(*se) ) se++;
-+
-+ *chr_beg = ss;
-+ *chr_end = se-1;
-+
-+ if ( !*se ) { fprintf(stderr,"Could not parse the line: %s\n", line); return -2; }
-+
-+ ss = se+1;
-+ *beg = strtod(ss, &se);
-+ if ( ss==se ) { fprintf(stderr,"Could not parse tab line: %s\n", line); return -2; }
-+ if ( *beg==0 ) { fprintf(stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; }
-+ (*beg)--;
-+ *end = *beg;
-+
-+ if ( !usr ) return 0; // allele information not required
-+
-+ ss = se+1;
-+ tgt_als_t *als = (tgt_als_t*)payload;
-+ als->used = 0;
-+ als->n = 0;
-+ als->allele = NULL;
-+ while ( *ss )
-+ {
-+ se = ss;
-+ while ( *se && *se!=',' ) se++;
-+ als->n++;
-+ als->allele = (char**)realloc(als->allele,als->n*sizeof(*als->allele));
-+ als->allele[als->n-1] = (char*)malloc(se-ss+1);
-+ memcpy(als->allele[als->n-1],ss,se-ss);
-+ als->allele[als->n-1][se-ss] = 0;
-+ ss = se+1;
-+ if ( !*se ) break;
-+ }
-+ return 0;
-+}
-+static void tgt_free(void *payload)
-+{
-+ tgt_als_t *als = (tgt_als_t*)payload;
-+ int i;
-+ for (i=0; i<als->n; i++) free(als->allele[i]);
-+ free(als->allele);
-+}
-+static void tgt_flush_region(args_t *args, char *chr, uint32_t beg, uint32_t end)
-+{
-+ if ( !regidx_overlap(args->tgt_idx, chr,beg,end,args->tgt_itr_tmp) ) return;
-+ while ( regitr_overlap(args->tgt_itr_tmp) )
-+ {
-+ if ( args->tgt_itr_tmp->beg < beg ) continue;
-+
-+ tgt_als_t *tgt_als = ®itr_payload(args->tgt_itr_tmp,tgt_als_t);
-+ if ( tgt_als->used ) continue;
-+
-+ args->missed_line->rid = bcf_hdr_name2id(args->aux.hdr,chr);
-+ args->missed_line->pos = args->tgt_itr_tmp->beg;
-+ bcf_unpack(args->missed_line,BCF_UN_ALL);
-+ bcf_update_alleles(args->aux.hdr, args->missed_line, (const char**)tgt_als->allele, tgt_als->n);
-+ tgt_als->used = 1;
-+ if ( bcf_write1(args->out_fh, args->aux.hdr, args->missed_line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
-+ }
-+}
-+static void tgt_flush(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec )
-+ {
-+ char *chr = (char*)bcf_seqname(args->aux.hdr,rec);
-+
-+ if ( !args->tgt_itr_prev ) // first record
-+ tgt_flush_region(args,chr,0,rec->pos-1);
-+
-+ else if ( strcmp(chr,args->tgt_itr_prev->seq) ) // first record on a new chromosome
-+ {
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg+1,REGIDX_MAX);
-+ tgt_flush_region(args,chr,0,rec->pos-1);
-+ }
-+ else // another record on the same chromosome
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg,rec->pos-1);
-+ }
-+ else
-+ {
-+ // flush everything
-+ if ( args->tgt_itr_prev )
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg,REGIDX_MAX);
-+
-+ int i, nchr = 0;
-+ char **chr = regidx_seq_names(args->tgt_idx, &nchr);
-+ for (i=0; i<nchr; i++)
-+ tgt_flush_region(args,chr[i],0,REGIDX_MAX);
-+ }
-+}
-+inline static int is_indel(int nals, char **als)
-+{
-+ // This is mpileup output, we can make some assumption:
-+ // - no MNPs
-+ // - "<*>" is not present at indels sites and there are no other symbolic alleles than <*>
-+ if ( als[1][0]=='<' ) return 0;
-+
-+ int i;
-+ for (i=0; i<nals; i++)
-+ {
-+ if ( als[i][0]=='<' ) continue;
-+ if ( als[i][1] ) return 1;
-+ }
-+ return 0;
-+}
-+bcf1_t *next_line(args_t *args)
- {
-- args_t *args = (args_t*) data;
-- call_t *call = &args->aux;
-- bcf1_t *missed = args->missed_line;
-+ bcf1_t *rec = NULL;
-+ if ( !args->vcfbuf )
-+ {
-+ while ( bcf_sr_next_line(args->aux.srs) )
-+ {
-+ rec = args->aux.srs->readers[0].buffer[0];
-+ if ( args->aux.srs->errnum || rec->errcode ) error("Error: could not parse the input VCF\n");
-+ if ( args->tgt_idx )
-+ {
-+ if ( !regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec),rec->pos,rec->pos,args->tgt_itr) ) continue;
-+
-+ // For backward compatibility: require the exact position, not an interval overlap
-+ int pos_match = 0;
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ if ( args->tgt_itr->beg != rec->pos ) continue;
-+ pos_match = 1;
-+ break;
-+ }
-+ if ( !pos_match ) continue;
-+ }
-+ if ( args->samples_map ) bcf_subset(args->aux.hdr, rec, args->nsamples, args->samples_map);
-+ bcf_unpack(rec, BCF_UN_STR);
-+ return rec;
-+ }
-+ return NULL;
-+ }
-+
-+ // If we are here,-C alleles was given and vcfbuf and tgt_idx are set
-+
-+ // Fill the buffer with duplicate lines
-+ int vcfbuf_full = 1;
-+ int nbuf = vcfbuf_nsites(args->vcfbuf);
-+ bcf1_t *rec0 = NULL, *recN = NULL;
-+ if ( nbuf==0 ) vcfbuf_full = 0;
-+ else if ( nbuf==1 )
-+ {
-+ vcfbuf_full = 0;
-+ rec0 = vcfbuf_peek(args->vcfbuf, 0);
-+ }
-+ else
-+ {
-+ rec0 = vcfbuf_peek(args->vcfbuf, 0);
-+ recN = vcfbuf_peek(args->vcfbuf, nbuf-1);
-+ if ( rec0->rid == recN->rid && rec0->pos == recN->pos ) vcfbuf_full = 0;
-+ }
-+ if ( !vcfbuf_full )
-+ {
-+ while ( bcf_sr_next_line(args->aux.srs) )
-+ {
-+ rec = args->aux.srs->readers[0].buffer[0];
-+ if ( args->aux.srs->errnum || rec->errcode ) error("Error: could not parse the input VCF\n");
-+ if ( !regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec),rec->pos,rec->pos,args->tgt_itr) ) continue;
-+ // as above: require the exact position, not an interval overlap
-+ int exact_match = 0;
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ if ( args->tgt_itr->beg != rec->pos ) continue;
-+ exact_match = 1;
-+ break;
-+ }
-+ if ( !exact_match ) continue;
-+
-+ if ( args->samples_map ) bcf_subset(args->aux.hdr, rec, args->nsamples, args->samples_map);
-+ bcf_unpack(rec, BCF_UN_STR);
-+ if ( !rec0 ) rec0 = rec;
-+ recN = rec;
-+ args->aux.srs->readers[0].buffer[0] = vcfbuf_push(args->vcfbuf, rec, 1);
-+ if ( rec0->rid!=recN->rid || rec0->pos!=recN->pos ) break;
-+ }
-+ }
-
-- char *ss = regs->line.s;
-- int i = 0;
-- while ( i<args->aux.srs->targets_als-1 && *ss )
-+ nbuf = vcfbuf_nsites(args->vcfbuf);
-+ int n, i,j;
-+ for (n=nbuf; n>1; n--)
- {
-- if ( *ss=='\t' ) i++;
-- ss++;
-+ recN = vcfbuf_peek(args->vcfbuf, n-1);
-+ if ( rec0->rid==recN->rid && rec0->pos==recN->pos ) break;
- }
-- if ( !*ss ) error("Could not parse: [%s] (%d)\n", regs->line.s,args->aux.srs->targets_als);
-+ if ( n==0 )
-+ {
-+ assert( !nbuf );
-+ return NULL;
-+ }
-+
-+ // Find the VCF and tab record with the best matching combination of alleles, prioritize
-+ // records of the same type (snp vs indel)
-+ rec_tgt_t rec_tgt;
-+ memset(&rec_tgt,0,sizeof(rec_tgt));
-+ regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec0),rec0->pos,rec0->pos,args->tgt_itr);
-+ regitr_t *tmp_itr = regitr_init(args->tgt_idx);
-+ regitr_copy(tmp_itr, args->tgt_itr);
-+ for (i=0; i<n; i++)
-+ {
-+ rec = vcfbuf_peek(args->vcfbuf, i);
-+ int rec_indel = is_indel(rec->n_allele, rec->d.allele) ? 1 : -1;
-+ while ( regitr_overlap(tmp_itr) )
-+ {
-+ if ( tmp_itr->beg != rec->pos ) continue;
-+ tgt_als_t *als = ®itr_payload(tmp_itr,tgt_als_t);
-+ if ( als->used ) continue;
-+ int nmatch_als = 0;
-+ vcmp_t *vcmp = vcmp_init();
-+ int ret = vcmp_set_ref(vcmp, rec->d.allele[0], als->allele[0]);
-+ if ( ret==0 )
-+ {
-+ nmatch_als++;
-+ if ( rec->n_allele > 1 && als->n > 1 )
-+ {
-+ for (j=1; j<als->n; j++)
-+ {
-+ if ( vcmp_find_allele(vcmp, rec->d.allele+1, rec->n_allele-1, als->allele[j])>=0 ) nmatch_als++;
-+ }
-+ }
-+ }
-+ int als_indel = is_indel(als->n, als->allele) ? 1 : -1;
-+ nmatch_als *= rec_indel*als_indel;
-+ if ( nmatch_als > rec_tgt.nmatch_als || !rec_tgt.als )
-+ {
-+ rec_tgt.nmatch_als = nmatch_als;
-+ rec_tgt.als = als;
-+ rec_tgt.ibuf = i;
-+ }
-+ vcmp_destroy(vcmp);
-+ }
-+ }
-+ regitr_destroy(tmp_itr);
-
-- missed->rid = bcf_hdr_name2id(call->hdr,regs->seq_names[regs->prev_seq]);
-- missed->pos = regs->start;
-- bcf_update_alleles_str(call->hdr, missed,ss);
-+ args->aux.tgt_als = rec_tgt.als;
-+ if ( rec_tgt.als ) rec_tgt.als->used = 1;
-
-- bcf_write1(args->out_fh, call->hdr, missed);
-+ rec = vcfbuf_remove(args->vcfbuf, rec_tgt.ibuf);
-+ return rec;
- }
-
- static void init_data(args_t *args)
-@@ -376,22 +611,19 @@
- // Open files for input and output, initialize structures
- if ( args->targets )
- {
-- if ( bcf_sr_set_targets(args->aux.srs, args->targets, args->targets_is_file, args->aux.flag&CALL_CONSTR_ALLELES ? 3 : 0)<0 )
-- error("Failed to read the targets: %s\n", args->targets);
--
-- if ( args->aux.flag&CALL_CONSTR_ALLELES && args->flag&CF_INS_MISSED )
-- {
-- args->aux.srs->targets->missed_reg_handler = print_missed_line;
-- args->aux.srs->targets->missed_reg_data = args;
-- }
-+ args->tgt_idx = regidx_init(args->targets, tgt_parse, args->aux.flag&CALL_CONSTR_ALLELES ? tgt_free : NULL, sizeof(tgt_als_t), args->aux.flag&CALL_CONSTR_ALLELES ? args : NULL);
-+ args->tgt_itr = regitr_init(args->tgt_idx);
-+ args->tgt_itr_tmp = regitr_init(args->tgt_idx);
- }
-+
- if ( args->regions )
- {
- if ( bcf_sr_set_regions(args->aux.srs, args->regions, args->regions_is_file)<0 )
- error("Failed to read the regions: %s\n", args->regions);
- }
-
-- if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) ) error("Failed to open %s: %s\n", args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum));
-+ if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",args->bcf_fname)?"standard input":args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum));
- args->aux.hdr = bcf_sr_get_header(args->aux.srs,0);
-
- int i;
-@@ -451,8 +683,11 @@
- }
- }
-
-+ if ( args->aux.flag & CALL_CONSTR_ALLELES )
-+ args->vcfbuf = vcfbuf_init(args->aux.hdr, 0);
-+
- args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( args->out_fh == NULL ) error("Error: cannot write to \"%s\": %s\n", args->output_fname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
-
- if ( args->flag & CF_QCALL )
-@@ -468,13 +703,21 @@
- bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "I16");
-
- if (args->record_cmd_line) bcf_hdr_append_version(args->aux.hdr, args->argc, args->argv, "bcftools_call");
-- bcf_hdr_write(args->out_fh, args->aux.hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->aux.hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
-
- if ( args->flag&CF_INS_MISSED ) init_missed_line(args);
- }
-
- static void destroy_data(args_t *args)
- {
-+ if ( args->vcfbuf ) vcfbuf_destroy(args->vcfbuf);
-+ if ( args->tgt_idx )
-+ {
-+ regidx_destroy(args->tgt_idx);
-+ regitr_destroy(args->tgt_itr);
-+ regitr_destroy(args->tgt_itr_tmp);
-+ if ( args->tgt_itr_prev ) regitr_destroy(args->tgt_itr_prev);
-+ }
- if ( args->flag & CF_CCALL ) ccall_destroy(&args->aux);
- else if ( args->flag & CF_MCALL ) mcall_destroy(&args->aux);
- else if ( args->flag & CF_QCALL ) qcall_destroy(&args->aux);
-@@ -496,9 +739,10 @@
- free(args->samples_map);
- free(args->sample2sex);
- free(args->aux.ploidy);
-+ free(args->str.s);
- if ( args->gvcf ) gvcf_destroy(args->gvcf);
- bcf_hdr_destroy(args->aux.hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- bcf_sr_destroy(args->aux.srs);
- }
-
-@@ -604,7 +848,7 @@
- static void usage(args_t *args)
- {
- fprintf(stderr, "\n");
-- fprintf(stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with samtools mpileup.\n");
-+ fprintf(stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with bcftools mpileup.\n");
- fprintf(stderr, " This command replaces the former \"bcftools view\" caller. Some of the original\n");
- fprintf(stderr, " functionality has been temporarily lost in the process of transition to htslib,\n");
- fprintf(stderr, " but will be added back on popular demand. The original calling model can be\n");
-@@ -623,12 +867,13 @@
- fprintf(stderr, " -S, --samples-file <file> PED file or a file with an optional column with sex (see man page for details) [all samples]\n");
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Input/output options:\n");
- fprintf(stderr, " -A, --keep-alts keep all possible alternate alleles at variant sites\n");
- fprintf(stderr, " -f, --format-fields <list> output format fields: GQ,GP (lowercase allowed) []\n");
- fprintf(stderr, " -F, --prior-freqs <AN,AC> use prior allele frequencies\n");
-+ fprintf(stderr, " -G, --group-samples <file|-> group samples by population (file with \"sample\\tgroup\") or \"-\" for single-sample calling\n");
- fprintf(stderr, " -g, --gvcf <int>,[...] group non-variant sites into gVCF blocks by minimum per-sample DP\n");
- fprintf(stderr, " -i, --insert-missed output also sites missed by mpileup but present in -T\n");
- fprintf(stderr, " -M, --keep-masked-ref keep sites with masked reference allele (REF=N)\n");
-@@ -642,6 +887,10 @@
- fprintf(stderr, " -n, --novel-rate <float>,[...] likelihood of novel mutation for constrained trio calling, see man page for details [1e-8,1e-9,1e-9]\n");
- fprintf(stderr, " -p, --pval-threshold <float> variant if P(ref|D)<FLOAT with -c [0.5]\n");
- fprintf(stderr, " -P, --prior <float> mutation rate (use bigger for greater sensitivity), use with -m [1.1e-3]\n");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, "Example:\n");
-+ fprintf(stderr, " # See also http://samtools.github.io/bcftools/howtos/variant-calling.html\n");
-+ fprintf(stderr, " bcftools mpileup -f reference.fa alignments.bam | bcftools call -mv -Ob -o calls.bcf\n");
-
- // todo (and more)
- // fprintf(stderr, "\nContrast calling and association test options:\n");
-@@ -680,6 +929,7 @@
- {"format-fields",required_argument,NULL,'f'},
- {"prior-freqs",required_argument,NULL,'F'},
- {"gvcf",required_argument,NULL,'g'},
-+ {"group-samples",required_argument,NULL,'G'},
- {"output",required_argument,NULL,'o'},
- {"output-type",required_argument,NULL,'O'},
- {"regions",required_argument,NULL,'r'},
-@@ -710,7 +960,7 @@
- };
-
- char *tmp = NULL;
-- while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:", loptions, NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:G:", loptions, NULL)) >= 0)
- {
- switch (c)
- {
-@@ -718,6 +968,7 @@
- case 1 : ploidy = optarg; break;
- case 'X': ploidy = "X"; fprintf(stderr,"Warning: -X will be deprecated, please use --ploidy instead.\n"); break;
- case 'Y': ploidy = "Y"; fprintf(stderr,"Warning: -Y will be deprecated, please use --ploidy instead.\n"); break;
-+ case 'G': args.aux.sample_groups = optarg; break;
- case 'f': args.aux.output_tags |= parse_format_flag(optarg); break;
- case 'M': args.flag &= ~CF_ACGT_ONLY; break; // keep sites where REF is N
- case 'N': args.flag |= CF_ACGT_ONLY; break; // omit sites where first base in REF is N (the new default)
-@@ -805,13 +1056,14 @@
- }
- if ( args.flag & CF_INS_MISSED && !(args.aux.flag&CALL_CONSTR_ALLELES) ) error("The -i option requires -C alleles\n");
- if ( args.aux.flag&CALL_VARONLY && args.gvcf ) error("The two options cannot be combined: --variants-only and --gvcf\n");
-+ if ( args.aux.sample_groups && !(args.flag & CF_MCALL) ) error("The -G feature is supported only with the -m calling mode\n");
- init_data(&args);
-
-- while ( bcf_sr_next_line(args.aux.srs) )
-+ bcf1_t *bcf_rec;
-+ while ( (bcf_rec = next_line(&args)) )
- {
-- bcf1_t *bcf_rec = args.aux.srs->readers[0].buffer[0];
-- if ( args.samples_map ) bcf_subset(args.aux.hdr, bcf_rec, args.nsamples, args.samples_map);
-- bcf_unpack(bcf_rec, BCF_UN_STR);
-+ // Skip duplicate positions with all matching `-C alleles -T` used up
-+ if ( args.aux.flag&CALL_CONSTR_ALLELES && !args.aux.tgt_als ) continue;
-
- // Skip unwanted sites
- int i, is_indel = bcf_is_snp(bcf_rec) ? 0 : 1;
-@@ -845,6 +1097,13 @@
- continue;
- }
-
-+ if ( args.flag & CF_INS_MISSED )
-+ {
-+ tgt_flush(&args,bcf_rec);
-+ if ( !args.tgt_itr_prev ) args.tgt_itr_prev = regitr_init(args.tgt_idx);
-+ regitr_copy(args.tgt_itr_prev, args.tgt_itr);
-+ }
-+
- // Calling modes which output VCFs
- int ret;
- if ( args.flag & CF_MCALL )
-@@ -858,11 +1117,10 @@
- if ( (args.aux.flag & CALL_VARONLY) && ret==0 && !args.gvcf ) continue; // not a variant
- if ( args.gvcf )
- bcf_rec = gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, bcf_rec, ret==1?1:0);
-- if ( bcf_rec )
-- bcf_write1(args.out_fh, args.aux.hdr, bcf_rec);
-+ if ( bcf_rec && bcf_write1(args.out_fh, args.aux.hdr, bcf_rec)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args.output_fname);
- }
- if ( args.gvcf ) gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, NULL, 0);
-- if ( args.flag & CF_INS_MISSED ) bcf_sr_regions_flush(args.aux.srs->targets);
-+ if ( args.flag & CF_INS_MISSED ) tgt_flush(&args,NULL);
- destroy_data(&args);
- return 0;
- }
---- python-pysam.orig/bcftools/vcfcall.c.pysam.c
-+++ python-pysam/bcftools/vcfcall.c.pysam.c
-@@ -44,14 +44,11 @@
- #include "prob1.h"
- #include "ploidy.h"
- #include "gvcf.h"
-+#include "regidx.h"
-+#include "vcfbuf.h"
-
- void error(const char *format, ...);
-
--#ifdef _WIN32
--#define srand48(x) srand(x)
--#define lrand48() rand()
--#endif
--
- #define CF_NO_GENO 1
- #define CF_INS_MISSED (1<<1)
- #define CF_CCALL (1<<2)
-@@ -70,6 +67,13 @@
-
- typedef struct
- {
-+ tgt_als_t *als;
-+ int nmatch_als, ibuf;
-+}
-+rec_tgt_t;
-+
-+typedef struct
-+{
- int flag; // combination of CF_* flags above
- int output_type, n_threads, record_cmd_line;
- htsFile *bcf_in, *out_fh;
-@@ -78,6 +82,9 @@
- int nsamples, *samples_map; // mapping from output sample names to original VCF
- char *regions, *targets; // regions to process
- int regions_is_file, targets_is_file;
-+ regidx_t *tgt_idx;
-+ regitr_t *tgt_itr, *tgt_itr_prev, *tgt_itr_tmp;
-+ vcfbuf_t *vcfbuf;
-
- char *samples_fname;
- int samples_is_file;
-@@ -88,6 +95,7 @@
-
- bcf1_t *missed_line;
- call_t aux; // parameters and temporary data
-+ kstring_t str;
-
- int argc;
- char **argv;
-@@ -299,7 +307,7 @@
- if ( ismpl < 0 ) { fprintf(bcftools_stderr,"Warning: No such sample in the VCF: %s\n",ss); continue; }
- if ( old2new[ismpl] != -1 ) { fprintf(bcftools_stderr,"Warning: The sample is listed multiple times: %s\n",ss); continue; }
-
-- ss = se+1;
-+ ss = se+(x != '\0');
- while ( *ss && isspace(*ss) ) ss++;
- if ( !*ss ) ss = "2"; // default ploidy
- se = ss;
-@@ -349,26 +357,253 @@
- bcf_float_set_missing(args->missed_line->qual);
- }
-
--static void print_missed_line(bcf_sr_regions_t *regs, void *data)
-+static int tgt_parse(const char *line, char **chr_beg, char **chr_end, uint32_t *beg, uint32_t *end, void *payload, void *usr)
-+{
-+ char *ss = (char*) line;
-+ while ( *ss && isspace(*ss) ) ss++;
-+ if ( !*ss ) { fprintf(bcftools_stderr,"Could not parse the line: %s\n", line); return -2; }
-+ if ( *ss=='#' ) return -1; // skip comments
-+
-+ char *se = ss;
-+ while ( *se && !isspace(*se) ) se++;
-+
-+ *chr_beg = ss;
-+ *chr_end = se-1;
-+
-+ if ( !*se ) { fprintf(bcftools_stderr,"Could not parse the line: %s\n", line); return -2; }
-+
-+ ss = se+1;
-+ *beg = strtod(ss, &se);
-+ if ( ss==se ) { fprintf(bcftools_stderr,"Could not parse tab line: %s\n", line); return -2; }
-+ if ( *beg==0 ) { fprintf(bcftools_stderr,"Could not parse tab line, expected 1-based coordinate: %s\n", line); return -2; }
-+ (*beg)--;
-+ *end = *beg;
-+
-+ if ( !usr ) return 0; // allele information not required
-+
-+ ss = se+1;
-+ tgt_als_t *als = (tgt_als_t*)payload;
-+ als->used = 0;
-+ als->n = 0;
-+ als->allele = NULL;
-+ while ( *ss )
-+ {
-+ se = ss;
-+ while ( *se && *se!=',' ) se++;
-+ als->n++;
-+ als->allele = (char**)realloc(als->allele,als->n*sizeof(*als->allele));
-+ als->allele[als->n-1] = (char*)malloc(se-ss+1);
-+ memcpy(als->allele[als->n-1],ss,se-ss);
-+ als->allele[als->n-1][se-ss] = 0;
-+ ss = se+1;
-+ if ( !*se ) break;
-+ }
-+ return 0;
-+}
-+static void tgt_free(void *payload)
-+{
-+ tgt_als_t *als = (tgt_als_t*)payload;
-+ int i;
-+ for (i=0; i<als->n; i++) free(als->allele[i]);
-+ free(als->allele);
-+}
-+static void tgt_flush_region(args_t *args, char *chr, uint32_t beg, uint32_t end)
-+{
-+ if ( !regidx_overlap(args->tgt_idx, chr,beg,end,args->tgt_itr_tmp) ) return;
-+ while ( regitr_overlap(args->tgt_itr_tmp) )
-+ {
-+ if ( args->tgt_itr_tmp->beg < beg ) continue;
-+
-+ tgt_als_t *tgt_als = ®itr_payload(args->tgt_itr_tmp,tgt_als_t);
-+ if ( tgt_als->used ) continue;
-+
-+ args->missed_line->rid = bcf_hdr_name2id(args->aux.hdr,chr);
-+ args->missed_line->pos = args->tgt_itr_tmp->beg;
-+ bcf_unpack(args->missed_line,BCF_UN_ALL);
-+ bcf_update_alleles(args->aux.hdr, args->missed_line, (const char**)tgt_als->allele, tgt_als->n);
-+ tgt_als->used = 1;
-+ if ( bcf_write1(args->out_fh, args->aux.hdr, args->missed_line)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args->output_fname);
-+ }
-+}
-+static void tgt_flush(args_t *args, bcf1_t *rec)
-+{
-+ if ( rec )
-+ {
-+ char *chr = (char*)bcf_seqname(args->aux.hdr,rec);
-+
-+ if ( !args->tgt_itr_prev ) // first record
-+ tgt_flush_region(args,chr,0,rec->pos-1);
-+
-+ else if ( strcmp(chr,args->tgt_itr_prev->seq) ) // first record on a new chromosome
-+ {
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg+1,REGIDX_MAX);
-+ tgt_flush_region(args,chr,0,rec->pos-1);
-+ }
-+ else // another record on the same chromosome
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg,rec->pos-1);
-+ }
-+ else
-+ {
-+ // flush everything
-+ if ( args->tgt_itr_prev )
-+ tgt_flush_region(args,args->tgt_itr_prev->seq,args->tgt_itr_prev->beg,REGIDX_MAX);
-+
-+ int i, nchr = 0;
-+ char **chr = regidx_seq_names(args->tgt_idx, &nchr);
-+ for (i=0; i<nchr; i++)
-+ tgt_flush_region(args,chr[i],0,REGIDX_MAX);
-+ }
-+}
-+inline static int is_indel(int nals, char **als)
-+{
-+ // This is mpileup output, we can make some assumption:
-+ // - no MNPs
-+ // - "<*>" is not present at indels sites and there are no other symbolic alleles than <*>
-+ if ( als[1][0]=='<' ) return 0;
-+
-+ int i;
-+ for (i=0; i<nals; i++)
-+ {
-+ if ( als[i][0]=='<' ) continue;
-+ if ( als[i][1] ) return 1;
-+ }
-+ return 0;
-+}
-+bcf1_t *next_line(args_t *args)
- {
-- args_t *args = (args_t*) data;
-- call_t *call = &args->aux;
-- bcf1_t *missed = args->missed_line;
-+ bcf1_t *rec = NULL;
-+ if ( !args->vcfbuf )
-+ {
-+ while ( bcf_sr_next_line(args->aux.srs) )
-+ {
-+ rec = args->aux.srs->readers[0].buffer[0];
-+ if ( args->aux.srs->errnum || rec->errcode ) error("Error: could not parse the input VCF\n");
-+ if ( args->tgt_idx )
-+ {
-+ if ( !regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec),rec->pos,rec->pos,args->tgt_itr) ) continue;
-+
-+ // For backward compatibility: require the exact position, not an interval overlap
-+ int pos_match = 0;
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ if ( args->tgt_itr->beg != rec->pos ) continue;
-+ pos_match = 1;
-+ break;
-+ }
-+ if ( !pos_match ) continue;
-+ }
-+ if ( args->samples_map ) bcf_subset(args->aux.hdr, rec, args->nsamples, args->samples_map);
-+ bcf_unpack(rec, BCF_UN_STR);
-+ return rec;
-+ }
-+ return NULL;
-+ }
-+
-+ // If we are here,-C alleles was given and vcfbuf and tgt_idx are set
-+
-+ // Fill the buffer with duplicate lines
-+ int vcfbuf_full = 1;
-+ int nbuf = vcfbuf_nsites(args->vcfbuf);
-+ bcf1_t *rec0 = NULL, *recN = NULL;
-+ if ( nbuf==0 ) vcfbuf_full = 0;
-+ else if ( nbuf==1 )
-+ {
-+ vcfbuf_full = 0;
-+ rec0 = vcfbuf_peek(args->vcfbuf, 0);
-+ }
-+ else
-+ {
-+ rec0 = vcfbuf_peek(args->vcfbuf, 0);
-+ recN = vcfbuf_peek(args->vcfbuf, nbuf-1);
-+ if ( rec0->rid == recN->rid && rec0->pos == recN->pos ) vcfbuf_full = 0;
-+ }
-+ if ( !vcfbuf_full )
-+ {
-+ while ( bcf_sr_next_line(args->aux.srs) )
-+ {
-+ rec = args->aux.srs->readers[0].buffer[0];
-+ if ( args->aux.srs->errnum || rec->errcode ) error("Error: could not parse the input VCF\n");
-+ if ( !regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec),rec->pos,rec->pos,args->tgt_itr) ) continue;
-+ // as above: require the exact position, not an interval overlap
-+ int exact_match = 0;
-+ while ( regitr_overlap(args->tgt_itr) )
-+ {
-+ if ( args->tgt_itr->beg != rec->pos ) continue;
-+ exact_match = 1;
-+ break;
-+ }
-+ if ( !exact_match ) continue;
-+
-+ if ( args->samples_map ) bcf_subset(args->aux.hdr, rec, args->nsamples, args->samples_map);
-+ bcf_unpack(rec, BCF_UN_STR);
-+ if ( !rec0 ) rec0 = rec;
-+ recN = rec;
-+ args->aux.srs->readers[0].buffer[0] = vcfbuf_push(args->vcfbuf, rec, 1);
-+ if ( rec0->rid!=recN->rid || rec0->pos!=recN->pos ) break;
-+ }
-+ }
-
-- char *ss = regs->line.s;
-- int i = 0;
-- while ( i<args->aux.srs->targets_als-1 && *ss )
-+ nbuf = vcfbuf_nsites(args->vcfbuf);
-+ int n, i,j;
-+ for (n=nbuf; n>1; n--)
- {
-- if ( *ss=='\t' ) i++;
-- ss++;
-+ recN = vcfbuf_peek(args->vcfbuf, n-1);
-+ if ( rec0->rid==recN->rid && rec0->pos==recN->pos ) break;
- }
-- if ( !*ss ) error("Could not parse: [%s] (%d)\n", regs->line.s,args->aux.srs->targets_als);
-+ if ( n==0 )
-+ {
-+ assert( !nbuf );
-+ return NULL;
-+ }
-+
-+ // Find the VCF and tab record with the best matching combination of alleles, prioritize
-+ // records of the same type (snp vs indel)
-+ rec_tgt_t rec_tgt;
-+ memset(&rec_tgt,0,sizeof(rec_tgt));
-+ regidx_overlap(args->tgt_idx, bcf_seqname(args->aux.hdr,rec0),rec0->pos,rec0->pos,args->tgt_itr);
-+ regitr_t *tmp_itr = regitr_init(args->tgt_idx);
-+ regitr_copy(tmp_itr, args->tgt_itr);
-+ for (i=0; i<n; i++)
-+ {
-+ rec = vcfbuf_peek(args->vcfbuf, i);
-+ int rec_indel = is_indel(rec->n_allele, rec->d.allele) ? 1 : -1;
-+ while ( regitr_overlap(tmp_itr) )
-+ {
-+ if ( tmp_itr->beg != rec->pos ) continue;
-+ tgt_als_t *als = ®itr_payload(tmp_itr,tgt_als_t);
-+ if ( als->used ) continue;
-+ int nmatch_als = 0;
-+ vcmp_t *vcmp = vcmp_init();
-+ int ret = vcmp_set_ref(vcmp, rec->d.allele[0], als->allele[0]);
-+ if ( ret==0 )
-+ {
-+ nmatch_als++;
-+ if ( rec->n_allele > 1 && als->n > 1 )
-+ {
-+ for (j=1; j<als->n; j++)
-+ {
-+ if ( vcmp_find_allele(vcmp, rec->d.allele+1, rec->n_allele-1, als->allele[j])>=0 ) nmatch_als++;
-+ }
-+ }
-+ }
-+ int als_indel = is_indel(als->n, als->allele) ? 1 : -1;
-+ nmatch_als *= rec_indel*als_indel;
-+ if ( nmatch_als > rec_tgt.nmatch_als || !rec_tgt.als )
-+ {
-+ rec_tgt.nmatch_als = nmatch_als;
-+ rec_tgt.als = als;
-+ rec_tgt.ibuf = i;
-+ }
-+ vcmp_destroy(vcmp);
-+ }
-+ }
-+ regitr_destroy(tmp_itr);
-
-- missed->rid = bcf_hdr_name2id(call->hdr,regs->seq_names[regs->prev_seq]);
-- missed->pos = regs->start;
-- bcf_update_alleles_str(call->hdr, missed,ss);
-+ args->aux.tgt_als = rec_tgt.als;
-+ if ( rec_tgt.als ) rec_tgt.als->used = 1;
-
-- bcf_write1(args->out_fh, call->hdr, missed);
-+ rec = vcfbuf_remove(args->vcfbuf, rec_tgt.ibuf);
-+ return rec;
- }
-
- static void init_data(args_t *args)
-@@ -378,22 +613,19 @@
- // Open files for input and output, initialize structures
- if ( args->targets )
- {
-- if ( bcf_sr_set_targets(args->aux.srs, args->targets, args->targets_is_file, args->aux.flag&CALL_CONSTR_ALLELES ? 3 : 0)<0 )
-- error("Failed to read the targets: %s\n", args->targets);
--
-- if ( args->aux.flag&CALL_CONSTR_ALLELES && args->flag&CF_INS_MISSED )
-- {
-- args->aux.srs->targets->missed_reg_handler = print_missed_line;
-- args->aux.srs->targets->missed_reg_data = args;
-- }
-+ args->tgt_idx = regidx_init(args->targets, tgt_parse, args->aux.flag&CALL_CONSTR_ALLELES ? tgt_free : NULL, sizeof(tgt_als_t), args->aux.flag&CALL_CONSTR_ALLELES ? args : NULL);
-+ args->tgt_itr = regitr_init(args->tgt_idx);
-+ args->tgt_itr_tmp = regitr_init(args->tgt_idx);
- }
-+
- if ( args->regions )
- {
- if ( bcf_sr_set_regions(args->aux.srs, args->regions, args->regions_is_file)<0 )
- error("Failed to read the regions: %s\n", args->regions);
- }
-
-- if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) ) error("Failed to open %s: %s\n", args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum));
-+ if ( !bcf_sr_add_reader(args->aux.srs, args->bcf_fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",args->bcf_fname)?"standard input":args->bcf_fname,bcf_sr_strerror(args->aux.srs->errnum));
- args->aux.hdr = bcf_sr_get_header(args->aux.srs,0);
-
- int i;
-@@ -453,8 +685,11 @@
- }
- }
-
-+ if ( args->aux.flag & CALL_CONSTR_ALLELES )
-+ args->vcfbuf = vcfbuf_init(args->aux.hdr, 0);
-+
- args->out_fh = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-+ if ( args->out_fh == NULL ) error("Error: cannot write to \"%s\": %s\n", args->output_fname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
-
- if ( args->flag & CF_QCALL )
-@@ -470,13 +705,21 @@
- bcf_hdr_remove(args->aux.hdr, BCF_HL_INFO, "I16");
-
- if (args->record_cmd_line) bcf_hdr_append_version(args->aux.hdr, args->argc, args->argv, "bcftools_call");
-- bcf_hdr_write(args->out_fh, args->aux.hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->aux.hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
-
- if ( args->flag&CF_INS_MISSED ) init_missed_line(args);
- }
-
- static void destroy_data(args_t *args)
- {
-+ if ( args->vcfbuf ) vcfbuf_destroy(args->vcfbuf);
-+ if ( args->tgt_idx )
-+ {
-+ regidx_destroy(args->tgt_idx);
-+ regitr_destroy(args->tgt_itr);
-+ regitr_destroy(args->tgt_itr_tmp);
-+ if ( args->tgt_itr_prev ) regitr_destroy(args->tgt_itr_prev);
-+ }
- if ( args->flag & CF_CCALL ) ccall_destroy(&args->aux);
- else if ( args->flag & CF_MCALL ) mcall_destroy(&args->aux);
- else if ( args->flag & CF_QCALL ) qcall_destroy(&args->aux);
-@@ -498,9 +741,10 @@
- free(args->samples_map);
- free(args->sample2sex);
- free(args->aux.ploidy);
-+ free(args->str.s);
- if ( args->gvcf ) gvcf_destroy(args->gvcf);
- bcf_hdr_destroy(args->aux.hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- bcf_sr_destroy(args->aux.srs);
- }
-
-@@ -606,7 +850,7 @@
- static void usage(args_t *args)
- {
- fprintf(bcftools_stderr, "\n");
-- fprintf(bcftools_stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with samtools mpileup.\n");
-+ fprintf(bcftools_stderr, "About: SNP/indel variant calling from VCF/BCF. To be used in conjunction with bcftools mpileup.\n");
- fprintf(bcftools_stderr, " This command replaces the former \"bcftools view\" caller. Some of the original\n");
- fprintf(bcftools_stderr, " functionality has been temporarily lost in the process of transition to htslib,\n");
- fprintf(bcftools_stderr, " but will be added back on popular demand. The original calling model can be\n");
-@@ -625,12 +869,13 @@
- fprintf(bcftools_stderr, " -S, --samples-file <file> PED file or a file with an optional column with sex (see man page for details) [all samples]\n");
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Input/output options:\n");
- fprintf(bcftools_stderr, " -A, --keep-alts keep all possible alternate alleles at variant sites\n");
- fprintf(bcftools_stderr, " -f, --format-fields <list> output format fields: GQ,GP (lowercase allowed) []\n");
- fprintf(bcftools_stderr, " -F, --prior-freqs <AN,AC> use prior allele frequencies\n");
-+ fprintf(bcftools_stderr, " -G, --group-samples <file|-> group samples by population (file with \"sample\\tgroup\") or \"-\" for single-sample calling\n");
- fprintf(bcftools_stderr, " -g, --gvcf <int>,[...] group non-variant sites into gVCF blocks by minimum per-sample DP\n");
- fprintf(bcftools_stderr, " -i, --insert-missed output also sites missed by mpileup but present in -T\n");
- fprintf(bcftools_stderr, " -M, --keep-masked-ref keep sites with masked reference allele (REF=N)\n");
-@@ -644,6 +889,10 @@
- fprintf(bcftools_stderr, " -n, --novel-rate <float>,[...] likelihood of novel mutation for constrained trio calling, see man page for details [1e-8,1e-9,1e-9]\n");
- fprintf(bcftools_stderr, " -p, --pval-threshold <float> variant if P(ref|D)<FLOAT with -c [0.5]\n");
- fprintf(bcftools_stderr, " -P, --prior <float> mutation rate (use bigger for greater sensitivity), use with -m [1.1e-3]\n");
-+ fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, "Example:\n");
-+ fprintf(bcftools_stderr, " # See also http://samtools.github.io/bcftools/howtos/variant-calling.html\n");
-+ fprintf(bcftools_stderr, " bcftools mpileup -f reference.fa alignments.bam | bcftools call -mv -Ob -o calls.bcf\n");
-
- // todo (and more)
- // fprintf(bcftools_stderr, "\nContrast calling and association test options:\n");
-@@ -682,6 +931,7 @@
- {"format-fields",required_argument,NULL,'f'},
- {"prior-freqs",required_argument,NULL,'F'},
- {"gvcf",required_argument,NULL,'g'},
-+ {"group-samples",required_argument,NULL,'G'},
- {"output",required_argument,NULL,'o'},
- {"output-type",required_argument,NULL,'O'},
- {"regions",required_argument,NULL,'r'},
-@@ -712,7 +962,7 @@
- };
-
- char *tmp = NULL;
-- while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:", loptions, NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h?o:O:r:R:s:S:t:T:ANMV:vcmp:C:n:P:f:ig:XYF:G:", loptions, NULL)) >= 0)
- {
- switch (c)
- {
-@@ -720,6 +970,7 @@
- case 1 : ploidy = optarg; break;
- case 'X': ploidy = "X"; fprintf(bcftools_stderr,"Warning: -X will be deprecated, please use --ploidy instead.\n"); break;
- case 'Y': ploidy = "Y"; fprintf(bcftools_stderr,"Warning: -Y will be deprecated, please use --ploidy instead.\n"); break;
-+ case 'G': args.aux.sample_groups = optarg; break;
- case 'f': args.aux.output_tags |= parse_format_flag(optarg); break;
- case 'M': args.flag &= ~CF_ACGT_ONLY; break; // keep sites where REF is N
- case 'N': args.flag |= CF_ACGT_ONLY; break; // omit sites where first base in REF is N (the new default)
-@@ -807,13 +1058,14 @@
- }
- if ( args.flag & CF_INS_MISSED && !(args.aux.flag&CALL_CONSTR_ALLELES) ) error("The -i option requires -C alleles\n");
- if ( args.aux.flag&CALL_VARONLY && args.gvcf ) error("The two options cannot be combined: --variants-only and --gvcf\n");
-+ if ( args.aux.sample_groups && !(args.flag & CF_MCALL) ) error("The -G feature is supported only with the -m calling mode\n");
- init_data(&args);
-
-- while ( bcf_sr_next_line(args.aux.srs) )
-+ bcf1_t *bcf_rec;
-+ while ( (bcf_rec = next_line(&args)) )
- {
-- bcf1_t *bcf_rec = args.aux.srs->readers[0].buffer[0];
-- if ( args.samples_map ) bcf_subset(args.aux.hdr, bcf_rec, args.nsamples, args.samples_map);
-- bcf_unpack(bcf_rec, BCF_UN_STR);
-+ // Skip duplicate positions with all matching `-C alleles -T` used up
-+ if ( args.aux.flag&CALL_CONSTR_ALLELES && !args.aux.tgt_als ) continue;
-
- // Skip unwanted sites
- int i, is_indel = bcf_is_snp(bcf_rec) ? 0 : 1;
-@@ -847,6 +1099,13 @@
- continue;
- }
-
-+ if ( args.flag & CF_INS_MISSED )
-+ {
-+ tgt_flush(&args,bcf_rec);
-+ if ( !args.tgt_itr_prev ) args.tgt_itr_prev = regitr_init(args.tgt_idx);
-+ regitr_copy(args.tgt_itr_prev, args.tgt_itr);
-+ }
-+
- // Calling modes which output VCFs
- int ret;
- if ( args.flag & CF_MCALL )
-@@ -860,11 +1119,10 @@
- if ( (args.aux.flag & CALL_VARONLY) && ret==0 && !args.gvcf ) continue; // not a variant
- if ( args.gvcf )
- bcf_rec = gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, bcf_rec, ret==1?1:0);
-- if ( bcf_rec )
-- bcf_write1(args.out_fh, args.aux.hdr, bcf_rec);
-+ if ( bcf_rec && bcf_write1(args.out_fh, args.aux.hdr, bcf_rec)!=0 ) error("[%s] Error: failed to write to %s\n", __func__,args.output_fname);
- }
- if ( args.gvcf ) gvcf_write(args.gvcf, args.out_fh, args.aux.hdr, NULL, 0);
-- if ( args.flag & CF_INS_MISSED ) bcf_sr_regions_flush(args.aux.srs->targets);
-+ if ( args.flag & CF_INS_MISSED ) tgt_flush(&args,NULL);
- destroy_data(&args);
- return 0;
- }
---- python-pysam.orig/bcftools/vcfcnv.c
-+++ python-pysam/bcftools/vcfcnv.c
-@@ -34,6 +34,7 @@
- #include <unistd.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kstring.h>
-@@ -226,9 +227,9 @@
- }
- static void close_sample_files(sample_t *smpl)
- {
-- fclose(smpl->dat_fh);
-- fclose(smpl->cn_fh);
-- fclose(smpl->summary_fh);
-+ if ( fclose(smpl->dat_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->dat_fname);
-+ if ( fclose(smpl->cn_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->cn_fname);
-+ if ( fclose(smpl->summary_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->summary_fname);
- }
-
- static double norm_cdf(double mean, double dev);
-@@ -1190,10 +1191,10 @@
- args->control_sample.lrr[args->nsites-1] = lrr2;
- args->control_sample.baf[args->nsites-1] = baf2;
- if ( baf2>=0 ) // skip missing values
-- fprintf(args->control_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf2,lrr2);
-+ fprintf(args->control_sample.dat_fh,"%s\t%"PRId64"\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), (int64_t) line->pos+1,baf2,lrr2);
- }
- if ( baf1>=0 ) // skip missing values
-- fprintf(args->query_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf1,lrr1);
-+ fprintf(args->query_sample.dat_fh,"%s\t%"PRId64"\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), (int64_t) line->pos+1,baf1,lrr1);
-
- if ( baf1>=0 )
- {
-@@ -1277,13 +1278,13 @@
- {"LRR-weight",1,0,'l'},
- {"same-prob",1,0,'P'},
- {"xy-prob",1,0,'x'},
-- {"sample",1,0,'s'},
-- {"control",1,0,'c'},
-+ {"query-sample",1,0,'s'},
-+ {"control-sample",1,0,'c'},
- {"targets",1,0,'t'},
- {"targets-file",1,0,'T'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
-- {"plot",1,0,'p'},
-+ {"plot-threshold",1,0,'p'},
- {"output-dir",1,0,'o'},
- {0,0,0,0}
- };
-@@ -1399,7 +1400,8 @@
- if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 )
- error("Failed to read the targets: %s\n", args->af_fname);
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
---- python-pysam.orig/bcftools/vcfcnv.c.pysam.c
-+++ python-pysam/bcftools/vcfcnv.c.pysam.c
-@@ -36,6 +36,7 @@
- #include <unistd.h>
- #include <getopt.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kstring.h>
-@@ -228,9 +229,9 @@
- }
- static void close_sample_files(sample_t *smpl)
- {
-- fclose(smpl->dat_fh);
-- fclose(smpl->cn_fh);
-- fclose(smpl->summary_fh);
-+ if ( fclose(smpl->dat_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->dat_fname);
-+ if ( fclose(smpl->cn_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->cn_fname);
-+ if ( fclose(smpl->summary_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,smpl->summary_fname);
- }
-
- static double norm_cdf(double mean, double dev);
-@@ -1192,10 +1193,10 @@
- args->control_sample.lrr[args->nsites-1] = lrr2;
- args->control_sample.baf[args->nsites-1] = baf2;
- if ( baf2>=0 ) // skip missing values
-- fprintf(args->control_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf2,lrr2);
-+ fprintf(args->control_sample.dat_fh,"%s\t%"PRId64"\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), (int64_t) line->pos+1,baf2,lrr2);
- }
- if ( baf1>=0 ) // skip missing values
-- fprintf(args->query_sample.dat_fh,"%s\t%d\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), line->pos+1,baf1,lrr1);
-+ fprintf(args->query_sample.dat_fh,"%s\t%"PRId64"\t%.3f\t%.3f\n",bcf_hdr_id2name(args->hdr,args->prev_rid), (int64_t) line->pos+1,baf1,lrr1);
-
- if ( baf1>=0 )
- {
-@@ -1279,13 +1280,13 @@
- {"LRR-weight",1,0,'l'},
- {"same-prob",1,0,'P'},
- {"xy-prob",1,0,'x'},
-- {"sample",1,0,'s'},
-- {"control",1,0,'c'},
-+ {"query-sample",1,0,'s'},
-+ {"control-sample",1,0,'c'},
- {"targets",1,0,'t'},
- {"targets-file",1,0,'T'},
- {"regions",1,0,'r'},
- {"regions-file",1,0,'R'},
-- {"plot",1,0,'p'},
-+ {"plot-threshold",1,0,'p'},
- {"output-dir",1,0,'o'},
- {0,0,0,0}
- };
-@@ -1401,7 +1402,8 @@
- if ( bcf_sr_set_targets(args->files, args->af_fname, 1, 3)<0 )
- error("Failed to read the targets: %s\n", args->af_fname);
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
---- python-pysam.orig/bcftools/vcfconcat.c
-+++ python-pysam/bcftools/vcfconcat.c
-@@ -1,6 +1,6 @@
- /* vcfconcat.c -- Concatenate or combine VCF/BCF files.
-
-- Copyright (C) 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -34,6 +34,8 @@
- #include <htslib/kseq.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h> // for hts_get_bgzfp()
-+#include <htslib/thread_pool.h>
-+#include <sys/time.h>
- #include "bcftools.h"
-
- typedef struct _args_t
-@@ -53,7 +55,9 @@
-
- char **argv, *output_fname, *file_list, **fnames, *remove_dups, *regions_list;
- int argc, nfnames, allow_overlaps, phased_concat, regions_is_file;
-- int compact_PS, phase_set_changed, naive_concat;
-+ int compact_PS, phase_set_changed, naive_concat, naive_concat_trust_headers;
-+ int verbose;
-+ htsThreadPool *tpool;
- }
- args_t;
-
-@@ -70,6 +74,7 @@
- line = bcf_init();
- }
-
-+ if ( args->verbose ) fprintf(stderr,"Checking the headers and starting positions of %d files\n", args->nfnames);
- kstring_t str = {0,0,0};
- int i, prev_chrid = -1;
- for (i=0; i<args->nfnames; i++)
-@@ -97,7 +102,7 @@
- }
- }
- bcf_hdr_destroy(hdr);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fnames[i]);
- }
- free(str.s);
- if ( line ) bcf_destroy(line);
-@@ -112,14 +117,30 @@
- if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_concat");
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
--
-- bcf_hdr_write(args->out_fh, args->out_hdr);
--
-- if ( args->allow_overlaps )
-+ if ( args->allow_overlaps || args->phased_concat )
- {
- args->files = bcf_sr_init();
- args->files->require_index = 1;
-+ }
-+ if ( args->n_threads )
-+ {
-+ if ( args->files )
-+ {
-+ if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-+ args->tpool = args->files->p;
-+ }
-+ else
-+ {
-+ args->tpool = (htsThreadPool*) calloc(1, sizeof(htsThreadPool));
-+ if ( !args->tpool ) error("Failed to allocate memory\n");
-+ if ( !(args->tpool->pool = hts_tpool_init(args->n_threads)) ) error("Failed to initialize %d threads\n",args->n_threads);
-+ }
-+ hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->tpool);
-+ }
-+ if ( bcf_hdr_write(args->out_fh, args->out_hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
-+
-+ if ( args->allow_overlaps )
-+ {
- if ( args->regions_list )
- {
- if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 )
-@@ -167,8 +188,6 @@
- args->nmism = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int));
- args->phase_qual = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t));
- args->phase_set = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t));
-- args->files = bcf_sr_init();
-- args->files->require_index = 1;
- args->ifname = 0;
- }
- }
-@@ -176,13 +195,16 @@
- static void destroy_data(args_t *args)
- {
- int i;
-- for (i=0; i<args->nfnames; i++) free(args->fnames[i]);
-- free(args->fnames);
-- if ( args->files ) bcf_sr_destroy(args->files);
- if ( args->out_fh )
- {
- if ( hts_close(args->out_fh)!=0 ) error("hts_close error\n");
- }
-+ if ( args->tpool && !args->files )
-+ {
-+ hts_tpool_destroy(args->tpool->pool);
-+ free(args->tpool);
-+ }
-+ if ( args->files ) bcf_sr_destroy(args->files);
- if ( args->out_hdr ) bcf_hdr_destroy(args->out_hdr);
- free(args->seen_seq);
- free(args->start_pos);
-@@ -195,6 +217,8 @@
- free(args->nmism);
- free(args->phase_qual);
- free(args->phase_set);
-+ for (i=0; i<args->nfnames; i++) free(args->fnames[i]);
-+ free(args->fnames);
- }
-
- int vcf_write_line(htsFile *fp, kstring_t *line);
-@@ -235,7 +259,7 @@
- {
- if ( !gt_absent_warned )
- {
-- fprintf(stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), arec->pos+1);
-+ fprintf(stderr,"GT is not present at %s:%"PRId64". (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), (int64_t) arec->pos+1);
- gt_absent_warned = 1;
- }
- continue;
-@@ -246,7 +270,7 @@
- {
- if ( !gt_absent_warned )
- {
-- fprintf(stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), brec->pos+1);
-+ fprintf(stderr,"GT is not present at %s:%"PRId64". (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), (int64_t) brec->pos+1);
- gt_absent_warned = 1;
- }
- continue;
-@@ -282,9 +306,9 @@
- bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, arec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, arec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
-- if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1,args->prev_pos_check+1);
-+ if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%"PRId64" vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),(int64_t) arec->pos+1,args->prev_pos_check+1);
- args->prev_pos_check = arec->pos;
- }
- args->nswap = 0;
-@@ -332,9 +356,9 @@
- bcf_update_format_int32(args->out_hdr,brec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, brec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, brec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
-- if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1,args->prev_pos_check+1);
-+ if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%"PRId64" vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),(int64_t) brec->pos+1,args->prev_pos_check+1);
- args->prev_pos_check = brec->pos;
- }
- args->nbuf = 0;
-@@ -343,9 +367,9 @@
- static void phased_push(args_t *args, bcf1_t *arec, bcf1_t *brec)
- {
- if ( arec && arec->errcode )
-- error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1, args->files->readers[0].fname);
-+ error("Parse error at %s:%"PRId64", cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),(int64_t) arec->pos+1, args->files->readers[0].fname);
- if ( brec && brec->errcode )
-- error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1, args->files->readers[1].fname);
-+ error("Parse error at %s:%"PRId64", cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),(int64_t) brec->pos+1, args->files->readers[1].fname);
-
- int i, nsmpl = bcf_hdr_nsamples(args->out_hdr);
- int chr_id = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,arec));
-@@ -373,10 +397,10 @@
- bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, arec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, arec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- if ( arec->pos < args->prev_pos_check )
-- error("FIXME, disorder: %s:%d in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1);
-+ error("FIXME, disorder: %s:%"PRId64" in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), (int64_t) arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1);
- args->prev_pos_check = arec->pos;
- return;
- }
-@@ -393,6 +417,7 @@
-
- static void concat(args_t *args)
- {
-+ static int site_drop_warned = 0;
- int i;
- if ( args->phased_concat ) // phased concat
- {
-@@ -429,8 +454,20 @@
- if ( !bcf_sr_has_line(args->files,0) ) // no input from the first reader
- {
- // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped
-- if ( ! bcf_sr_region_done(args->files,0) ) continue;
--
-+ if ( ! bcf_sr_region_done(args->files,0) )
-+ {
-+ if ( !site_drop_warned )
-+ {
-+ fprintf(stderr,
-+ "Warning: Dropping the site %s:%"PRId64". The --ligate option is intended for VCFs with perfect\n"
-+ " overlap, sites in overlapping regions present in one but missing in other are dropped.\n"
-+ " This warning is printed only once.\n",
-+ bcf_seqname(bcf_sr_get_header(args->files,1),bcf_sr_get_line(args->files,1)), (int64_t) bcf_sr_get_line(args->files,1)->pos+1
-+ );
-+ site_drop_warned = 1;
-+ }
-+ continue;
-+ }
- phased_flush(args);
- bcf_sr_remove_reader(args->files, 0);
- }
-@@ -483,20 +520,27 @@
- bcf1_t *line = bcf_sr_get_line(args->files,i);
- if ( !line ) continue;
- bcf_translate(args->out_hdr, args->files->readers[i].header, line);
-- bcf_write1(args->out_fh, args->out_hdr, line);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->remove_dups ) break;
- }
- }
- }
- else // concatenating
- {
-+ struct timeval t0, t1;
- kstring_t tmp = {0,0,0};
- int prev_chr_id = -1, prev_pos;
- bcf1_t *line = bcf_init();
- for (i=0; i<args->nfnames; i++)
- {
-- htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]);
-- bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]);
-+ if ( args->verbose )
-+ {
-+ fprintf(stderr,"Concatenating %s", args->fnames[i]);
-+ gettimeofday(&t0, NULL);
-+ }
-+ htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("\nFailed to open: %s\n", args->fnames[i]);
-+ if ( args->n_threads ) hts_set_opt(fp, HTS_OPT_THREAD_POOL, args->tpool);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("\nFailed to parse header: %s\n", args->fnames[i]);
- if ( !fp->is_bin && args->output_type&FT_VCF )
- {
- line->max_unpack = BCF_UN_STR;
-@@ -508,7 +552,7 @@
- tmp.l = 0;
- kputsn(fp->line.s,str-fp->line.s,&tmp);
- int chr_id = bcf_hdr_name2id(args->out_hdr, tmp.s);
-- if ( chr_id<0 ) error("The sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]);
-+ if ( chr_id<0 ) error("\nThe sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]);
- if ( prev_chr_id!=chr_id )
- {
- prev_pos = -1;
-@@ -519,11 +563,11 @@
- int pos = strtol(str+1,&end,10) - 1;
- if ( end==str+1 ) error("Could not parse line: %s\n", fp->line.s);
- if ( prev_pos > pos )
-- error("The chromosome block %s is not sorted, consider running with -a.\n", tmp.s);
-+ error("\nThe chromosome block %s is not sorted, consider running with -a.\n", tmp.s);
- args->seen_seq[chr_id] = 1;
- prev_chr_id = chr_id;
-
-- if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("Failed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
-+ if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("\nFailed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
- }
- }
- else
-@@ -541,15 +585,21 @@
- error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
- }
- if ( prev_pos > line->pos )
-- error("The chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
-+ error("\nThe chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
- args->seen_seq[line->rid] = 1;
- prev_chr_id = line->rid;
-
-- if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("Failed to write\n");
-+ if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("\nFailed to write\n");
- }
- }
- bcf_hdr_destroy(hdr);
- hts_close(fp);
-+ if ( args->verbose )
-+ {
-+ gettimeofday(&t1, NULL);
-+ double delta = (t1.tv_sec - t0.tv_sec) * 1e6 + (t1.tv_usec - t0.tv_usec);
-+ fprintf(stderr,"\t%f seconds\n",delta/1e6);
-+ }
- }
- bcf_destroy(line);
- free(tmp.s);
-@@ -612,63 +662,141 @@
- && header[12] == 'B' && header[13] == 'C'
- && unpackInt16((uint8_t*)&header[14]) == 2) ? 0 : -1;
- }
-+static void _check_hrecs(const bcf_hdr_t *hdr0, const bcf_hdr_t *hdr, char *fname0, char *fname)
-+{
-+ int j;
-+ for (j=0; j<hdr0->nhrec; j++)
-+ {
-+ bcf_hrec_t *hrec0 = hdr0->hrec[j];
-+ if ( hrec0->type!=BCF_HL_FLT && hrec0->type!=BCF_HL_INFO && hrec0->type!=BCF_HL_FMT && hrec0->type!=BCF_HL_CTG ) continue; // skip fiels w/o IDX
-+ int itag = bcf_hrec_find_key(hrec0, "ID");
-+ bcf_hrec_t *hrec = bcf_hdr_get_hrec(hdr, hrec0->type, "ID", hrec0->vals[itag], NULL);
-+
-+ char *type = NULL;
-+ if ( hrec0->type==BCF_HL_FLT ) type = "FILTER";
-+ if ( hrec0->type==BCF_HL_INFO ) type = "INFO";
-+ if ( hrec0->type==BCF_HL_FMT ) type = "FORMAT";
-+ if ( hrec0->type==BCF_HL_CTG ) type = "contig";
-+
-+ if ( !hrec )
-+ error("Cannot use --naive, incompatible headers, the tag %s/%s not present in %s\n",type,hrec0->vals[itag],fname);
-+
-+ int idx0 = bcf_hrec_find_key(hrec0, "IDX");
-+ int idx = bcf_hrec_find_key(hrec, "IDX");
-+ if ( idx0<0 || idx<0 )
-+ error("fixme: unexpected IDX<0 for %s/%s in %s or %s\n",type,hrec0->vals[itag],fname0,fname);
-+ if ( strcmp(hrec0->vals[idx0],hrec->vals[idx]) )
-+ error("Cannot use --naive, use --naive-force instead: different order the tag %s/%s in %s vs %s\n",type,hrec0->vals[itag],fname0,fname);
-+ }
-+}
-+static void naive_concat_check_headers(args_t *args)
-+{
-+ fprintf(stderr,"Checking the headers of %d files.\n",args->nfnames);
-+ bcf_hdr_t *hdr0 = NULL;
-+ int i,j;
-+ for (i=0; i<args->nfnames; i++)
-+ {
-+ htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]);
-+ htsFormat type = *hts_get_format(fp);
-+ hts_close(fp);
-+
-+ if ( i==0 )
-+ {
-+ hdr0 = hdr;
-+ continue;
-+ }
-+
-+ // check the samples
-+ if ( bcf_hdr_nsamples(hdr0)!=bcf_hdr_nsamples(hdr) )
-+ error("Cannot concatenate, different number of samples: %d vs %d in %s vs %s\n",bcf_hdr_nsamples(hdr0),bcf_hdr_nsamples(hdr),args->fnames[0],args->fnames[i]);
-+ for (j=0; j<bcf_hdr_nsamples(hdr0); j++)
-+ if ( strcmp(hdr0->samples[j],hdr->samples[j]) )
-+ error("Cannot concatenate, different samples in %s vs %s\n",args->fnames[0],args->fnames[i]);
-+
-+ // if BCF, check if tag IDs are consistent in the dictionary of strings
-+ if ( type.compression!=bgzf )
-+ error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
-+ if ( type.format==vcf )
-+ {
-+ bcf_hdr_destroy(hdr);
-+ continue;
-+ }
-+
-+ _check_hrecs(hdr0,hdr,args->fnames[0],args->fnames[i]);
-+ _check_hrecs(hdr,hdr0,args->fnames[i],args->fnames[0]);
-+
-+ bcf_hdr_destroy(hdr);
-+ }
-+ if ( hdr0 ) bcf_hdr_destroy(hdr0);
-+ fprintf(stderr,"Done, the headers are compatible.\n");
-+}
- static void naive_concat(args_t *args)
- {
-+ if ( !args->naive_concat_trust_headers )
-+ naive_concat_check_headers(args);
-+
- // only compressed BCF atm
- BGZF *bgzf_out = bgzf_open(args->output_fname,"w");;
-
-+ struct timeval t0, t1;
- const size_t page_size = BGZF_MAX_BLOCK_SIZE;
- uint8_t *buf = (uint8_t*) malloc(page_size);
- kstring_t tmp = {0,0,0};
- int i, file_types = 0;
- for (i=0; i<args->nfnames; i++)
- {
-+ if ( args->verbose )
-+ {
-+ fprintf(stderr,"Concatenating %s", args->fnames[i]);
-+ gettimeofday(&t0, NULL);
-+ }
- htsFile *hts_fp = hts_open(args->fnames[i],"r");
-- if ( !hts_fp ) error("Failed to open: %s\n", args->fnames[i]);
-+ if ( !hts_fp ) error("\nFailed to open: %s\n", args->fnames[i]);
- htsFormat type = *hts_get_format(hts_fp);
-
- if ( type.compression!=bgzf )
-- error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
-+ error("\nThe --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
- file_types |= type.format==vcf ? 1 : 2;
- if ( file_types==3 )
-- error("The --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n");
-+ error("\nThe --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n");
-
- BGZF *fp = hts_get_bgzfp(hts_fp);
- if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length )
-- error("Failed to read %s: %s\n", args->fnames[i], strerror(errno));
-+ error("\nFailed to read %s: %s\n", args->fnames[i], strerror(errno));
-
- int nskip;
- if ( type.format==bcf )
- {
- uint8_t magic[5];
-- if ( bgzf_read(fp, magic, 5) != 5 ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-- if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("Invalid BCF magic string in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, magic, 5) != 5 ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
-+ if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("\nInvalid BCF magic string in %s\n", args->fnames[i]);
-
-- if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
- hts_expand(char,tmp.l,tmp.m,tmp.s);
-- if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
-
- // write only the first header
- if ( i==0 )
- {
-- if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("Failed to write %d bytes to %s\n", 5,args->output_fname);
-- if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("Failed to write %d bytes to %s\n", 4,args->output_fname);
-- if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("Failed to write %"PRId64" bytes to %s\n", (uint64_t)tmp.l,args->output_fname);
-+ if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("\nFailed to write %d bytes to %s\n", 5,args->output_fname);
-+ if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("\nFailed to write %d bytes to %s\n", 4,args->output_fname);
-+ if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("\nFailed to write %"PRId64" bytes to %s\n", (uint64_t)tmp.l,args->output_fname);
- }
- nskip = fp->block_offset;
- }
- else
- {
- nskip = print_vcf_gz_header(fp, bgzf_out, i==0?1:0, &tmp);
-- if ( nskip==-1 ) error("Error reading %s\n", args->fnames[i]);
-+ if ( nskip==-1 ) error("\nError reading %s\n", args->fnames[i]);
- }
-
- // Output all non-header data that were read together with the header block
- if ( fp->block_length - nskip > 0 )
- {
-- if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("Error: %d\n",fp->errcode);
-+ if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("\nError: %d\n",fp->errcode);
- }
-- if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode);
-+ if ( bgzf_flush(bgzf_out)<0 ) error("\nError: %d\n",bgzf_out->errcode);
-
-
- // Stream the rest of the file as it is, without recompressing, but remove BGZF EOF blocks
-@@ -680,16 +808,22 @@
- {
- nread = bgzf_raw_read(fp, buf, nheader);
- if ( !nread ) break;
-- if ( nread != nheader || check_header(buf)!=0 ) error("Could not parse the header of a bgzf block: %s\n",args->fnames[i]);
-+ if ( nread != nheader || check_header(buf)!=0 ) error("\nCould not parse the header of a bgzf block: %s\n",args->fnames[i]);
- nblock = unpackInt16(buf+16) + 1;
- assert( nblock <= page_size && nblock >= nheader );
- nread += bgzf_raw_read(fp, buf+nheader, nblock - nheader);
-- if ( nread!=nblock ) error("Could not read %"PRId64" bytes: %s\n",(uint64_t)nblock,args->fnames[i]);
-+ if ( nread!=nblock ) error("\nCould not read %"PRId64" bytes: %s\n",(uint64_t)nblock,args->fnames[i]);
- if ( nread==neof && !memcmp(buf,eof,neof) ) continue;
- nwr = bgzf_raw_write(bgzf_out, buf, nread);
-- if ( nwr != nread ) error("Write failed, wrote %"PRId64" instead of %d bytes.\n", (uint64_t)nwr,(int)nread);
-+ if ( nwr != nread ) error("\nWrite failed, wrote %"PRId64" instead of %d bytes.\n", (uint64_t)nwr,(int)nread);
-+ }
-+ if (hts_close(hts_fp)) error("\nClose failed: %s\n",args->fnames[i]);
-+ if ( args->verbose )
-+ {
-+ gettimeofday(&t1, NULL);
-+ double delta = (t1.tv_sec - t0.tv_sec) * 1e6 + (t1.tv_usec - t0.tv_usec);
-+ fprintf(stderr,"\t%f seconds\n",delta/1e6);
- }
-- if (hts_close(hts_fp)) error("Close failed: %s\n",args->fnames[i]);
- }
- free(buf);
- free(tmp.s);
-@@ -705,8 +839,7 @@
- fprintf(stderr, " VCF into one. The input files must be sorted by chr and position. The files\n");
- fprintf(stderr, " must be given in the correct order to produce sorted VCF on output unless\n");
- fprintf(stderr, " the -a, --allow-overlaps option is specified. With the --naive option, the files\n");
-- fprintf(stderr, " are concatenated without being recompressed, which is very fast but dangerous\n");
-- fprintf(stderr, " if the BCF headers differ.\n");
-+ fprintf(stderr, " are concatenated without being recompressed, which is very fast.\n");
- fprintf(stderr, "Usage: bcftools concat [options] <A.vcf.gz> [<B.vcf.gz> [...]]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Options:\n");
-@@ -717,13 +850,15 @@
- fprintf(stderr, " -f, --file-list <file> Read the list of files from a file.\n");
- fprintf(stderr, " -l, --ligate Ligate phased VCFs by matching phase at overlapping haplotypes\n");
- fprintf(stderr, " --no-version Do not append version and command line to the header\n");
-- fprintf(stderr, " -n, --naive Concatenate files without recompression (dangerous, use with caution)\n");
-+ fprintf(stderr, " -n, --naive Concatenate files without recompression, a header check compatibility is performed\n");
-+ fprintf(stderr, " --naive-force Same as --naive, but header compatibility is not checked. Dangerous, use with caution.\n");
- fprintf(stderr, " -o, --output <file> Write output to a file [standard output]\n");
- fprintf(stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
- fprintf(stderr, " -q, --min-PQ <int> Break phase set if phasing quality is lower than <int> [30]\n");
- fprintf(stderr, " -r, --regions <region> Restrict to comma-separated list of regions\n");
- fprintf(stderr, " -R, --regions-file <file> Restrict to regions listed in a file\n");
-- fprintf(stderr, " --threads <int> Number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> Use multithreading with <int> worker threads [0]\n");
-+ fprintf(stderr, " -v, --verbose <0|1> Set verbosity level [1]\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-@@ -738,10 +873,13 @@
- args->n_threads = 0;
- args->record_cmd_line = 1;
- args->min_PQ = 30;
-+ args->verbose = 1;
-
- static struct option loptions[] =
- {
-+ {"verbose",required_argument,NULL,'v'},
- {"naive",no_argument,NULL,'n'},
-+ {"naive-force",no_argument,NULL,7},
- {"compact-PS",no_argument,NULL,'c'},
- {"regions",required_argument,NULL,'r'},
- {"regions-file",required_argument,NULL,'R'},
-@@ -758,7 +896,7 @@
- {NULL,0,NULL,0}
- };
- char *tmp;
-- while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cn",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cnv:",loptions,NULL)) >= 0)
- {
- switch (c) {
- case 'c': args->compact_PS = 1; break;
-@@ -786,6 +924,11 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 7 : args->naive_concat = 1; args->naive_concat_trust_headers = 1; break;
-+ case 'v':
-+ args->verbose = strtol(optarg, 0, 0);
-+ error("Error: currently only --verbose 0 or --verbose 1 is supported\n");
-+ break;
- case 'h':
- case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
-@@ -798,7 +941,7 @@
- args->fnames[args->nfnames-1] = strdup(argv[optind]);
- optind++;
- }
-- if ( args->allow_overlaps && args->phased_concat ) args->allow_overlaps = 0;
-+ if ( args->allow_overlaps && args->phased_concat ) error("The options -a and -l should not be combined. Please run with -l only.\n");
- if ( args->compact_PS && !args->phased_concat ) error("The -c option is intended only with -l\n");
- if ( args->file_list )
- {
---- python-pysam.orig/bcftools/vcfconcat.c.pysam.c
-+++ python-pysam/bcftools/vcfconcat.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* vcfconcat.c -- Concatenate or combine VCF/BCF files.
-
-- Copyright (C) 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -36,6 +36,8 @@
- #include <htslib/kseq.h>
- #include <htslib/bgzf.h>
- #include <htslib/tbx.h> // for hts_get_bgzfp()
-+#include <htslib/thread_pool.h>
-+#include <sys/time.h>
- #include "bcftools.h"
-
- typedef struct _args_t
-@@ -55,7 +57,9 @@
-
- char **argv, *output_fname, *file_list, **fnames, *remove_dups, *regions_list;
- int argc, nfnames, allow_overlaps, phased_concat, regions_is_file;
-- int compact_PS, phase_set_changed, naive_concat;
-+ int compact_PS, phase_set_changed, naive_concat, naive_concat_trust_headers;
-+ int verbose;
-+ htsThreadPool *tpool;
- }
- args_t;
-
-@@ -72,6 +76,7 @@
- line = bcf_init();
- }
-
-+ if ( args->verbose ) fprintf(bcftools_stderr,"Checking the headers and starting positions of %d files\n", args->nfnames);
- kstring_t str = {0,0,0};
- int i, prev_chrid = -1;
- for (i=0; i<args->nfnames; i++)
-@@ -99,7 +104,7 @@
- }
- }
- bcf_hdr_destroy(hdr);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fnames[i]);
- }
- free(str.s);
- if ( line ) bcf_destroy(line);
-@@ -114,14 +119,30 @@
- if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_concat");
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
-- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
--
-- bcf_hdr_write(args->out_fh, args->out_hdr);
--
-- if ( args->allow_overlaps )
-+ if ( args->allow_overlaps || args->phased_concat )
- {
- args->files = bcf_sr_init();
- args->files->require_index = 1;
-+ }
-+ if ( args->n_threads )
-+ {
-+ if ( args->files )
-+ {
-+ if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-+ args->tpool = args->files->p;
-+ }
-+ else
-+ {
-+ args->tpool = (htsThreadPool*) calloc(1, sizeof(htsThreadPool));
-+ if ( !args->tpool ) error("Failed to allocate memory\n");
-+ if ( !(args->tpool->pool = hts_tpool_init(args->n_threads)) ) error("Failed to initialize %d threads\n",args->n_threads);
-+ }
-+ hts_set_opt(args->out_fh, HTS_OPT_THREAD_POOL, args->tpool);
-+ }
-+ if ( bcf_hdr_write(args->out_fh, args->out_hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
-+
-+ if ( args->allow_overlaps )
-+ {
- if ( args->regions_list )
- {
- if ( bcf_sr_set_regions(args->files, args->regions_list, args->regions_is_file)<0 )
-@@ -169,8 +190,6 @@
- args->nmism = (int*) calloc(bcf_hdr_nsamples(args->out_hdr),sizeof(int));
- args->phase_qual = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t));
- args->phase_set = (int32_t*) malloc(bcf_hdr_nsamples(args->out_hdr)*sizeof(int32_t));
-- args->files = bcf_sr_init();
-- args->files->require_index = 1;
- args->ifname = 0;
- }
- }
-@@ -178,13 +197,16 @@
- static void destroy_data(args_t *args)
- {
- int i;
-- for (i=0; i<args->nfnames; i++) free(args->fnames[i]);
-- free(args->fnames);
-- if ( args->files ) bcf_sr_destroy(args->files);
- if ( args->out_fh )
- {
- if ( hts_close(args->out_fh)!=0 ) error("hts_close error\n");
- }
-+ if ( args->tpool && !args->files )
-+ {
-+ hts_tpool_destroy(args->tpool->pool);
-+ free(args->tpool);
-+ }
-+ if ( args->files ) bcf_sr_destroy(args->files);
- if ( args->out_hdr ) bcf_hdr_destroy(args->out_hdr);
- free(args->seen_seq);
- free(args->start_pos);
-@@ -197,6 +219,8 @@
- free(args->nmism);
- free(args->phase_qual);
- free(args->phase_set);
-+ for (i=0; i<args->nfnames; i++) free(args->fnames[i]);
-+ free(args->fnames);
- }
-
- int vcf_write_line(htsFile *fp, kstring_t *line);
-@@ -237,7 +261,7 @@
- {
- if ( !gt_absent_warned )
- {
-- fprintf(bcftools_stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), arec->pos+1);
-+ fprintf(bcftools_stderr,"GT is not present at %s:%"PRId64". (This warning is printed only once.)\n", bcf_seqname(ahdr,arec), (int64_t) arec->pos+1);
- gt_absent_warned = 1;
- }
- continue;
-@@ -248,7 +272,7 @@
- {
- if ( !gt_absent_warned )
- {
-- fprintf(bcftools_stderr,"GT is not present at %s:%d. (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), brec->pos+1);
-+ fprintf(bcftools_stderr,"GT is not present at %s:%"PRId64". (This warning is printed only once.)\n", bcf_seqname(bhdr,brec), (int64_t) brec->pos+1);
- gt_absent_warned = 1;
- }
- continue;
-@@ -284,9 +308,9 @@
- bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, arec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, arec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
-- if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1,args->prev_pos_check+1);
-+ if ( arec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%"PRId64" vs %d [1]\n", bcf_seqname(args->files->readers[0].header,arec),(int64_t) arec->pos+1,args->prev_pos_check+1);
- args->prev_pos_check = arec->pos;
- }
- args->nswap = 0;
-@@ -334,9 +358,9 @@
- bcf_update_format_int32(args->out_hdr,brec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, brec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, brec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
-- if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%d vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1,args->prev_pos_check+1);
-+ if ( brec->pos < args->prev_pos_check ) error("FIXME, disorder: %s:%"PRId64" vs %d [2]\n", bcf_seqname(args->files->readers[1].header,brec),(int64_t) brec->pos+1,args->prev_pos_check+1);
- args->prev_pos_check = brec->pos;
- }
- args->nbuf = 0;
-@@ -345,9 +369,9 @@
- static void phased_push(args_t *args, bcf1_t *arec, bcf1_t *brec)
- {
- if ( arec && arec->errcode )
-- error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),arec->pos+1, args->files->readers[0].fname);
-+ error("Parse error at %s:%"PRId64", cannot proceed: %s\n", bcf_seqname(args->files->readers[0].header,arec),(int64_t) arec->pos+1, args->files->readers[0].fname);
- if ( brec && brec->errcode )
-- error("Parse error at %s:%d, cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),brec->pos+1, args->files->readers[1].fname);
-+ error("Parse error at %s:%"PRId64", cannot proceed: %s\n", bcf_seqname(args->files->readers[1].header,brec),(int64_t) brec->pos+1, args->files->readers[1].fname);
-
- int i, nsmpl = bcf_hdr_nsamples(args->out_hdr);
- int chr_id = bcf_hdr_name2id(args->out_hdr, bcf_seqname(args->files->readers[0].header,arec));
-@@ -375,10 +399,10 @@
- bcf_update_format_int32(args->out_hdr,arec,"PS",args->phase_set,nsmpl);
- args->phase_set_changed = 0;
- }
-- bcf_write(args->out_fh, args->out_hdr, arec);
-+ if ( bcf_write(args->out_fh, args->out_hdr, arec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- if ( arec->pos < args->prev_pos_check )
-- error("FIXME, disorder: %s:%d in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1);
-+ error("FIXME, disorder: %s:%"PRId64" in %s vs %d written [3]\n", bcf_seqname(args->files->readers[0].header,arec), (int64_t) arec->pos+1,args->files->readers[0].fname, args->prev_pos_check+1);
- args->prev_pos_check = arec->pos;
- return;
- }
-@@ -395,6 +419,7 @@
-
- static void concat(args_t *args)
- {
-+ static int site_drop_warned = 0;
- int i;
- if ( args->phased_concat ) // phased concat
- {
-@@ -431,8 +456,20 @@
- if ( !bcf_sr_has_line(args->files,0) ) // no input from the first reader
- {
- // We are assuming that there is a perfect overlap, sites which are not present in both files are dropped
-- if ( ! bcf_sr_region_done(args->files,0) ) continue;
--
-+ if ( ! bcf_sr_region_done(args->files,0) )
-+ {
-+ if ( !site_drop_warned )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: Dropping the site %s:%"PRId64". The --ligate option is intended for VCFs with perfect\n"
-+ " overlap, sites in overlapping regions present in one but missing in other are dropped.\n"
-+ " This warning is printed only once.\n",
-+ bcf_seqname(bcf_sr_get_header(args->files,1),bcf_sr_get_line(args->files,1)), (int64_t) bcf_sr_get_line(args->files,1)->pos+1
-+ );
-+ site_drop_warned = 1;
-+ }
-+ continue;
-+ }
- phased_flush(args);
- bcf_sr_remove_reader(args->files, 0);
- }
-@@ -485,20 +522,27 @@
- bcf1_t *line = bcf_sr_get_line(args->files,i);
- if ( !line ) continue;
- bcf_translate(args->out_hdr, args->files->readers[i].header, line);
-- bcf_write1(args->out_fh, args->out_hdr, line);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->remove_dups ) break;
- }
- }
- }
- else // concatenating
- {
-+ struct timeval t0, t1;
- kstring_t tmp = {0,0,0};
- int prev_chr_id = -1, prev_pos;
- bcf1_t *line = bcf_init();
- for (i=0; i<args->nfnames; i++)
- {
-- htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]);
-- bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]);
-+ if ( args->verbose )
-+ {
-+ fprintf(bcftools_stderr,"Concatenating %s", args->fnames[i]);
-+ gettimeofday(&t0, NULL);
-+ }
-+ htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("\nFailed to open: %s\n", args->fnames[i]);
-+ if ( args->n_threads ) hts_set_opt(fp, HTS_OPT_THREAD_POOL, args->tpool);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("\nFailed to parse header: %s\n", args->fnames[i]);
- if ( !fp->is_bin && args->output_type&FT_VCF )
- {
- line->max_unpack = BCF_UN_STR;
-@@ -510,7 +554,7 @@
- tmp.l = 0;
- kputsn(fp->line.s,str-fp->line.s,&tmp);
- int chr_id = bcf_hdr_name2id(args->out_hdr, tmp.s);
-- if ( chr_id<0 ) error("The sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]);
-+ if ( chr_id<0 ) error("\nThe sequence \"%s\" not defined in the header: %s\n(Quick workaround: index the file.)\n", tmp.s, args->fnames[i]);
- if ( prev_chr_id!=chr_id )
- {
- prev_pos = -1;
-@@ -521,11 +565,11 @@
- int pos = strtol(str+1,&end,10) - 1;
- if ( end==str+1 ) error("Could not parse line: %s\n", fp->line.s);
- if ( prev_pos > pos )
-- error("The chromosome block %s is not sorted, consider running with -a.\n", tmp.s);
-+ error("\nThe chromosome block %s is not sorted, consider running with -a.\n", tmp.s);
- args->seen_seq[chr_id] = 1;
- prev_chr_id = chr_id;
-
-- if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("Failed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
-+ if ( vcf_write_line(args->out_fh, &fp->line)!=0 ) error("\nFailed to write %"PRIu64" bytes\n", (uint64_t)fp->line.l);
- }
- }
- else
-@@ -543,15 +587,21 @@
- error("\nThe chromosome block %s is not contiguous, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
- }
- if ( prev_pos > line->pos )
-- error("The chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
-+ error("\nThe chromosome block %s is not sorted, consider running with -a.\n", bcf_seqname(args->out_hdr, line));
- args->seen_seq[line->rid] = 1;
- prev_chr_id = line->rid;
-
-- if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("Failed to write\n");
-+ if ( bcf_write(args->out_fh, args->out_hdr, line)!=0 ) error("\nFailed to write\n");
- }
- }
- bcf_hdr_destroy(hdr);
- hts_close(fp);
-+ if ( args->verbose )
-+ {
-+ gettimeofday(&t1, NULL);
-+ double delta = (t1.tv_sec - t0.tv_sec) * 1e6 + (t1.tv_usec - t0.tv_usec);
-+ fprintf(bcftools_stderr,"\t%f seconds\n",delta/1e6);
-+ }
- }
- bcf_destroy(line);
- free(tmp.s);
-@@ -614,63 +664,141 @@
- && header[12] == 'B' && header[13] == 'C'
- && unpackInt16((uint8_t*)&header[14]) == 2) ? 0 : -1;
- }
-+static void _check_hrecs(const bcf_hdr_t *hdr0, const bcf_hdr_t *hdr, char *fname0, char *fname)
-+{
-+ int j;
-+ for (j=0; j<hdr0->nhrec; j++)
-+ {
-+ bcf_hrec_t *hrec0 = hdr0->hrec[j];
-+ if ( hrec0->type!=BCF_HL_FLT && hrec0->type!=BCF_HL_INFO && hrec0->type!=BCF_HL_FMT && hrec0->type!=BCF_HL_CTG ) continue; // skip fiels w/o IDX
-+ int itag = bcf_hrec_find_key(hrec0, "ID");
-+ bcf_hrec_t *hrec = bcf_hdr_get_hrec(hdr, hrec0->type, "ID", hrec0->vals[itag], NULL);
-+
-+ char *type = NULL;
-+ if ( hrec0->type==BCF_HL_FLT ) type = "FILTER";
-+ if ( hrec0->type==BCF_HL_INFO ) type = "INFO";
-+ if ( hrec0->type==BCF_HL_FMT ) type = "FORMAT";
-+ if ( hrec0->type==BCF_HL_CTG ) type = "contig";
-+
-+ if ( !hrec )
-+ error("Cannot use --naive, incompatible headers, the tag %s/%s not present in %s\n",type,hrec0->vals[itag],fname);
-+
-+ int idx0 = bcf_hrec_find_key(hrec0, "IDX");
-+ int idx = bcf_hrec_find_key(hrec, "IDX");
-+ if ( idx0<0 || idx<0 )
-+ error("fixme: unexpected IDX<0 for %s/%s in %s or %s\n",type,hrec0->vals[itag],fname0,fname);
-+ if ( strcmp(hrec0->vals[idx0],hrec->vals[idx]) )
-+ error("Cannot use --naive, use --naive-force instead: different order the tag %s/%s in %s vs %s\n",type,hrec0->vals[itag],fname0,fname);
-+ }
-+}
-+static void naive_concat_check_headers(args_t *args)
-+{
-+ fprintf(bcftools_stderr,"Checking the headers of %d files.\n",args->nfnames);
-+ bcf_hdr_t *hdr0 = NULL;
-+ int i,j;
-+ for (i=0; i<args->nfnames; i++)
-+ {
-+ htsFile *fp = hts_open(args->fnames[i], "r"); if ( !fp ) error("Failed to open: %s\n", args->fnames[i]);
-+ bcf_hdr_t *hdr = bcf_hdr_read(fp); if ( !hdr ) error("Failed to parse header: %s\n", args->fnames[i]);
-+ htsFormat type = *hts_get_format(fp);
-+ hts_close(fp);
-+
-+ if ( i==0 )
-+ {
-+ hdr0 = hdr;
-+ continue;
-+ }
-+
-+ // check the samples
-+ if ( bcf_hdr_nsamples(hdr0)!=bcf_hdr_nsamples(hdr) )
-+ error("Cannot concatenate, different number of samples: %d vs %d in %s vs %s\n",bcf_hdr_nsamples(hdr0),bcf_hdr_nsamples(hdr),args->fnames[0],args->fnames[i]);
-+ for (j=0; j<bcf_hdr_nsamples(hdr0); j++)
-+ if ( strcmp(hdr0->samples[j],hdr->samples[j]) )
-+ error("Cannot concatenate, different samples in %s vs %s\n",args->fnames[0],args->fnames[i]);
-+
-+ // if BCF, check if tag IDs are consistent in the dictionary of strings
-+ if ( type.compression!=bgzf )
-+ error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
-+ if ( type.format==vcf )
-+ {
-+ bcf_hdr_destroy(hdr);
-+ continue;
-+ }
-+
-+ _check_hrecs(hdr0,hdr,args->fnames[0],args->fnames[i]);
-+ _check_hrecs(hdr,hdr0,args->fnames[i],args->fnames[0]);
-+
-+ bcf_hdr_destroy(hdr);
-+ }
-+ if ( hdr0 ) bcf_hdr_destroy(hdr0);
-+ fprintf(bcftools_stderr,"Done, the headers are compatible.\n");
-+}
- static void naive_concat(args_t *args)
- {
-+ if ( !args->naive_concat_trust_headers )
-+ naive_concat_check_headers(args);
-+
- // only compressed BCF atm
- BGZF *bgzf_out = bgzf_open(args->output_fname,"w");;
-
-+ struct timeval t0, t1;
- const size_t page_size = BGZF_MAX_BLOCK_SIZE;
- uint8_t *buf = (uint8_t*) malloc(page_size);
- kstring_t tmp = {0,0,0};
- int i, file_types = 0;
- for (i=0; i<args->nfnames; i++)
- {
-+ if ( args->verbose )
-+ {
-+ fprintf(bcftools_stderr,"Concatenating %s", args->fnames[i]);
-+ gettimeofday(&t0, NULL);
-+ }
- htsFile *hts_fp = hts_open(args->fnames[i],"r");
-- if ( !hts_fp ) error("Failed to open: %s\n", args->fnames[i]);
-+ if ( !hts_fp ) error("\nFailed to open: %s\n", args->fnames[i]);
- htsFormat type = *hts_get_format(hts_fp);
-
- if ( type.compression!=bgzf )
-- error("The --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
-+ error("\nThe --naive option works only for compressed BCFs or VCFs, sorry :-/\n");
- file_types |= type.format==vcf ? 1 : 2;
- if ( file_types==3 )
-- error("The --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n");
-+ error("\nThe --naive option works only for compressed files of the same type, all BCFs or all VCFs :-/\n");
-
- BGZF *fp = hts_get_bgzfp(hts_fp);
- if ( !fp || bgzf_read_block(fp) != 0 || !fp->block_length )
-- error("Failed to read %s: %s\n", args->fnames[i], strerror(errno));
-+ error("\nFailed to read %s: %s\n", args->fnames[i], strerror(errno));
-
- int nskip;
- if ( type.format==bcf )
- {
- uint8_t magic[5];
-- if ( bgzf_read(fp, magic, 5) != 5 ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-- if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("Invalid BCF magic string in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, magic, 5) != 5 ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
-+ if (strncmp((char*)magic, "BCF\2\2", 5) != 0) error("\nInvalid BCF magic string in %s\n", args->fnames[i]);
-
-- if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, &tmp.l, 4) != 4 ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
- hts_expand(char,tmp.l,tmp.m,tmp.s);
-- if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("Failed to read the BCF header in %s\n", args->fnames[i]);
-+ if ( bgzf_read(fp, tmp.s, tmp.l) != tmp.l ) error("\nFailed to read the BCF header in %s\n", args->fnames[i]);
-
- // write only the first header
- if ( i==0 )
- {
-- if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("Failed to write %d bytes to %s\n", 5,args->output_fname);
-- if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("Failed to write %d bytes to %s\n", 4,args->output_fname);
-- if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("Failed to write %"PRId64" bytes to %s\n", (uint64_t)tmp.l,args->output_fname);
-+ if ( bgzf_write(bgzf_out, "BCF\2\2", 5) !=5 ) error("\nFailed to write %d bytes to %s\n", 5,args->output_fname);
-+ if ( bgzf_write(bgzf_out, &tmp.l, 4) !=4 ) error("\nFailed to write %d bytes to %s\n", 4,args->output_fname);
-+ if ( bgzf_write(bgzf_out, tmp.s, tmp.l) != tmp.l) error("\nFailed to write %"PRId64" bytes to %s\n", (uint64_t)tmp.l,args->output_fname);
- }
- nskip = fp->block_offset;
- }
- else
- {
- nskip = print_vcf_gz_header(fp, bgzf_out, i==0?1:0, &tmp);
-- if ( nskip==-1 ) error("Error reading %s\n", args->fnames[i]);
-+ if ( nskip==-1 ) error("\nError reading %s\n", args->fnames[i]);
- }
-
- // Output all non-header data that were read together with the header block
- if ( fp->block_length - nskip > 0 )
- {
-- if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("Error: %d\n",fp->errcode);
-+ if ( bgzf_write(bgzf_out, (char *)fp->uncompressed_block+nskip, fp->block_length-nskip)<0 ) error("\nError: %d\n",fp->errcode);
- }
-- if ( bgzf_flush(bgzf_out)<0 ) error("Error: %d\n",bgzf_out->errcode);
-+ if ( bgzf_flush(bgzf_out)<0 ) error("\nError: %d\n",bgzf_out->errcode);
-
-
- // Stream the rest of the file as it is, without recompressing, but remove BGZF EOF blocks
-@@ -682,16 +810,22 @@
- {
- nread = bgzf_raw_read(fp, buf, nheader);
- if ( !nread ) break;
-- if ( nread != nheader || check_header(buf)!=0 ) error("Could not parse the header of a bgzf block: %s\n",args->fnames[i]);
-+ if ( nread != nheader || check_header(buf)!=0 ) error("\nCould not parse the header of a bgzf block: %s\n",args->fnames[i]);
- nblock = unpackInt16(buf+16) + 1;
- assert( nblock <= page_size && nblock >= nheader );
- nread += bgzf_raw_read(fp, buf+nheader, nblock - nheader);
-- if ( nread!=nblock ) error("Could not read %"PRId64" bytes: %s\n",(uint64_t)nblock,args->fnames[i]);
-+ if ( nread!=nblock ) error("\nCould not read %"PRId64" bytes: %s\n",(uint64_t)nblock,args->fnames[i]);
- if ( nread==neof && !memcmp(buf,eof,neof) ) continue;
- nwr = bgzf_raw_write(bgzf_out, buf, nread);
-- if ( nwr != nread ) error("Write failed, wrote %"PRId64" instead of %d bytes.\n", (uint64_t)nwr,(int)nread);
-+ if ( nwr != nread ) error("\nWrite failed, wrote %"PRId64" instead of %d bytes.\n", (uint64_t)nwr,(int)nread);
-+ }
-+ if (hts_close(hts_fp)) error("\nClose failed: %s\n",args->fnames[i]);
-+ if ( args->verbose )
-+ {
-+ gettimeofday(&t1, NULL);
-+ double delta = (t1.tv_sec - t0.tv_sec) * 1e6 + (t1.tv_usec - t0.tv_usec);
-+ fprintf(bcftools_stderr,"\t%f seconds\n",delta/1e6);
- }
-- if (hts_close(hts_fp)) error("Close failed: %s\n",args->fnames[i]);
- }
- free(buf);
- free(tmp.s);
-@@ -707,8 +841,7 @@
- fprintf(bcftools_stderr, " VCF into one. The input files must be sorted by chr and position. The files\n");
- fprintf(bcftools_stderr, " must be given in the correct order to produce sorted VCF on output unless\n");
- fprintf(bcftools_stderr, " the -a, --allow-overlaps option is specified. With the --naive option, the files\n");
-- fprintf(bcftools_stderr, " are concatenated without being recompressed, which is very fast but dangerous\n");
-- fprintf(bcftools_stderr, " if the BCF headers differ.\n");
-+ fprintf(bcftools_stderr, " are concatenated without being recompressed, which is very fast.\n");
- fprintf(bcftools_stderr, "Usage: bcftools concat [options] <A.vcf.gz> [<B.vcf.gz> [...]]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Options:\n");
-@@ -719,13 +852,15 @@
- fprintf(bcftools_stderr, " -f, --file-list <file> Read the list of files from a file.\n");
- fprintf(bcftools_stderr, " -l, --ligate Ligate phased VCFs by matching phase at overlapping haplotypes\n");
- fprintf(bcftools_stderr, " --no-version Do not append version and command line to the header\n");
-- fprintf(bcftools_stderr, " -n, --naive Concatenate files without recompression (dangerous, use with caution)\n");
-+ fprintf(bcftools_stderr, " -n, --naive Concatenate files without recompression, a header check compatibility is performed\n");
-+ fprintf(bcftools_stderr, " --naive-force Same as --naive, but header compatibility is not checked. Dangerous, use with caution.\n");
- fprintf(bcftools_stderr, " -o, --output <file> Write output to a file [standard output]\n");
- fprintf(bcftools_stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
- fprintf(bcftools_stderr, " -q, --min-PQ <int> Break phase set if phasing quality is lower than <int> [30]\n");
- fprintf(bcftools_stderr, " -r, --regions <region> Restrict to comma-separated list of regions\n");
- fprintf(bcftools_stderr, " -R, --regions-file <file> Restrict to regions listed in a file\n");
-- fprintf(bcftools_stderr, " --threads <int> Number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> Use multithreading with <int> worker threads [0]\n");
-+ fprintf(bcftools_stderr, " -v, --verbose <0|1> Set verbosity level [1]\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-@@ -740,10 +875,13 @@
- args->n_threads = 0;
- args->record_cmd_line = 1;
- args->min_PQ = 30;
-+ args->verbose = 1;
-
- static struct option loptions[] =
- {
-+ {"verbose",required_argument,NULL,'v'},
- {"naive",no_argument,NULL,'n'},
-+ {"naive-force",no_argument,NULL,7},
- {"compact-PS",no_argument,NULL,'c'},
- {"regions",required_argument,NULL,'r'},
- {"regions-file",required_argument,NULL,'R'},
-@@ -760,7 +898,7 @@
- {NULL,0,NULL,0}
- };
- char *tmp;
-- while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cn",loptions,NULL)) >= 0)
-+ while ((c = getopt_long(argc, argv, "h:?o:O:f:alq:Dd:r:R:cnv:",loptions,NULL)) >= 0)
- {
- switch (c) {
- case 'c': args->compact_PS = 1; break;
-@@ -788,6 +926,11 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 7 : args->naive_concat = 1; args->naive_concat_trust_headers = 1; break;
-+ case 'v':
-+ args->verbose = strtol(optarg, 0, 0);
-+ error("Error: currently only --verbose 0 or --verbose 1 is supported\n");
-+ break;
- case 'h':
- case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
-@@ -800,7 +943,7 @@
- args->fnames[args->nfnames-1] = strdup(argv[optind]);
- optind++;
- }
-- if ( args->allow_overlaps && args->phased_concat ) args->allow_overlaps = 0;
-+ if ( args->allow_overlaps && args->phased_concat ) error("The options -a and -l should not be combined. Please run with -l only.\n");
- if ( args->compact_PS && !args->phased_concat ) error("The -c option is intended only with -l\n");
- if ( args->file_list )
- {
---- python-pysam.orig/bcftools/vcfconvert.c
-+++ python-pysam/bcftools/vcfconvert.c
-@@ -31,6 +31,7 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#include <inttypes.h>
- #include <htslib/faidx.h>
- #include <htslib/vcf.h>
- #include <htslib/bgzf.h>
-@@ -387,7 +388,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- nsamples -= 2;
-@@ -399,7 +400,9 @@
- bcf_clear(rec);
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- error("Error occurred while parsing: %s\n", line.s);
- }
-@@ -513,7 +516,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2);
-@@ -531,7 +534,7 @@
- if ( tsv_parse(hap_tsv, rec, line.s) )
- error("Error occurred while parsing %s: %s\n", hap_fname,line.s);
-
-- bcf_write(out_fh, args->header, rec);
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- if ( hts_getline(leg_fh, KS_SEP_LINE, &line)<=0 )
- {
-@@ -627,7 +630,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- nsamples -= 2;
-@@ -638,7 +641,9 @@
- bcf_clear(rec);
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- error("Error occurred while parsing: %s\n", line.s);
- }
-@@ -938,9 +943,9 @@
- if (legend_fname) {
- str.l = 0;
- if ( args->output_vcf_ids && (line->d.id[0]!='.' || line->d.id[1]!=0) )
-- ksprintf(&str, "%s %d %s %s\n", line->d.id, line->pos+1, line->d.allele[0], line->d.allele[1]);
-+ ksprintf(&str, "%s %"PRId64" %s %s\n", line->d.id, (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1]);
- else
-- ksprintf(&str, "%s:%d_%s_%s %d %s %s\n", bcf_seqname(args->header, line), line->pos+1, line->d.allele[0], line->d.allele[1], line->pos+1, line->d.allele[0], line->d.allele[1]);
-+ ksprintf(&str, "%s:%"PRId64"_%s_%s %"PRId64" %s %s\n", bcf_seqname(args->header, line), (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1], (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1]);
-
- // write legend file
- ret = bgzf_write(lout, str.s, str.l);
-@@ -1141,7 +1146,7 @@
-
- int len;
- char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(args->header,rec->rid), rec->pos, rec->pos, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
-
- int nals = 1, alleles[5] = { -1, -1, -1, -1, -1 }; // a,c,g,t,n
- ref[0] = toupper(ref[0]);
-@@ -1156,10 +1161,10 @@
- if ( i>0 )
- {
- ret = tsv_next(tsv);
-- if ( ret==-1 ) error("Too few columns for %d samples at %s:%d\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( ret==-1 ) error("Too few columns for %d samples at %s:%"PRId64"\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
- }
- ret = tsv_setter_aa1(args, tsv->ss, tsv->se, alleles, &nals, iref, args->gts+i*2);
-- if ( ret==-1 ) error("Error parsing the site %s:%d, expected two characters\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( ret==-1 ) error("Error parsing the site %s:%"PRId64", expected two characters\n", bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
- if ( ret==-2 )
- {
- // something else than a SNP
-@@ -1213,7 +1218,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- tsv_t *tsv = tsv_init(args->columns ? args->columns : "ID,CHROM,POS,AA");
- if ( tsv_register(tsv, "CHROM", tsv_setter_chrom, args->header) < 0 ) error("Expected CHROM column\n");
-@@ -1234,7 +1239,9 @@
-
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- args->n.skipped++;
- }
-@@ -1242,7 +1249,7 @@
- free(line.s);
-
- bcf_hdr_destroy(args->header);
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- tsv_destroy(tsv);
- bcf_destroy(rec);
- free(args->str.s);
-@@ -1265,7 +1272,7 @@
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0);
-- bcf_hdr_write(out_fh,hdr);
-+ if ( bcf_hdr_write(out_fh,hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- while ( bcf_sr_next_line(args->files) )
- {
-@@ -1276,9 +1283,9 @@
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass ) continue;
- }
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- }
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- }
-
- static void gvcf_to_vcf(args_t *args)
-@@ -1295,7 +1302,7 @@
-
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0);
- if (args->record_cmd_line) bcf_hdr_append_version(hdr, args->argc, args->argv, "bcftools_convert");
-- bcf_hdr_write(out_fh,hdr);
-+ if ( bcf_hdr_write(out_fh,hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- int32_t *itmp = NULL, nitmp = 0;
-
-@@ -1308,7 +1315,7 @@
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass )
- {
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
- }
-@@ -1332,7 +1339,7 @@
- // no gVCF compatible alleles
- if (gallele<0)
- {
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
-
-@@ -1340,7 +1347,7 @@
- if ( nend!=1 )
- {
- // No INFO/END => not gVCF record
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
- bcf_update_info_int32(hdr,line,"END",NULL,0);
-@@ -1349,14 +1356,14 @@
- {
- line->pos = pos;
- char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(hdr,line->rid), line->pos, line->pos, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(hdr,line->rid), line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(hdr,line->rid),(int64_t) line->pos+1);
- strncpy(line->d.allele[0],ref,len);
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- free(ref);
- }
- }
- free(itmp);
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- }
-
- static void usage(void)
-@@ -1381,7 +1388,7 @@
- fprintf(stderr, " --no-version do not append version and command line to the header\n");
- fprintf(stderr, " -o, --output <file> output file name [stdout]\n");
- fprintf(stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "GEN/SAMPLE conversion (input/output from IMPUTE2):\n");
- fprintf(stderr, " -G, --gensample2vcf <...> <prefix>|<gen-file>,<sample-file>\n");
-@@ -1505,7 +1512,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 10 : args->record_cmd_line = 0; break;
- case 11 : args->sex_fname = optarg; break;
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfconvert.c.pysam.c
-+++ python-pysam/bcftools/vcfconvert.c.pysam.c
-@@ -33,6 +33,7 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#include <inttypes.h>
- #include <htslib/faidx.h>
- #include <htslib/vcf.h>
- #include <htslib/bgzf.h>
-@@ -389,7 +390,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- nsamples -= 2;
-@@ -401,7 +402,9 @@
- bcf_clear(rec);
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- error("Error occurred while parsing: %s\n", line.s);
- }
-@@ -515,7 +518,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- args->gts = (int32_t *) malloc(sizeof(int32_t)*nsamples*2);
-@@ -533,7 +536,7 @@
- if ( tsv_parse(hap_tsv, rec, line.s) )
- error("Error occurred while parsing %s: %s\n", hap_fname,line.s);
-
-- bcf_write(out_fh, args->header, rec);
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- if ( hts_getline(leg_fh, KS_SEP_LINE, &line)<=0 )
- {
-@@ -629,7 +632,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- bcf1_t *rec = bcf_init();
-
- nsamples -= 2;
-@@ -640,7 +643,9 @@
- bcf_clear(rec);
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- error("Error occurred while parsing: %s\n", line.s);
- }
-@@ -940,9 +945,9 @@
- if (legend_fname) {
- str.l = 0;
- if ( args->output_vcf_ids && (line->d.id[0]!='.' || line->d.id[1]!=0) )
-- ksprintf(&str, "%s %d %s %s\n", line->d.id, line->pos+1, line->d.allele[0], line->d.allele[1]);
-+ ksprintf(&str, "%s %"PRId64" %s %s\n", line->d.id, (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1]);
- else
-- ksprintf(&str, "%s:%d_%s_%s %d %s %s\n", bcf_seqname(args->header, line), line->pos+1, line->d.allele[0], line->d.allele[1], line->pos+1, line->d.allele[0], line->d.allele[1]);
-+ ksprintf(&str, "%s:%"PRId64"_%s_%s %"PRId64" %s %s\n", bcf_seqname(args->header, line), (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1], (int64_t) line->pos+1, line->d.allele[0], line->d.allele[1]);
-
- // write legend file
- ret = bgzf_write(lout, str.s, str.l);
-@@ -1143,7 +1148,7 @@
-
- int len;
- char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(args->header,rec->rid), rec->pos, rec->pos, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
-
- int nals = 1, alleles[5] = { -1, -1, -1, -1, -1 }; // a,c,g,t,n
- ref[0] = toupper(ref[0]);
-@@ -1158,10 +1163,10 @@
- if ( i>0 )
- {
- ret = tsv_next(tsv);
-- if ( ret==-1 ) error("Too few columns for %d samples at %s:%d\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( ret==-1 ) error("Too few columns for %d samples at %s:%"PRId64"\n", rec->n_sample,bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
- }
- ret = tsv_setter_aa1(args, tsv->ss, tsv->se, alleles, &nals, iref, args->gts+i*2);
-- if ( ret==-1 ) error("Error parsing the site %s:%d, expected two characters\n", bcf_hdr_id2name(args->header,rec->rid), rec->pos+1);
-+ if ( ret==-1 ) error("Error parsing the site %s:%"PRId64", expected two characters\n", bcf_hdr_id2name(args->header,rec->rid),(int64_t) rec->pos+1);
- if ( ret==-2 )
- {
- // something else than a SNP
-@@ -1215,7 +1220,7 @@
- htsFile *out_fh = hts_open(args->outfname,hts_bcf_wmode(args->output_type));
- if ( out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->outfname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-- bcf_hdr_write(out_fh,args->header);
-+ if ( bcf_hdr_write(out_fh,args->header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- tsv_t *tsv = tsv_init(args->columns ? args->columns : "ID,CHROM,POS,AA");
- if ( tsv_register(tsv, "CHROM", tsv_setter_chrom, args->header) < 0 ) error("Expected CHROM column\n");
-@@ -1236,7 +1241,9 @@
-
- args->n.total++;
- if ( !tsv_parse(tsv, rec, line.s) )
-- bcf_write(out_fh, args->header, rec);
-+ {
-+ if ( bcf_write(out_fh, args->header, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-+ }
- else
- args->n.skipped++;
- }
-@@ -1244,7 +1251,7 @@
- free(line.s);
-
- bcf_hdr_destroy(args->header);
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- tsv_destroy(tsv);
- bcf_destroy(rec);
- free(args->str.s);
-@@ -1267,7 +1274,7 @@
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
-
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0);
-- bcf_hdr_write(out_fh,hdr);
-+ if ( bcf_hdr_write(out_fh,hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- while ( bcf_sr_next_line(args->files) )
- {
-@@ -1278,9 +1285,9 @@
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass ) continue;
- }
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- }
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- }
-
- static void gvcf_to_vcf(args_t *args)
-@@ -1297,7 +1304,7 @@
-
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,0);
- if (args->record_cmd_line) bcf_hdr_append_version(hdr, args->argc, args->argv, "bcftools_convert");
-- bcf_hdr_write(out_fh,hdr);
-+ if ( bcf_hdr_write(out_fh,hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
-
- int32_t *itmp = NULL, nitmp = 0;
-
-@@ -1310,7 +1317,7 @@
- if ( args->filter_logic & FLT_EXCLUDE ) pass = pass ? 0 : 1;
- if ( !pass )
- {
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
- }
-@@ -1334,7 +1341,7 @@
- // no gVCF compatible alleles
- if (gallele<0)
- {
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
-
-@@ -1342,7 +1349,7 @@
- if ( nend!=1 )
- {
- // No INFO/END => not gVCF record
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- continue;
- }
- bcf_update_info_int32(hdr,line,"END",NULL,0);
-@@ -1351,14 +1358,14 @@
- {
- line->pos = pos;
- char *ref = faidx_fetch_seq(args->ref, (char*)bcf_hdr_id2name(hdr,line->rid), line->pos, line->pos, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_hdr_id2name(hdr,line->rid), line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_hdr_id2name(hdr,line->rid),(int64_t) line->pos+1);
- strncpy(line->d.allele[0],ref,len);
-- bcf_write(out_fh,hdr,line);
-+ if ( bcf_write(out_fh,hdr,line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->outfname);
- free(ref);
- }
- }
- free(itmp);
-- hts_close(out_fh);
-+ if ( hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->outfname);
- }
-
- static void usage(void)
-@@ -1383,7 +1390,7 @@
- fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n");
- fprintf(bcftools_stderr, " -o, --output <file> output file name [bcftools_stdout]\n");
- fprintf(bcftools_stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "GEN/SAMPLE conversion (input/output from IMPUTE2):\n");
- fprintf(bcftools_stderr, " -G, --gensample2vcf <...> <prefix>|<gen-file>,<sample-file>\n");
-@@ -1507,7 +1514,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 10 : args->record_cmd_line = 0; break;
- case 11 : args->sex_fname = optarg; break;
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcffilter.c
-+++ python-pysam/bcftools/vcffilter.c
-@@ -188,7 +188,7 @@
- if ( args->snp_gap && rec->d.flt[j]==args->SnpGap_id ) { pass = 0; break; }
- }
- }
-- if ( pass ) bcf_write1(args->out_fh, args->hdr, rec);
-+ if ( pass && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -278,7 +278,7 @@
- if ( k_flush || !line )
- {
- // Select the best indel from the cluster of k_flush indels
-- int k = 0, max_ac = -1, imax_ac = -1;
-+ int k = 0, max_ac = -1, imax_ac = -1, max_qual = -1, imax_qual = -1;
- for (i=-1; rbuf_next(&args->rbuf,&i) && k<k_flush; )
- {
- k++;
-@@ -287,9 +287,10 @@
- hts_expand(int, rec->n_allele, args->ntmpi, args->tmpi);
- int ret = bcf_calc_ac(args->hdr, rec, args->tmpi, BCF_UN_ALL);
- if ( imax_ac==-1 || (ret && max_ac < args->tmpi[1]) ) { max_ac = args->tmpi[1]; imax_ac = i; }
-+ if ( imax_qual==-1 || max_qual < rec->qual ) { max_qual = rec->qual; imax_qual = i; }
- }
-
-- // Filter all but the best indel (with max AF or first if AF not available)
-+ // Filter all but the best indel (with the best QUAL, bigger AC, or take the first if neither QUAL nor AC are available)
- k = 0;
- for (i=-1; rbuf_next(&args->rbuf,&i) && k<k_flush; )
- {
-@@ -297,7 +298,14 @@
- bcf1_t *rec = args->rbuf_lines[i];
- if ( !(rec->d.var_type & IndelGap_set) ) continue;
- rec->d.var_type |= IndelGap_flush;
-- if ( i!=imax_ac ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id);
-+
-+ int do_filter = 0;
-+ if ( max_qual>0 )
-+ {
-+ if ( i!=imax_qual ) do_filter = 1;
-+ }
-+ else if ( i!=imax_ac ) do_filter = 1;
-+ if ( do_filter ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id);
- }
- }
- }
-@@ -418,7 +426,7 @@
- fprintf(stderr, " -S, --set-GTs <.|0> set genotypes of failed samples to missing (.) or ref (0)\n");
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-@@ -494,7 +502,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -531,10 +539,10 @@
- if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 )
- error("Failed to read the targets: %s\n", args->targets_list);
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
- while ( bcf_sr_next_line(args->files) )
- {
- bcf1_t *line = bcf_sr_get_line(args->files, 0);
-@@ -558,14 +566,16 @@
- }
- if ( args->set_gts ) set_genotypes(args, line, pass);
- if ( !args->rbuf_lines )
-- bcf_write1(args->out_fh, args->hdr, line);
-+ {
-+ if ( bcf_write1(args->out_fh, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ }
- else
- buffered_filters(args, line);
- }
- }
- buffered_filters(args, NULL);
-
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- destroy_data(args);
- bcf_sr_destroy(args->files);
- free(args);
---- python-pysam.orig/bcftools/vcffilter.c.pysam.c
-+++ python-pysam/bcftools/vcffilter.c.pysam.c
-@@ -190,7 +190,7 @@
- if ( args->snp_gap && rec->d.flt[j]==args->SnpGap_id ) { pass = 0; break; }
- }
- }
-- if ( pass ) bcf_write1(args->out_fh, args->hdr, rec);
-+ if ( pass && bcf_write1(args->out_fh, args->hdr, rec)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -280,7 +280,7 @@
- if ( k_flush || !line )
- {
- // Select the best indel from the cluster of k_flush indels
-- int k = 0, max_ac = -1, imax_ac = -1;
-+ int k = 0, max_ac = -1, imax_ac = -1, max_qual = -1, imax_qual = -1;
- for (i=-1; rbuf_next(&args->rbuf,&i) && k<k_flush; )
- {
- k++;
-@@ -289,9 +289,10 @@
- hts_expand(int, rec->n_allele, args->ntmpi, args->tmpi);
- int ret = bcf_calc_ac(args->hdr, rec, args->tmpi, BCF_UN_ALL);
- if ( imax_ac==-1 || (ret && max_ac < args->tmpi[1]) ) { max_ac = args->tmpi[1]; imax_ac = i; }
-+ if ( imax_qual==-1 || max_qual < rec->qual ) { max_qual = rec->qual; imax_qual = i; }
- }
-
-- // Filter all but the best indel (with max AF or first if AF not available)
-+ // Filter all but the best indel (with the best QUAL, bigger AC, or take the first if neither QUAL nor AC are available)
- k = 0;
- for (i=-1; rbuf_next(&args->rbuf,&i) && k<k_flush; )
- {
-@@ -299,7 +300,14 @@
- bcf1_t *rec = args->rbuf_lines[i];
- if ( !(rec->d.var_type & IndelGap_set) ) continue;
- rec->d.var_type |= IndelGap_flush;
-- if ( i!=imax_ac ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id);
-+
-+ int do_filter = 0;
-+ if ( max_qual>0 )
-+ {
-+ if ( i!=imax_qual ) do_filter = 1;
-+ }
-+ else if ( i!=imax_ac ) do_filter = 1;
-+ if ( do_filter ) bcf_add_filter(args->hdr, args->rbuf_lines[i], args->IndelGap_id);
- }
- }
- }
-@@ -420,7 +428,7 @@
- fprintf(bcftools_stderr, " -S, --set-GTs <.|0> set genotypes of failed samples to missing (.) or ref (0)\n");
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-@@ -496,7 +504,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -533,10 +541,10 @@
- if ( bcf_sr_set_targets(args->files, args->targets_list,targets_is_file, 0)<0 )
- error("Failed to read the targets: %s\n", args->targets_list);
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
-- bcf_hdr_write(args->out_fh, args->hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr)!=0 ) error("[%s] Error: cannot write the header to %s\n", __func__,args->output_fname);
- while ( bcf_sr_next_line(args->files) )
- {
- bcf1_t *line = bcf_sr_get_line(args->files, 0);
-@@ -560,14 +568,16 @@
- }
- if ( args->set_gts ) set_genotypes(args, line, pass);
- if ( !args->rbuf_lines )
-- bcf_write1(args->out_fh, args->hdr, line);
-+ {
-+ if ( bcf_write1(args->out_fh, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-+ }
- else
- buffered_filters(args, line);
- }
- }
- buffered_filters(args, NULL);
-
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- destroy_data(args);
- bcf_sr_destroy(args->files);
- free(args);
---- python-pysam.orig/bcftools/vcfgtcheck.c
-+++ python-pysam/bcftools/vcfgtcheck.c
-@@ -302,7 +302,7 @@
- int fake_PL = args->no_PLs ? args->no_PLs : 99; // with 1, discordance is the number of non-matching GTs
- int nsm_gt, i;
- if ( (nsm_gt=bcf_get_genotypes(hdr, line, &args->tmp_arr, &args->ntmp_arr)) <= 0 )
-- error("GT not present at %s:%d?\n", hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1);
-+ error("GT not present at %s:%"PRId64"?\n", hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos+1);
- nsm_gt /= bcf_hdr_nsamples(hdr);
- int npl = line->n_allele*(line->n_allele+1)/2;
- hts_expand(int,npl*bcf_hdr_nsamples(hdr),args->npl_arr,args->pl_arr);
-@@ -399,7 +399,7 @@
- // Target genotypes
- int ngt, npl;
- if ( (ngt=bcf_get_genotypes(args->gt_hdr, gt_line, >_arr, &ngt_arr)) <= 0 )
-- error("GT not present at %s:%d?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1);
-+ error("GT not present at %s:%"PRId64"?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, (int64_t) gt_line->pos+1);
- ngt /= bcf_hdr_nsamples(args->gt_hdr);
- if ( ngt!=2 ) continue; // checking only diploid genotypes
-
-@@ -415,7 +415,7 @@
- npl = fake_PLs(args, args->sm_hdr, sm_line);
- }
- else
-- error("PL not present at %s:%d?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, sm_line->pos+1);
-+ error("PL not present at %s:%"PRId64"?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, (int64_t) sm_line->pos+1);
- }
- else
- npl /= bcf_hdr_nsamples(args->sm_hdr);
-@@ -460,7 +460,7 @@
- int a = bcf_gt_allele(gt_ptr[0]);
- int b = bcf_gt_allele(gt_ptr[1]);
- if ( args->hom_only && a!=b ) continue; // heterozygous genotype
-- fprintf(fp, "SC\t%s\t%d", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1);
-+ fprintf(fp, "SC\t%s\t%"PRId64, args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, (int64_t) gt_line->pos+1);
- for (i=0; i<gt_line->n_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', gt_line->d.allele[i]);
- fprintf(fp, "\t%s/%s", a>=0 ? gt_line->d.allele[a] : ".", b>=0 ? gt_line->d.allele[b] : ".");
- fprintf(fp, "\t%f", args->lks[query_isample]-prev_lk);
-@@ -515,7 +515,7 @@
-
- if ( args->plot )
- {
-- fclose(fp);
-+ if ( fclose(fp)!=0 ) error("[%s] Error: close failed\n", __func__);
- plot_check(args, args->target_sample ? args->target_sample : "", args->sm_hdr->samples[query_isample]);
- }
- }
-@@ -788,7 +788,7 @@
- case 't': targets = optarg; break;
- case 'T': targets = optarg; targets_is_file = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -805,7 +805,8 @@
- if ( regions && bcf_sr_set_regions(args->files, regions, regions_is_file)<0 ) error("Failed to read the regions: %s\n", regions);
- if ( targets && bcf_sr_set_targets(args->files, targets, targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n", targets);
- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-- if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open %s: %s\n", args->gt_fname,bcf_sr_strerror(args->files->errnum));
-+ if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",args->gt_fname)?"standard input":args->gt_fname,bcf_sr_strerror(args->files->errnum));
- args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS;
- if ( args->plot ) args->plot = init_prefix(args->plot);
- init_data(args);
---- python-pysam.orig/bcftools/vcfgtcheck.c.pysam.c
-+++ python-pysam/bcftools/vcfgtcheck.c.pysam.c
-@@ -304,7 +304,7 @@
- int fake_PL = args->no_PLs ? args->no_PLs : 99; // with 1, discordance is the number of non-matching GTs
- int nsm_gt, i;
- if ( (nsm_gt=bcf_get_genotypes(hdr, line, &args->tmp_arr, &args->ntmp_arr)) <= 0 )
-- error("GT not present at %s:%d?\n", hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1);
-+ error("GT not present at %s:%"PRId64"?\n", hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos+1);
- nsm_gt /= bcf_hdr_nsamples(hdr);
- int npl = line->n_allele*(line->n_allele+1)/2;
- hts_expand(int,npl*bcf_hdr_nsamples(hdr),args->npl_arr,args->pl_arr);
-@@ -401,7 +401,7 @@
- // Target genotypes
- int ngt, npl;
- if ( (ngt=bcf_get_genotypes(args->gt_hdr, gt_line, >_arr, &ngt_arr)) <= 0 )
-- error("GT not present at %s:%d?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1);
-+ error("GT not present at %s:%"PRId64"?", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, (int64_t) gt_line->pos+1);
- ngt /= bcf_hdr_nsamples(args->gt_hdr);
- if ( ngt!=2 ) continue; // checking only diploid genotypes
-
-@@ -417,7 +417,7 @@
- npl = fake_PLs(args, args->sm_hdr, sm_line);
- }
- else
-- error("PL not present at %s:%d?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, sm_line->pos+1);
-+ error("PL not present at %s:%"PRId64"?\n", args->sm_hdr->id[BCF_DT_CTG][sm_line->rid].key, (int64_t) sm_line->pos+1);
- }
- else
- npl /= bcf_hdr_nsamples(args->sm_hdr);
-@@ -462,7 +462,7 @@
- int a = bcf_gt_allele(gt_ptr[0]);
- int b = bcf_gt_allele(gt_ptr[1]);
- if ( args->hom_only && a!=b ) continue; // heterozygous genotype
-- fprintf(fp, "SC\t%s\t%d", args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, gt_line->pos+1);
-+ fprintf(fp, "SC\t%s\t%"PRId64, args->gt_hdr->id[BCF_DT_CTG][gt_line->rid].key, (int64_t) gt_line->pos+1);
- for (i=0; i<gt_line->n_allele; i++) fprintf(fp, "%c%s", i==0?'\t':',', gt_line->d.allele[i]);
- fprintf(fp, "\t%s/%s", a>=0 ? gt_line->d.allele[a] : ".", b>=0 ? gt_line->d.allele[b] : ".");
- fprintf(fp, "\t%f", args->lks[query_isample]-prev_lk);
-@@ -517,7 +517,7 @@
-
- if ( args->plot )
- {
-- fclose(fp);
-+ if ( fclose(fp)!=0 ) error("[%s] Error: close failed\n", __func__);
- plot_check(args, args->target_sample ? args->target_sample : "", args->sm_hdr->samples[query_isample]);
- }
- }
-@@ -790,7 +790,7 @@
- case 't': targets = optarg; break;
- case 'T': targets = optarg; targets_is_file = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -807,7 +807,8 @@
- if ( regions && bcf_sr_set_regions(args->files, regions, regions_is_file)<0 ) error("Failed to read the regions: %s\n", regions);
- if ( targets && bcf_sr_set_targets(args->files, targets, targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n", targets);
- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-- if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open %s: %s\n", args->gt_fname,bcf_sr_strerror(args->files->errnum));
-+ if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) )
-+ error("Failed to read from %s: %s\n", !strcmp("-",args->gt_fname)?"standard input":args->gt_fname,bcf_sr_strerror(args->files->errnum));
- args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS;
- if ( args->plot ) args->plot = init_prefix(args->plot);
- init_data(args);
---- python-pysam.orig/bcftools/vcfindex.c
-+++ python-pysam/bcftools/vcfindex.c
-@@ -49,7 +49,7 @@
- fprintf(stderr, " -m, --min-shift INT set minimal interval size for CSI indices to 2^INT [14]\n");
- fprintf(stderr, " -o, --output-file FILE optional output index file name\n");
- fprintf(stderr, " -t, --tbi generate TBI-format index for VCF files\n");
-- fprintf(stderr, " --threads sets the number of threads [0]\n");
-+ fprintf(stderr, " --threads INT use multithreading with INT worker threads [0]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Stats options:\n");
- fprintf(stderr, " -n, --nrecords print number of records based on existing index file\n");
-@@ -112,7 +112,7 @@
- }
- if (stats&2) printf("%" PRIu64 "\n", sum);
- free(seq);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed\n", __func__);
- bcf_hdr_destroy(hdr);
- if (tbx)
- tbx_destroy(tbx);
---- python-pysam.orig/bcftools/vcfindex.c.pysam.c
-+++ python-pysam/bcftools/vcfindex.c.pysam.c
-@@ -51,7 +51,7 @@
- fprintf(bcftools_stderr, " -m, --min-shift INT set minimal interval size for CSI indices to 2^INT [14]\n");
- fprintf(bcftools_stderr, " -o, --output-file FILE optional output index file name\n");
- fprintf(bcftools_stderr, " -t, --tbi generate TBI-format index for VCF files\n");
-- fprintf(bcftools_stderr, " --threads sets the number of threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads INT use multithreading with INT worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Stats options:\n");
- fprintf(bcftools_stderr, " -n, --nrecords print number of records based on existing index file\n");
-@@ -114,7 +114,7 @@
- }
- if (stats&2) fprintf(bcftools_stdout, "%" PRIu64 "\n", sum);
- free(seq);
-- hts_close(fp);
-+ if ( hts_close(fp)!=0 ) error("[%s] Error: close failed\n", __func__);
- bcf_hdr_destroy(hdr);
- if (tbx)
- tbx_destroy(tbx);
---- python-pysam.orig/bcftools/vcfisec.c
-+++ python-pysam/bcftools/vcfisec.c
-@@ -1,6 +1,6 @@
- /* vcfisec.c -- Create intersections, unions and complements of VCF files.
-
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -33,6 +33,7 @@
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/hts_os.h>
- #include "bcftools.h"
- #include "filter.h"
-
-@@ -144,7 +145,7 @@
- if ( out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
- if (args->record_cmd_line) bcf_hdr_append_version(files->readers[args->iwrite].header,args->argc,args->argv,"bcftools_isec");
-- bcf_hdr_write(out_fh, files->readers[args->iwrite].header);
-+ if ( bcf_hdr_write(out_fh, files->readers[args->iwrite].header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
- }
- if ( !args->nwrite && !out_std && !args->prefix )
- fprintf(stderr,"Note: -w option not given, printing list of sites...\n");
-@@ -195,8 +196,8 @@
-
- if ( out_std )
- {
-- if ( bcf_sr_has_line(files,args->iwrite) )
-- bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0]);
-+ if ( bcf_sr_has_line(files,args->iwrite) && bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0])!=0 )
-+ error("[%s] Error: cannot write to %s\n", __func__, args->output_fname ? args->output_fname : "standard output");
- continue;
- }
- else if ( args->fh_sites )
-@@ -218,7 +219,8 @@
- for (i=0; i<files->nreaders; i++)
- kputc(bcf_sr_has_line(files,i)?'1':'0', &str);
- kputc('\n', &str);
-- fwrite(str.s,sizeof(char),str.l,args->fh_sites);
-+ if ( fwrite(str.s,sizeof(char),str.l,args->fh_sites)!=str.l )
-+ error("[%s] Error: failed to write %d bytes to %s\n", __func__,(int)str.l,args->output_fname ? args->output_fname : "standard output");
- }
-
- if ( args->prefix )
-@@ -226,9 +228,15 @@
- if ( args->isec_op==OP_VENN && ret==3 )
- {
- if ( !args->nwrite || args->write[0] )
-- bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0));
-+ {
-+ if ( bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0))!=0 )
-+ error("[%s] Error: cannot write\n", __func__);
-+ }
- if ( !args->nwrite || args->write[1] )
-- bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1));
-+ {
-+ if ( bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1))!=0 )
-+ error("[%s] Error: cannot write\n", __func__);
-+ }
- }
- else
- {
-@@ -236,13 +244,13 @@
- {
- if ( !bcf_sr_has_line(files,i) ) continue;
- if ( args->write && !args->write[i] ) continue;
-- bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0]);
-+ if ( bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0])!=0 ) error("[%s] Error: cannot write\n", __func__);
- }
- }
- }
- }
- if ( str.s ) free(str.s);
-- if ( out_fh ) hts_close(out_fh);
-+ if ( out_fh && hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname? args->output_fname : "-");
- }
-
- static void add_filter(args_t *args, char *expr, int logic)
-@@ -352,7 +360,7 @@
- if ( !args->fh_out[i] ) error("Could not open %s\n", args->fnames[i]); \
- if ( args->n_threads ) hts_set_threads(args->fh_out[i], args->n_threads); \
- if (args->record_cmd_line) bcf_hdr_append_version(args->files->readers[j].header,args->argc,args->argv,"bcftools_isec"); \
-- bcf_hdr_write(args->fh_out[i], args->files->readers[j].header); \
-+ if ( bcf_hdr_write(args->fh_out[i], args->files->readers[j].header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fnames[i]); \
- }
- if ( !args->nwrite || args->write[0] )
- {
-@@ -425,7 +433,7 @@
- for (i=0; i<n; i++)
- {
- if ( !args->fnames[i] ) continue;
-- hts_close(args->fh_out[i]);
-+ if ( hts_close(args->fh_out[i])!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fnames[i]);
- if ( args->output_type==FT_VCF_GZ )
- {
- tbx_conf_t conf = tbx_conf_vcf;
-@@ -465,7 +473,7 @@
- fprintf(stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, " -w, --write <list> list of files to write with -p given as 1-based indexes. By default, all files are written\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Examples:\n");
-@@ -478,6 +486,9 @@
- fprintf(stderr, " # Extract and write records from A shared by both A and B using exact allele match\n");
- fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n =2 -w 1\n");
- fprintf(stderr, "\n");
-+ fprintf(stderr, " # Extract and write records from C found in A and C but not in B\n");
-+ fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz C.vcf.gz -p dir -n~101 -w 3\n");
-+ fprintf(stderr, "\n");
- fprintf(stderr, " # Extract records private to A or B comparing by position only\n");
- fprintf(stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n -1 -c all\n");
- fprintf(stderr, "\n");
-@@ -540,7 +551,9 @@
- else error("The --collapse string \"%s\" not recognised.\n", optarg);
- break;
- case 'f': args->files->apply_filters = optarg; break;
-- case 'C': args->isec_op = OP_COMPLEMENT; break;
-+ case 'C':
-+ if ( args->isec_op!=0 && args->isec_op!=OP_COMPLEMENT ) error("Error: either -C or -n should be given, not both.\n");
-+ args->isec_op = OP_COMPLEMENT; break;
- case 'r': args->regions_list = optarg; break;
- case 'R': args->regions_list = optarg; regions_is_file = 1; break;
- case 't': args->targets_list = optarg; break;
-@@ -551,6 +564,8 @@
- case 'e': add_filter(args, optarg, FLT_EXCLUDE); break;
- case 'n':
- {
-+ if ( args->isec_op!=0 && args->isec_op==OP_COMPLEMENT ) error("Error: either -C or -n should be given, not both.\n");
-+ if ( args->isec_op!=0 ) error("Error: -n should be given only once.\n");
- char *p = optarg;
- if ( *p=='-' ) { args->isec_op = OP_MINUS; p++; }
- else if ( *p=='+' ) { args->isec_op = OP_PLUS; p++; }
-@@ -565,7 +580,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfisec.c.pysam.c
-+++ python-pysam/bcftools/vcfisec.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* vcfisec.c -- Create intersections, unions and complements of VCF files.
-
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -35,6 +35,7 @@
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/hts_os.h>
- #include "bcftools.h"
- #include "filter.h"
-
-@@ -146,7 +147,7 @@
- if ( out_fh == NULL ) error("Can't write to %s: %s\n", args->output_fname? args->output_fname : "standard output", strerror(errno));
- if ( args->n_threads ) hts_set_threads(out_fh, args->n_threads);
- if (args->record_cmd_line) bcf_hdr_append_version(files->readers[args->iwrite].header,args->argc,args->argv,"bcftools_isec");
-- bcf_hdr_write(out_fh, files->readers[args->iwrite].header);
-+ if ( bcf_hdr_write(out_fh, files->readers[args->iwrite].header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname?args->output_fname:"standard output");
- }
- if ( !args->nwrite && !out_std && !args->prefix )
- fprintf(bcftools_stderr,"Note: -w option not given, printing list of sites...\n");
-@@ -197,8 +198,8 @@
-
- if ( out_std )
- {
-- if ( bcf_sr_has_line(files,args->iwrite) )
-- bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0]);
-+ if ( bcf_sr_has_line(files,args->iwrite) && bcf_write1(out_fh, files->readers[args->iwrite].header, files->readers[args->iwrite].buffer[0])!=0 )
-+ error("[%s] Error: cannot write to %s\n", __func__, args->output_fname ? args->output_fname : "standard output");
- continue;
- }
- else if ( args->fh_sites )
-@@ -220,7 +221,8 @@
- for (i=0; i<files->nreaders; i++)
- kputc(bcf_sr_has_line(files,i)?'1':'0', &str);
- kputc('\n', &str);
-- fwrite(str.s,sizeof(char),str.l,args->fh_sites);
-+ if ( fwrite(str.s,sizeof(char),str.l,args->fh_sites)!=str.l )
-+ error("[%s] Error: failed to write %d bytes to %s\n", __func__,(int)str.l,args->output_fname ? args->output_fname : "standard output");
- }
-
- if ( args->prefix )
-@@ -228,9 +230,15 @@
- if ( args->isec_op==OP_VENN && ret==3 )
- {
- if ( !args->nwrite || args->write[0] )
-- bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0));
-+ {
-+ if ( bcf_write1(args->fh_out[2], bcf_sr_get_header(files,0), bcf_sr_get_line(files,0))!=0 )
-+ error("[%s] Error: cannot write\n", __func__);
-+ }
- if ( !args->nwrite || args->write[1] )
-- bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1));
-+ {
-+ if ( bcf_write1(args->fh_out[3], bcf_sr_get_header(files,1), bcf_sr_get_line(files,1))!=0 )
-+ error("[%s] Error: cannot write\n", __func__);
-+ }
- }
- else
- {
-@@ -238,13 +246,13 @@
- {
- if ( !bcf_sr_has_line(files,i) ) continue;
- if ( args->write && !args->write[i] ) continue;
-- bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0]);
-+ if ( bcf_write1(args->fh_out[i], files->readers[i].header, files->readers[i].buffer[0])!=0 ) error("[%s] Error: cannot write\n", __func__);
- }
- }
- }
- }
- if ( str.s ) free(str.s);
-- if ( out_fh ) hts_close(out_fh);
-+ if ( out_fh && hts_close(out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname? args->output_fname : "-");
- }
-
- static void add_filter(args_t *args, char *expr, int logic)
-@@ -354,7 +362,7 @@
- if ( !args->fh_out[i] ) error("Could not open %s\n", args->fnames[i]); \
- if ( args->n_threads ) hts_set_threads(args->fh_out[i], args->n_threads); \
- if (args->record_cmd_line) bcf_hdr_append_version(args->files->readers[j].header,args->argc,args->argv,"bcftools_isec"); \
-- bcf_hdr_write(args->fh_out[i], args->files->readers[j].header); \
-+ if ( bcf_hdr_write(args->fh_out[i], args->files->readers[j].header)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fnames[i]); \
- }
- if ( !args->nwrite || args->write[0] )
- {
-@@ -427,7 +435,7 @@
- for (i=0; i<n; i++)
- {
- if ( !args->fnames[i] ) continue;
-- hts_close(args->fh_out[i]);
-+ if ( hts_close(args->fh_out[i])!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fnames[i]);
- if ( args->output_type==FT_VCF_GZ )
- {
- tbx_conf_t conf = tbx_conf_vcf;
-@@ -467,7 +475,7 @@
- fprintf(bcftools_stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, " -w, --write <list> list of files to write with -p given as 1-based indexes. By default, all files are written\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Examples:\n");
-@@ -480,6 +488,9 @@
- fprintf(bcftools_stderr, " # Extract and write records from A shared by both A and B using exact allele match\n");
- fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n =2 -w 1\n");
- fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, " # Extract and write records from C found in A and C but not in B\n");
-+ fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz C.vcf.gz -p dir -n~101 -w 3\n");
-+ fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, " # Extract records private to A or B comparing by position only\n");
- fprintf(bcftools_stderr, " bcftools isec A.vcf.gz B.vcf.gz -p dir -n -1 -c all\n");
- fprintf(bcftools_stderr, "\n");
-@@ -542,7 +553,9 @@
- else error("The --collapse string \"%s\" not recognised.\n", optarg);
- break;
- case 'f': args->files->apply_filters = optarg; break;
-- case 'C': args->isec_op = OP_COMPLEMENT; break;
-+ case 'C':
-+ if ( args->isec_op!=0 && args->isec_op!=OP_COMPLEMENT ) error("Error: either -C or -n should be given, not both.\n");
-+ args->isec_op = OP_COMPLEMENT; break;
- case 'r': args->regions_list = optarg; break;
- case 'R': args->regions_list = optarg; regions_is_file = 1; break;
- case 't': args->targets_list = optarg; break;
-@@ -553,6 +566,8 @@
- case 'e': add_filter(args, optarg, FLT_EXCLUDE); break;
- case 'n':
- {
-+ if ( args->isec_op!=0 && args->isec_op==OP_COMPLEMENT ) error("Error: either -C or -n should be given, not both.\n");
-+ if ( args->isec_op!=0 ) error("Error: -n should be given only once.\n");
- char *p = optarg;
- if ( *p=='-' ) { args->isec_op = OP_MINUS; p++; }
- else if ( *p=='+' ) { args->isec_op = OP_PLUS; p++; }
-@@ -567,7 +582,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfmerge.c
-+++ python-pysam/bcftools/vcfmerge.c
-@@ -1,6 +1,6 @@
- /* vcfmerge.c -- Merge multiple VCF/BCF files to create one multi-sample file.
-
-- Copyright (C) 2012-2016 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -28,6 +28,7 @@
- #include <errno.h>
- #include <unistd.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-@@ -84,7 +85,7 @@
- typedef struct
- {
- bcf1_t *line;
-- int end, active;
-+ int end, active; // end: 0-based INFO/END
- }
- gvcf_aux_t;
-
-@@ -121,13 +122,16 @@
- int nfmt_map; // number of rows in the fmt_map array
- int *agr_map, nagr_map, magr_map; // mapping between Number=AGR element indexes
- void *tmp_arr;
-- int ntmp_arr;
-+ size_t ntmp_arr;
- buffer_t *buf;
- AGR_info_t *AGR_info;
- int nAGR_info, mAGR_info;
- bcf_srs_t *files;
-- int gvcf_min, gvcf_break; // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present
-- gvcf_aux_t *gvcf; // buffer of gVCF lines
-+ int gvcf_min, // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present
-+ gvcf_break; // 0-based position of a next record which breaks a gVCF block
-+ gvcf_aux_t *gvcf; // buffer of gVCF lines, for each reader one line
-+ int nout_smpl;
-+ kstring_t *str;
- }
- maux_t;
-
-@@ -397,7 +401,7 @@
- {
- int msize = args->maux->ntmp_arr / rule->type_size;
- int ret = bcf_get_info_values(hdr, line, rule->hdr_tag, &args->maux->tmp_arr, &msize, rule->type);
-- if ( ret<=0 ) error("FIXME: error parsing %s at %s:%d .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1,ret);
-+ if ( ret<=0 ) error("FIXME: error parsing %s at %s:%"PRId64" .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1,ret);
- args->maux->ntmp_arr = msize * rule->type_size;
-
- rule->nblocks++;
-@@ -416,7 +420,7 @@
- int i, j;
- if ( var_len==BCF_VL_A )
- {
-- if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%"PRId64"\n",rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- args->maux->nagr_map = ret;
- hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map);
- // create mapping from source file ALT indexes to dst file indexes
-@@ -425,7 +429,7 @@
- }
- else if ( var_len==BCF_VL_R )
- {
-- if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%"PRId64"\n",rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- args->maux->nagr_map = ret;
- hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map);
- for (i=0; i<ret; i++) args->maux->agr_map[i] = als->map[i];
-@@ -460,7 +464,7 @@
- else
- {
- if ( rule->nblocks>1 && ret!=rule->block_size )
-- error("Mismatch in number of values for INFO/%s at %s:%d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ error("Mismatch in number of values for INFO/%s at %s:%"PRId64"\n", rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- rule->block_size = ret;
- args->maux->nagr_map = 0;
- }
-@@ -501,20 +505,24 @@
- int i;
- for (i=0; i<bcf_hdr_nsamples(hr); i++)
- {
-- char *name = hr->samples[i];
-- if ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 )
-+ char *rmme = NULL, *name = hr->samples[i];
-+ while ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 )
- {
- // there is a sample with the same name
- if ( !force_samples ) error("Error: Duplicate sample names (%s), use --force-samples to proceed anyway.\n", name);
-
-- int len = strlen(hr->samples[i]) + strlen(clash_prefix) + 1;
-- name = (char*) malloc(sizeof(char)*(len+1));
-- sprintf(name,"%s:%s",clash_prefix,hr->samples[i]);
-- bcf_hdr_add_sample(hw,name);
-- free(name);
-+ // Resolve conflicting samples names. For example, replace:
-+ // A + A with A,2:A
-+ // A,2:A + A with A,2:A,2:2:A
-+
-+ int len = strlen(name) + strlen(clash_prefix) + 1;
-+ char *tmp = (char*) malloc(sizeof(char)*(len+1));
-+ sprintf(tmp,"%s:%s",clash_prefix,name);
-+ free(rmme);
-+ rmme = name = tmp;
- }
-- else
-- bcf_hdr_add_sample(hw,name);
-+ bcf_hdr_add_sample(hw,name);
-+ free(rmme);
- }
- }
-
-@@ -677,6 +685,8 @@
- int i, n_smpl = 0;
- for (i=0; i<ma->n; i++)
- n_smpl += bcf_hdr_nsamples(files->readers[i].header);
-+ ma->nout_smpl = n_smpl;
-+ assert( n_smpl==bcf_hdr_nsamples(args->out_hdr) );
- if ( args->do_gvcf )
- {
- ma->gvcf = (gvcf_aux_t*) calloc(ma->n,sizeof(gvcf_aux_t));
-@@ -688,11 +698,14 @@
- ma->buf = (buffer_t*) calloc(ma->n,sizeof(buffer_t));
- for (i=0; i<ma->n; i++)
- ma->buf[i].rid = -1;
-+ ma->str = (kstring_t*) calloc(n_smpl,sizeof(kstring_t));
- return ma;
- }
- void maux_destroy(maux_t *ma)
- {
- int i,j;
-+ for (i=0; i<ma->nout_smpl; i++) free(ma->str[i].s);
-+ free(ma->str);
- for (i=0; i<ma->mals; i++)
- {
- free(ma->als[i]);
-@@ -776,7 +789,7 @@
- }
- ma->buf[i].end = j;
- ma->buf[i].cur = -1;
-- if ( ma->buf[i].beg < ma->buf[i].end )
-+ if ( ma->buf[i].beg < ma->buf[i].end )
- {
- ma->buf[i].lines = ma->files->readers[i].buffer;
- if ( ma->gvcf ) ma->gvcf[i].active = 0; // gvcf block cannot overlap with the next record
-@@ -1008,7 +1021,7 @@
- int end_src = start_src;
- while ( end_src<src_len && src[end_src] && src[end_src]!=',' ) end_src++;
-
-- int nsrc_cpy = end_src - start_src;
-+ int nsrc_cpy = end_src - start_src; // number of chars to copy (excluding \0)
- if ( nsrc_cpy==1 && src[start_src]=='.' ) return 0; // don't write missing values, dst is already initialized
-
- int ith_dst = 0, start_dst = 0;
-@@ -1066,7 +1079,7 @@
- agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s;
- }
- else
-- error("Not ready for type [%d]: %s at %d\n", info->type,agr->hdr_tag,line->pos+1);
-+ error("Not ready for type [%d]: %s at %"PRId64"\n", info->type,agr->hdr_tag,(int64_t) line->pos+1);
- }
-
- if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT )
-@@ -1137,7 +1150,7 @@
- {
- int ret = copy_string_field((char*)info->vptr, iori-ifrom, info->len, &tmp, als->map[iori]-ifrom);
- if ( ret )
-- error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag);
-+ error("Error at %s:%"PRId64": wrong number of fields in %s?\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,agr->hdr_tag);
- }
- }
- else
-@@ -1153,7 +1166,7 @@
- int knew = bcf_alleles2gt(inew,jnew);
- int ret = copy_string_field((char*)info->vptr, kori, info->len, &tmp, knew);
- if ( ret )
-- error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag);
-+ error("Error at %s:%"PRId64": wrong number of fields in %s?\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,agr->hdr_tag);
- }
- }
- }
-@@ -1227,7 +1240,7 @@
- }
- kitr = kh_get(strdict, tmph, key);
- int idx = kh_val(tmph, kitr);
-- if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%d\n", key,bcf_seqname(hdr,line),line->pos+1);
-+ if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%"PRId64"\n", key,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- merge_AGR_info_tag(hdr, line,inf,len,&ma->buf[i].rec[irec],&ma->AGR_info[idx]);
- continue;
- }
-@@ -1318,6 +1331,7 @@
- bcf_hdr_t *out_hdr = args->out_hdr;
- maux_t *ma = args->maux;
- int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-
- int nsize = 0, msize = sizeof(int32_t);
- for (i=0; i<files->nreaders; i++)
-@@ -1333,6 +1347,13 @@
- {
- ma->ntmp_arr = nsamples*nsize*msize;
- ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Could not allocate %zu bytes\n",ma->ntmp_arr);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(stderr,"Warning: Too many genotypes at %s:%"PRId64", requires %zu bytes, skipping.\n", bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
- }
- memset(ma->smpl_ploidy,0,nsamples*sizeof(int));
-
-@@ -1412,15 +1433,126 @@
- bcf_update_format_int32(out_hdr, out, "GT", (int32_t*)ma->tmp_arr, nsamples*nsize);
- }
-
-+void merge_format_string(args_t *args, const char *key, bcf_fmt_t **fmt_map, bcf1_t *out, int length, int nsize)
-+{
-+ bcf_srs_t *files = args->files;
-+ bcf_hdr_t *out_hdr = args->out_hdr;
-+ maux_t *ma = args->maux;
-+ int i,j, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-+
-+ // initialize empty strings, a dot for each value, e.g. ".,.,."
-+ int nmax = 0;
-+ for (i=0; i<nsamples; i++)
-+ {
-+ kstring_t *str = &ma->str[i];
-+ if ( length==BCF_VL_FIXED || length==BCF_VL_VAR )
-+ {
-+ str->l = 1;
-+ ks_resize(str, str->l+1);
-+ str->s[0] = '.';
-+ }
-+ else
-+ {
-+ str->l = nsize*2 - 1;
-+ ks_resize(str, str->l+1);
-+ str->s[0] = '.';
-+ for (j=1; j<nsize; j++) str->s[j*2-1] = ',', str->s[j*2] = '.';
-+ }
-+ str->s[str->l] = 0;
-+ if ( nmax < str->l ) nmax = str->l;
-+ }
-+
-+ // fill in values for each sample
-+ int ismpl = 0;
-+ for (i=0; i<files->nreaders; i++)
-+ {
-+ bcf_sr_t *reader = &files->readers[i];
-+ bcf_hdr_t *hdr = reader->header;
-+ bcf_fmt_t *fmt_ori = fmt_map[i];
-+ if ( !fmt_ori )
-+ {
-+ // the field is not present in this file
-+ ismpl += bcf_hdr_nsamples(hdr);
-+ continue;
-+ }
-+
-+ bcf1_t *line = maux_get_line(args, i);
-+ int irec = ma->buf[i].cur;
-+ char *src = (char*) fmt_ori->p;
-+
-+ if ( length==BCF_VL_FIXED || length==BCF_VL_VAR || (line->n_allele==out->n_allele && !ma->buf[i].rec[irec].als_differ) )
-+ {
-+ // alleles unchanged, copy over
-+ for (j=0; j<bcf_hdr_nsamples(hdr); j++)
-+ {
-+ kstring_t *str = &ma->str[ismpl++];
-+ str->l = 0;
-+ kputsn(src, fmt_ori->n, str);
-+ if ( nmax < str->l ) nmax = str->l;
-+ src += fmt_ori->n;
-+ }
-+ continue;
-+ }
-+ // NB, what is below is not the fastest way, copy_string_field() keeps
-+ // finding the indexes repeatedly at multiallelic sites
-+ if ( length==BCF_VL_A || length==BCF_VL_R )
-+ {
-+ int ifrom = length==BCF_VL_A ? 1 : 0;
-+ for (j=0; j<bcf_hdr_nsamples(hdr); j++)
-+ {
-+ kstring_t *str = &ma->str[ismpl++];
-+ int iori,inew;
-+ for (iori=ifrom; iori<line->n_allele; iori++)
-+ {
-+ inew = ma->buf[i].rec[irec].map[iori] - ifrom;
-+ int ret = copy_string_field(src, iori - ifrom, fmt_ori->size, str, inew);
-+ if ( ret<-1 ) error("[E::%s] fixme: internal error at %s:%"PRId64" .. %d\n",__func__,bcf_seqname(hdr,line),(int64_t) line->pos+1,ret);
-+ }
-+ src += fmt_ori->size;
-+ }
-+ continue;
-+ }
-+ assert( length==BCF_VL_G );
-+ error("[E::%s] Merging of Number=G FORMAT strings (in your case FORMAT/%s) is not supported yet, sorry!\n"
-+ "Please open an issue on github if this feature is essential for you. However, note that using FORMAT strings is not\n"
-+ "a good idea in general - it is slow to parse and does not compress well, it is better to use integer codes instead.\n"
-+ "If you don't really need it, use `bcftools annotate -x` to remove the annotation before merging.\n", __func__,key);
-+ }
-+ // update the record
-+ if ( ma->ntmp_arr < nsamples*nmax )
-+ {
-+ ma->ntmp_arr = nsamples*nmax;
-+ ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Could not allocate %zu bytes\n",ma->ntmp_arr);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(stderr,"Warning: The row size is too big for FORMAT/%s at %s:%"PRId64", requires %zu bytes, skipping.\n", key,bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
-+ }
-+ char *tgt = (char*) ma->tmp_arr;
-+ for (i=0; i<nsamples; i++)
-+ {
-+ memcpy(tgt, ma->str[i].s, ma->str[i].l);
-+ if ( ma->str[i].l < nmax ) memset(tgt + ma->str[i].l, 0, nmax - ma->str[i].l);
-+ tgt += nmax;
-+ }
-+ bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nmax);
-+}
-+
- void merge_format_field(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out)
- {
- bcf_srs_t *files = args->files;
- bcf_hdr_t *out_hdr = args->out_hdr;
- maux_t *ma = args->maux;
- int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-
- const char *key = NULL;
-- int nsize = 0, length = BCF_VL_FIXED, type = -1;
-+ size_t nsize = 0, length = BCF_VL_FIXED;
-+ int type = -1;
- for (i=0; i<files->nreaders; i++)
- {
- if ( !maux_get_line(args,i) ) continue;
-@@ -1447,12 +1579,24 @@
- }
- if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n;
- }
-+ if ( type==BCF_BT_CHAR )
-+ {
-+ merge_format_string(args, key, fmt_map, out, length, nsize);
-+ return;
-+ }
-
-- int msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t);
-+ size_t msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t);
- if ( ma->ntmp_arr < nsamples*nsize*msize )
- {
- ma->ntmp_arr = nsamples*nsize*msize;
- ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Failed to allocate %zu bytes at %s:%"PRId64" for FORMAT/%s\n", ma->ntmp_arr,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,key);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(stderr,"Warning: The row size is too big for FORMAT/%s at %s:%"PRId64", requires %zu bytes, skipping.\n", key,bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
- }
-
- // Fill the temp array for all samples by collecting values from all files
-@@ -1463,6 +1607,7 @@
- bcf_fmt_t *fmt_ori = fmt_map[i];
- bcf1_t *line = maux_get_line(args, i);
- int irec = ma->buf[i].cur;
-+
- if ( fmt_ori )
- {
- type = fmt_ori->type;
-@@ -1471,23 +1616,23 @@
- {
- // if all fields are missing then n==1 is valid
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori*(nals_ori+1)/2 && fmt_map[i]->n != nals_ori )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=G, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=G, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- else if ( length==BCF_VL_A )
- {
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori-1 )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=A, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=A, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- else if ( length==BCF_VL_R )
- {
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=R, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=R, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- }
-
-@@ -1619,15 +1764,12 @@
- case BCF_BT_INT16: BRANCH(int32_t, int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break;
- case BCF_BT_INT32: BRANCH(int32_t, int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break;
- case BCF_BT_FLOAT: BRANCH(float, float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), bcf_float_set_missing(*tgt), bcf_float_set_vector_end(*tgt)); break;
-- case BCF_BT_CHAR: BRANCH(uint8_t, uint8_t, *src==bcf_str_missing, *src==bcf_str_vector_end, *tgt=bcf_str_missing, *tgt=bcf_str_vector_end); break;
- default: error("Unexpected case: %d, %s\n", type, key);
- }
- #undef BRANCH
- }
- if ( type==BCF_BT_FLOAT )
- bcf_update_format_float(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize);
-- else if ( type==BCF_BT_CHAR )
-- bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize);
- else
- bcf_update_format_int32(out_hdr, out, key, (int32_t*)ma->tmp_arr, nsamples*nsize);
- }
-@@ -1718,6 +1860,7 @@
- {
- if ( !gaux[i].active ) continue;
- bcf1_t *line = maux_get_line(args, i);
-+ if ( !line ) continue;
- int irec = maux->buf[i].cur;
-
- hts_expand(int, line->n_allele, maux->buf[i].rec[irec].mmap, maux->buf[i].rec[irec].map);
-@@ -1739,7 +1882,7 @@
- if ( !maux->als )
- {
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i);
-- error("Failed to merge alleles at %s:%d\n",bcf_seqname(hdr,line),line->pos+1);
-+ error("Failed to merge alleles at %s:%"PRId64"\n",bcf_seqname(hdr,line),(int64_t) line->pos+1);
- }
- }
- }
-@@ -1748,6 +1891,7 @@
- /*
- Output staged gVCF blocks, end is the last position of the block. Assuming
- gaux[i].active flags are set and maux_get_line returns correct lines.
-+ Both start,end coordinates are 0-based.
- */
- void gvcf_write_block(args_t *args, int start, int end)
- {
-@@ -1757,7 +1901,7 @@
- assert(gaux);
-
- // Update POS
-- int min = INT_MAX;
-+ int min = INT_MAX; // the minimum active gVCF INFO/END (0-based)
- char ref = 'N';
- for (i=0; i<args->files->nreaders; i++)
- {
-@@ -1778,7 +1922,7 @@
- if ( min > gaux[i].end ) min = gaux[i].end;
- }
- // Check for valid gVCF blocks in this region
-- if ( min==INT_MAX )
-+ if ( min==INT_MAX ) // this probably should not happen
- {
- assert(0);
- maux->gvcf_min = 0;
-@@ -1814,7 +1958,7 @@
- }
- else
- bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0);
-- bcf_write1(args->out_fh, args->out_hdr, out);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- bcf_clear1(out);
-
-
-@@ -1872,7 +2016,7 @@
- }
-
- // When called on a region, trim the blocks accordingly
-- int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos;
-+ int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos; // the start of a new gvcf block to output
- if ( args->regs )
- {
- int rstart = -1, rend = -1;
-@@ -1892,7 +2036,7 @@
- // does the block end before the new line or is it interrupted?
- int tmp = maux->gvcf_min < flush_until ? maux->gvcf_min : flush_until;
- if ( start > tmp-1 ) break;
-- gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based
-+ gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based, passing 0-based coordinates
- start = tmp;
- }
- }
-@@ -1901,6 +2045,7 @@
- Check incoming lines for new gVCF blocks, set pointer to the current source
- buffer (gvcf or readers). In contrast to gvcf_flush, this function can be
- called only after maux_reset as it relies on updated maux buffers.
-+ The coordinate is 0-based
- */
- void gvcf_stage(args_t *args, int pos)
- {
-@@ -1935,8 +2080,16 @@
- int ret = bcf_get_info_int32(hdr,line,"END",&end,&nend);
- if ( ret==1 )
- {
-+ if ( end[0] == line->pos + 1 ) // POS and INFO/END are identical, treat as if a normal w/o INFO/END
-+ {
-+ maux->gvcf_break = line->pos;
-+ continue;
-+ }
-+ if ( end[0] <= line->pos ) error("Error: Incorrect END at %s:%"PRId64" .. END=%d\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,end[0]);
-+
- // END is set, this is a new gVCF block. Cache this line in gaux[i] and swap with
- // an empty record: the gaux line must be kept until we reach its END.
-+
- gaux[i].active = 1;
- gaux[i].end = end[0] - 1;
- SWAP(bcf1_t*,args->files->readers[i].buffer[irec],gaux[i].line);
-@@ -1982,7 +2135,15 @@
- {
- // Invalidate pointer to reader's buffer or else gvcf_flush will attempt
- // to use the old lines via maux_get_line()
-- if ( ma->gvcf && !ma->gvcf[ir].active ) ma->buf[ir].cur = -1;
-+ if ( ma->gvcf )
-+ {
-+ if ( ma->gvcf[ir].active )
-+ {
-+ if ( ma->pos >= ma->gvcf[ir].end ) ma->gvcf[ir].active = 0;
-+ else if ( ma->buf[ir].cur==-1 ) ma->buf[ir].cur = ma->buf[ir].beg; // re-activate interrupted gVCF block
-+ }
-+ if ( !ma->gvcf[ir].active ) ma->buf[ir].cur = -1;
-+ }
-
- bcf_sr_t *reader = bcf_sr_get_reader(args->files,ir);
- if ( !reader->nbuffer ) continue; // nothing to clean
-@@ -2043,14 +2204,15 @@
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i);
- const char *chr = bcf_hdr_id2name(hdr, maux->buf[i].rid);
- fprintf(stderr,"\t");
-- for (j=maux->buf[i].beg; j<maux->buf[i].end; j++) fprintf(stderr," %s:%d",chr,maux->buf[i].lines[j]->pos+1);
-+ for (j=maux->buf[i].beg; j<maux->buf[i].end; j++) fprintf(stderr," %s:%"PRId64,chr,(int64_t) maux->buf[i].lines[j]->pos+1);
- }
- fprintf(stderr,"\n");
- }
-+ fprintf(stderr,"gvcf_min=%d\n", args->maux->gvcf_min);
- for (i=0; i<args->files->nreaders; i++)
- {
- fprintf(stderr,"reader %d:\tgvcf_active=%d", i,maux->gvcf[i].active);
-- if ( maux->gvcf[i].active ) fprintf(stderr,"\tpos,end=%d,%d", maux->gvcf[i].line->pos+1,maux->gvcf[i].end+1);
-+ if ( maux->gvcf[i].active ) fprintf(stderr,"\tpos,end=%"PRId64",%"PRId64, (int64_t) maux->gvcf[i].line->pos+1,(int64_t) maux->gvcf[i].end+1);
- fprintf(stderr,"\n");
- }
- fprintf(stderr,"\n");
-@@ -2185,7 +2347,7 @@
- }
- // normalize alleles
- maux->als = merge_alleles(line->d.allele, line->n_allele, buf->rec[j].map, maux->als, &maux->nals, &maux->mals);
-- if ( !maux->als ) error("Failed to merge alleles at %s:%d in %s\n",maux->chr,line->pos+1,reader->fname);
-+ if ( !maux->als ) error("Failed to merge alleles at %s:%"PRId64" in %s\n",maux->chr,(int64_t) line->pos+1,reader->fname);
- hts_expand0(int, maux->nals, maux->ncnt, maux->cnt);
- for (k=1; k<line->n_allele; k++)
- maux->cnt[ buf->rec[j].map[k] ]++; // how many times an allele appears in the files
-@@ -2286,33 +2448,46 @@
- if ( args->do_gvcf )
- bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0);
- merge_format(args, out);
-- bcf_write1(args->out_fh, args->out_hdr, out);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- bcf_clear1(out);
- }
-
- void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd)
- {
- kstring_t str = {0,0,0};
-- ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version());
-- bcf_hdr_append(hdr,str.s);
-+ int e = 0;
-+ if (ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version()) < 0)
-+ goto fail;
-+ if (bcf_hdr_append(hdr,str.s) < 0)
-+ goto fail;
-
- str.l = 0;
-- ksprintf(&str,"##%sCommand=%s", cmd, argv[0]);
-+ e |= ksprintf(&str,"##%sCommand=%s", cmd, argv[0]) < 0;
- int i;
- for (i=1; i<argc; i++)
- {
- if ( strchr(argv[i],' ') )
-- ksprintf(&str, " '%s'", argv[i]);
-+ e |= ksprintf(&str, " '%s'", argv[i]) < 0;
- else
-- ksprintf(&str, " %s", argv[i]);
-+ e |= ksprintf(&str, " %s", argv[i]) < 0;
- }
-- kputs("; Date=", &str);
-- time_t tm; time(&tm); kputs(ctime(&tm), &str);
-- kputc('\n', &str);
-- bcf_hdr_append(hdr,str.s);
-- free(str.s);
-+ e |= kputs("; Date=", &str) < 0;
-+ time_t tm; time(&tm);
-+ e |= kputs(ctime(&tm), &str) < 0;
-+ e |= kputc('\n', &str) < 0;
-+ if (e)
-+ goto fail;
-+ if (bcf_hdr_append(hdr,str.s) < 0)
-+ goto fail;
-+ free(ks_release(&str));
-+
-+ if (bcf_hdr_sync(hdr) < 0)
-+ goto fail;
-+ return;
-
-- bcf_hdr_sync(hdr);
-+ fail:
-+ free(str.s);
-+ error_errno("[%s] Failed to add program information to header", __func__);
- }
-
- void merge_vcf(args_t *args)
-@@ -2331,20 +2506,21 @@
- int i;
- for (i=0; i<args->files->nreaders; i++)
- {
-- char buf[10]; snprintf(buf,10,"%d",i+1);
-+ char buf[24]; snprintf(buf,sizeof buf,"%d",i+1);
- merge_headers(args->out_hdr, args->files->readers[i].header,buf,args->force_samples);
- }
- if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_merge");
-- bcf_hdr_sync(args->out_hdr);
-+ if (bcf_hdr_sync(args->out_hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- info_rules_init(args);
-
- bcf_hdr_set_version(args->out_hdr, bcf_hdr_get_version(args->files->readers[0].header));
-- bcf_hdr_write(args->out_fh, args->out_hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->out_hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->header_only )
- {
- bcf_hdr_destroy(args->out_hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- return;
- }
-
-@@ -2379,7 +2555,7 @@
- info_rules_destroy(args);
- maux_destroy(args->maux);
- bcf_hdr_destroy(args->out_hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- bcf_destroy1(args->out_line);
- kh_destroy(strdict, args->tmph);
- if ( args->tmps.m ) free(args->tmps.s);
-@@ -2410,7 +2586,7 @@
- fprintf(stderr, " -O, --output-type <b|u|z|v> 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n");
- fprintf(stderr, " -r, --regions <region> restrict to comma-separated list of regions\n");
- fprintf(stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-@@ -2497,7 +2673,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfmerge.c.pysam.c
-+++ python-pysam/bcftools/vcfmerge.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* vcfmerge.c -- Merge multiple VCF/BCF files to create one multi-sample file.
-
-- Copyright (C) 2012-2016 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -30,6 +30,7 @@
- #include <errno.h>
- #include <unistd.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-@@ -86,7 +87,7 @@
- typedef struct
- {
- bcf1_t *line;
-- int end, active;
-+ int end, active; // end: 0-based INFO/END
- }
- gvcf_aux_t;
-
-@@ -123,13 +124,16 @@
- int nfmt_map; // number of rows in the fmt_map array
- int *agr_map, nagr_map, magr_map; // mapping between Number=AGR element indexes
- void *tmp_arr;
-- int ntmp_arr;
-+ size_t ntmp_arr;
- buffer_t *buf;
- AGR_info_t *AGR_info;
- int nAGR_info, mAGR_info;
- bcf_srs_t *files;
-- int gvcf_min, gvcf_break; // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present
-- gvcf_aux_t *gvcf; // buffer of gVCF lines
-+ int gvcf_min, // min buffered gvcf END position (NB: gvcf_min is 1-based) or 0 if no active lines are present
-+ gvcf_break; // 0-based position of a next record which breaks a gVCF block
-+ gvcf_aux_t *gvcf; // buffer of gVCF lines, for each reader one line
-+ int nout_smpl;
-+ kstring_t *str;
- }
- maux_t;
-
-@@ -399,7 +403,7 @@
- {
- int msize = args->maux->ntmp_arr / rule->type_size;
- int ret = bcf_get_info_values(hdr, line, rule->hdr_tag, &args->maux->tmp_arr, &msize, rule->type);
-- if ( ret<=0 ) error("FIXME: error parsing %s at %s:%d .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1,ret);
-+ if ( ret<=0 ) error("FIXME: error parsing %s at %s:%"PRId64" .. %d\n", rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1,ret);
- args->maux->ntmp_arr = msize * rule->type_size;
-
- rule->nblocks++;
-@@ -418,7 +422,7 @@
- int i, j;
- if ( var_len==BCF_VL_A )
- {
-- if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ if ( ret!=line->n_allele-1 ) error("Wrong number of %s fields at %s:%"PRId64"\n",rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- args->maux->nagr_map = ret;
- hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map);
- // create mapping from source file ALT indexes to dst file indexes
-@@ -427,7 +431,7 @@
- }
- else if ( var_len==BCF_VL_R )
- {
-- if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%d\n",rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ if ( ret!=line->n_allele ) error("Wrong number of %s fields at %s:%"PRId64"\n",rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- args->maux->nagr_map = ret;
- hts_expand(int,args->maux->nagr_map,args->maux->magr_map,args->maux->agr_map);
- for (i=0; i<ret; i++) args->maux->agr_map[i] = als->map[i];
-@@ -462,7 +466,7 @@
- else
- {
- if ( rule->nblocks>1 && ret!=rule->block_size )
-- error("Mismatch in number of values for INFO/%s at %s:%d\n", rule->hdr_tag,bcf_seqname(hdr,line),line->pos+1);
-+ error("Mismatch in number of values for INFO/%s at %s:%"PRId64"\n", rule->hdr_tag,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- rule->block_size = ret;
- args->maux->nagr_map = 0;
- }
-@@ -503,20 +507,24 @@
- int i;
- for (i=0; i<bcf_hdr_nsamples(hr); i++)
- {
-- char *name = hr->samples[i];
-- if ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 )
-+ char *rmme = NULL, *name = hr->samples[i];
-+ while ( bcf_hdr_id2int(hw, BCF_DT_SAMPLE, name)!=-1 )
- {
- // there is a sample with the same name
- if ( !force_samples ) error("Error: Duplicate sample names (%s), use --force-samples to proceed anyway.\n", name);
-
-- int len = strlen(hr->samples[i]) + strlen(clash_prefix) + 1;
-- name = (char*) malloc(sizeof(char)*(len+1));
-- sprintf(name,"%s:%s",clash_prefix,hr->samples[i]);
-- bcf_hdr_add_sample(hw,name);
-- free(name);
-+ // Resolve conflicting samples names. For example, replace:
-+ // A + A with A,2:A
-+ // A,2:A + A with A,2:A,2:2:A
-+
-+ int len = strlen(name) + strlen(clash_prefix) + 1;
-+ char *tmp = (char*) malloc(sizeof(char)*(len+1));
-+ sprintf(tmp,"%s:%s",clash_prefix,name);
-+ free(rmme);
-+ rmme = name = tmp;
- }
-- else
-- bcf_hdr_add_sample(hw,name);
-+ bcf_hdr_add_sample(hw,name);
-+ free(rmme);
- }
- }
-
-@@ -679,6 +687,8 @@
- int i, n_smpl = 0;
- for (i=0; i<ma->n; i++)
- n_smpl += bcf_hdr_nsamples(files->readers[i].header);
-+ ma->nout_smpl = n_smpl;
-+ assert( n_smpl==bcf_hdr_nsamples(args->out_hdr) );
- if ( args->do_gvcf )
- {
- ma->gvcf = (gvcf_aux_t*) calloc(ma->n,sizeof(gvcf_aux_t));
-@@ -690,11 +700,14 @@
- ma->buf = (buffer_t*) calloc(ma->n,sizeof(buffer_t));
- for (i=0; i<ma->n; i++)
- ma->buf[i].rid = -1;
-+ ma->str = (kstring_t*) calloc(n_smpl,sizeof(kstring_t));
- return ma;
- }
- void maux_destroy(maux_t *ma)
- {
- int i,j;
-+ for (i=0; i<ma->nout_smpl; i++) free(ma->str[i].s);
-+ free(ma->str);
- for (i=0; i<ma->mals; i++)
- {
- free(ma->als[i]);
-@@ -778,7 +791,7 @@
- }
- ma->buf[i].end = j;
- ma->buf[i].cur = -1;
-- if ( ma->buf[i].beg < ma->buf[i].end )
-+ if ( ma->buf[i].beg < ma->buf[i].end )
- {
- ma->buf[i].lines = ma->files->readers[i].buffer;
- if ( ma->gvcf ) ma->gvcf[i].active = 0; // gvcf block cannot overlap with the next record
-@@ -1010,7 +1023,7 @@
- int end_src = start_src;
- while ( end_src<src_len && src[end_src] && src[end_src]!=',' ) end_src++;
-
-- int nsrc_cpy = end_src - start_src;
-+ int nsrc_cpy = end_src - start_src; // number of chars to copy (excluding \0)
- if ( nsrc_cpy==1 && src[start_src]=='.' ) return 0; // don't write missing values, dst is already initialized
-
- int ith_dst = 0, start_dst = 0;
-@@ -1068,7 +1081,7 @@
- agr->mbuf = tmp.m; agr->nbuf = tmp.l; agr->buf = (uint8_t*)tmp.s;
- }
- else
-- error("Not ready for type [%d]: %s at %d\n", info->type,agr->hdr_tag,line->pos+1);
-+ error("Not ready for type [%d]: %s at %"PRId64"\n", info->type,agr->hdr_tag,(int64_t) line->pos+1);
- }
-
- if ( info->type==BCF_BT_INT8 || info->type==BCF_BT_INT16 || info->type==BCF_BT_INT32 || info->type==BCF_BT_FLOAT )
-@@ -1139,7 +1152,7 @@
- {
- int ret = copy_string_field((char*)info->vptr, iori-ifrom, info->len, &tmp, als->map[iori]-ifrom);
- if ( ret )
-- error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag);
-+ error("Error at %s:%"PRId64": wrong number of fields in %s?\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,agr->hdr_tag);
- }
- }
- else
-@@ -1155,7 +1168,7 @@
- int knew = bcf_alleles2gt(inew,jnew);
- int ret = copy_string_field((char*)info->vptr, kori, info->len, &tmp, knew);
- if ( ret )
-- error("Error at %s:%d: wrong number of fields in %s?\n", bcf_seqname(hdr,line),line->pos+1,agr->hdr_tag);
-+ error("Error at %s:%"PRId64": wrong number of fields in %s?\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,agr->hdr_tag);
- }
- }
- }
-@@ -1229,7 +1242,7 @@
- }
- kitr = kh_get(strdict, tmph, key);
- int idx = kh_val(tmph, kitr);
-- if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%d\n", key,bcf_seqname(hdr,line),line->pos+1);
-+ if ( idx<0 ) error("Error occurred while processing INFO tag \"%s\" at %s:%"PRId64"\n", key,bcf_seqname(hdr,line),(int64_t) line->pos+1);
- merge_AGR_info_tag(hdr, line,inf,len,&ma->buf[i].rec[irec],&ma->AGR_info[idx]);
- continue;
- }
-@@ -1320,6 +1333,7 @@
- bcf_hdr_t *out_hdr = args->out_hdr;
- maux_t *ma = args->maux;
- int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-
- int nsize = 0, msize = sizeof(int32_t);
- for (i=0; i<files->nreaders; i++)
-@@ -1335,6 +1349,13 @@
- {
- ma->ntmp_arr = nsamples*nsize*msize;
- ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Could not allocate %zu bytes\n",ma->ntmp_arr);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(bcftools_stderr,"Warning: Too many genotypes at %s:%"PRId64", requires %zu bytes, skipping.\n", bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
- }
- memset(ma->smpl_ploidy,0,nsamples*sizeof(int));
-
-@@ -1414,15 +1435,126 @@
- bcf_update_format_int32(out_hdr, out, "GT", (int32_t*)ma->tmp_arr, nsamples*nsize);
- }
-
-+void merge_format_string(args_t *args, const char *key, bcf_fmt_t **fmt_map, bcf1_t *out, int length, int nsize)
-+{
-+ bcf_srs_t *files = args->files;
-+ bcf_hdr_t *out_hdr = args->out_hdr;
-+ maux_t *ma = args->maux;
-+ int i,j, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-+
-+ // initialize empty strings, a dot for each value, e.g. ".,.,."
-+ int nmax = 0;
-+ for (i=0; i<nsamples; i++)
-+ {
-+ kstring_t *str = &ma->str[i];
-+ if ( length==BCF_VL_FIXED || length==BCF_VL_VAR )
-+ {
-+ str->l = 1;
-+ ks_resize(str, str->l+1);
-+ str->s[0] = '.';
-+ }
-+ else
-+ {
-+ str->l = nsize*2 - 1;
-+ ks_resize(str, str->l+1);
-+ str->s[0] = '.';
-+ for (j=1; j<nsize; j++) str->s[j*2-1] = ',', str->s[j*2] = '.';
-+ }
-+ str->s[str->l] = 0;
-+ if ( nmax < str->l ) nmax = str->l;
-+ }
-+
-+ // fill in values for each sample
-+ int ismpl = 0;
-+ for (i=0; i<files->nreaders; i++)
-+ {
-+ bcf_sr_t *reader = &files->readers[i];
-+ bcf_hdr_t *hdr = reader->header;
-+ bcf_fmt_t *fmt_ori = fmt_map[i];
-+ if ( !fmt_ori )
-+ {
-+ // the field is not present in this file
-+ ismpl += bcf_hdr_nsamples(hdr);
-+ continue;
-+ }
-+
-+ bcf1_t *line = maux_get_line(args, i);
-+ int irec = ma->buf[i].cur;
-+ char *src = (char*) fmt_ori->p;
-+
-+ if ( length==BCF_VL_FIXED || length==BCF_VL_VAR || (line->n_allele==out->n_allele && !ma->buf[i].rec[irec].als_differ) )
-+ {
-+ // alleles unchanged, copy over
-+ for (j=0; j<bcf_hdr_nsamples(hdr); j++)
-+ {
-+ kstring_t *str = &ma->str[ismpl++];
-+ str->l = 0;
-+ kputsn(src, fmt_ori->n, str);
-+ if ( nmax < str->l ) nmax = str->l;
-+ src += fmt_ori->n;
-+ }
-+ continue;
-+ }
-+ // NB, what is below is not the fastest way, copy_string_field() keeps
-+ // finding the indexes repeatedly at multiallelic sites
-+ if ( length==BCF_VL_A || length==BCF_VL_R )
-+ {
-+ int ifrom = length==BCF_VL_A ? 1 : 0;
-+ for (j=0; j<bcf_hdr_nsamples(hdr); j++)
-+ {
-+ kstring_t *str = &ma->str[ismpl++];
-+ int iori,inew;
-+ for (iori=ifrom; iori<line->n_allele; iori++)
-+ {
-+ inew = ma->buf[i].rec[irec].map[iori] - ifrom;
-+ int ret = copy_string_field(src, iori - ifrom, fmt_ori->size, str, inew);
-+ if ( ret<-1 ) error("[E::%s] fixme: internal error at %s:%"PRId64" .. %d\n",__func__,bcf_seqname(hdr,line),(int64_t) line->pos+1,ret);
-+ }
-+ src += fmt_ori->size;
-+ }
-+ continue;
-+ }
-+ assert( length==BCF_VL_G );
-+ error("[E::%s] Merging of Number=G FORMAT strings (in your case FORMAT/%s) is not supported yet, sorry!\n"
-+ "Please open an issue on github if this feature is essential for you. However, note that using FORMAT strings is not\n"
-+ "a good idea in general - it is slow to parse and does not compress well, it is better to use integer codes instead.\n"
-+ "If you don't really need it, use `bcftools annotate -x` to remove the annotation before merging.\n", __func__,key);
-+ }
-+ // update the record
-+ if ( ma->ntmp_arr < nsamples*nmax )
-+ {
-+ ma->ntmp_arr = nsamples*nmax;
-+ ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Could not allocate %zu bytes\n",ma->ntmp_arr);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(bcftools_stderr,"Warning: The row size is too big for FORMAT/%s at %s:%"PRId64", requires %zu bytes, skipping.\n", key,bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
-+ }
-+ char *tgt = (char*) ma->tmp_arr;
-+ for (i=0; i<nsamples; i++)
-+ {
-+ memcpy(tgt, ma->str[i].s, ma->str[i].l);
-+ if ( ma->str[i].l < nmax ) memset(tgt + ma->str[i].l, 0, nmax - ma->str[i].l);
-+ tgt += nmax;
-+ }
-+ bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nmax);
-+}
-+
- void merge_format_field(args_t *args, bcf_fmt_t **fmt_map, bcf1_t *out)
- {
- bcf_srs_t *files = args->files;
- bcf_hdr_t *out_hdr = args->out_hdr;
- maux_t *ma = args->maux;
- int i, ismpl = 0, nsamples = bcf_hdr_nsamples(out_hdr);
-+ static int warned = 0;
-
- const char *key = NULL;
-- int nsize = 0, length = BCF_VL_FIXED, type = -1;
-+ size_t nsize = 0, length = BCF_VL_FIXED;
-+ int type = -1;
- for (i=0; i<files->nreaders; i++)
- {
- if ( !maux_get_line(args,i) ) continue;
-@@ -1449,12 +1581,24 @@
- }
- if ( fmt_map[i]->n > nsize ) nsize = fmt_map[i]->n;
- }
-+ if ( type==BCF_BT_CHAR )
-+ {
-+ merge_format_string(args, key, fmt_map, out, length, nsize);
-+ return;
-+ }
-
-- int msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t);
-+ size_t msize = sizeof(float)>sizeof(int32_t) ? sizeof(float) : sizeof(int32_t);
- if ( ma->ntmp_arr < nsamples*nsize*msize )
- {
- ma->ntmp_arr = nsamples*nsize*msize;
- ma->tmp_arr = realloc(ma->tmp_arr, ma->ntmp_arr);
-+ if ( !ma->tmp_arr ) error("Failed to allocate %zu bytes at %s:%"PRId64" for FORMAT/%s\n", ma->ntmp_arr,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,key);
-+ if ( ma->ntmp_arr > 2147483647 )
-+ {
-+ if ( !warned ) fprintf(bcftools_stderr,"Warning: The row size is too big for FORMAT/%s at %s:%"PRId64", requires %zu bytes, skipping.\n", key,bcf_seqname(out_hdr,out),(int64_t) out->pos+1,ma->ntmp_arr);
-+ warned = 1;
-+ return;
-+ }
- }
-
- // Fill the temp array for all samples by collecting values from all files
-@@ -1465,6 +1609,7 @@
- bcf_fmt_t *fmt_ori = fmt_map[i];
- bcf1_t *line = maux_get_line(args, i);
- int irec = ma->buf[i].cur;
-+
- if ( fmt_ori )
- {
- type = fmt_ori->type;
-@@ -1473,23 +1618,23 @@
- {
- // if all fields are missing then n==1 is valid
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori*(nals_ori+1)/2 && fmt_map[i]->n != nals_ori )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=G, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=G, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- else if ( length==BCF_VL_A )
- {
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori-1 )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=A, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=A, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- else if ( length==BCF_VL_R )
- {
- if ( fmt_ori->n!=1 && fmt_ori->n != nals_ori )
-- error("Incorrect number of FORMAT/%s values at %s:%d, cannot merge. The tag is defined as Number=R, but found\n"
-+ error("Incorrect number of FORMAT/%s values at %s:%"PRId64", cannot merge. The tag is defined as Number=R, but found\n"
- "%d values and %d alleles. See also http://samtools.github.io/bcftools/howtos/FAQ.html#incorrect-nfields\n",
-- key,bcf_seqname(args->out_hdr,out),out->pos+1,fmt_ori->n,nals_ori);
-+ key,bcf_seqname(args->out_hdr,out),(int64_t) out->pos+1,fmt_ori->n,nals_ori);
- }
- }
-
-@@ -1621,15 +1766,12 @@
- case BCF_BT_INT16: BRANCH(int32_t, int16_t, *src==bcf_int16_missing, *src==bcf_int16_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break;
- case BCF_BT_INT32: BRANCH(int32_t, int32_t, *src==bcf_int32_missing, *src==bcf_int32_vector_end, *tgt=bcf_int32_missing, *tgt=bcf_int32_vector_end); break;
- case BCF_BT_FLOAT: BRANCH(float, float, bcf_float_is_missing(*src), bcf_float_is_vector_end(*src), bcf_float_set_missing(*tgt), bcf_float_set_vector_end(*tgt)); break;
-- case BCF_BT_CHAR: BRANCH(uint8_t, uint8_t, *src==bcf_str_missing, *src==bcf_str_vector_end, *tgt=bcf_str_missing, *tgt=bcf_str_vector_end); break;
- default: error("Unexpected case: %d, %s\n", type, key);
- }
- #undef BRANCH
- }
- if ( type==BCF_BT_FLOAT )
- bcf_update_format_float(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize);
-- else if ( type==BCF_BT_CHAR )
-- bcf_update_format_char(out_hdr, out, key, (float*)ma->tmp_arr, nsamples*nsize);
- else
- bcf_update_format_int32(out_hdr, out, key, (int32_t*)ma->tmp_arr, nsamples*nsize);
- }
-@@ -1720,6 +1862,7 @@
- {
- if ( !gaux[i].active ) continue;
- bcf1_t *line = maux_get_line(args, i);
-+ if ( !line ) continue;
- int irec = maux->buf[i].cur;
-
- hts_expand(int, line->n_allele, maux->buf[i].rec[irec].mmap, maux->buf[i].rec[irec].map);
-@@ -1741,7 +1884,7 @@
- if ( !maux->als )
- {
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i);
-- error("Failed to merge alleles at %s:%d\n",bcf_seqname(hdr,line),line->pos+1);
-+ error("Failed to merge alleles at %s:%"PRId64"\n",bcf_seqname(hdr,line),(int64_t) line->pos+1);
- }
- }
- }
-@@ -1750,6 +1893,7 @@
- /*
- Output staged gVCF blocks, end is the last position of the block. Assuming
- gaux[i].active flags are set and maux_get_line returns correct lines.
-+ Both start,end coordinates are 0-based.
- */
- void gvcf_write_block(args_t *args, int start, int end)
- {
-@@ -1759,7 +1903,7 @@
- assert(gaux);
-
- // Update POS
-- int min = INT_MAX;
-+ int min = INT_MAX; // the minimum active gVCF INFO/END (0-based)
- char ref = 'N';
- for (i=0; i<args->files->nreaders; i++)
- {
-@@ -1780,7 +1924,7 @@
- if ( min > gaux[i].end ) min = gaux[i].end;
- }
- // Check for valid gVCF blocks in this region
-- if ( min==INT_MAX )
-+ if ( min==INT_MAX ) // this probably should not happen
- {
- assert(0);
- maux->gvcf_min = 0;
-@@ -1816,7 +1960,7 @@
- }
- else
- bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0);
-- bcf_write1(args->out_fh, args->out_hdr, out);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- bcf_clear1(out);
-
-
-@@ -1874,7 +2018,7 @@
- }
-
- // When called on a region, trim the blocks accordingly
-- int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos;
-+ int start = maux->gvcf_break>=0 ? maux->gvcf_break + 1 : maux->pos; // the start of a new gvcf block to output
- if ( args->regs )
- {
- int rstart = -1, rend = -1;
-@@ -1894,7 +2038,7 @@
- // does the block end before the new line or is it interrupted?
- int tmp = maux->gvcf_min < flush_until ? maux->gvcf_min : flush_until;
- if ( start > tmp-1 ) break;
-- gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based
-+ gvcf_write_block(args,start,tmp-1); // gvcf_min is 1-based, passing 0-based coordinates
- start = tmp;
- }
- }
-@@ -1903,6 +2047,7 @@
- Check incoming lines for new gVCF blocks, set pointer to the current source
- buffer (gvcf or readers). In contrast to gvcf_flush, this function can be
- called only after maux_reset as it relies on updated maux buffers.
-+ The coordinate is 0-based
- */
- void gvcf_stage(args_t *args, int pos)
- {
-@@ -1937,8 +2082,16 @@
- int ret = bcf_get_info_int32(hdr,line,"END",&end,&nend);
- if ( ret==1 )
- {
-+ if ( end[0] == line->pos + 1 ) // POS and INFO/END are identical, treat as if a normal w/o INFO/END
-+ {
-+ maux->gvcf_break = line->pos;
-+ continue;
-+ }
-+ if ( end[0] <= line->pos ) error("Error: Incorrect END at %s:%"PRId64" .. END=%d\n", bcf_seqname(hdr,line),(int64_t) line->pos+1,end[0]);
-+
- // END is set, this is a new gVCF block. Cache this line in gaux[i] and swap with
- // an empty record: the gaux line must be kept until we reach its END.
-+
- gaux[i].active = 1;
- gaux[i].end = end[0] - 1;
- SWAP(bcf1_t*,args->files->readers[i].buffer[irec],gaux[i].line);
-@@ -1984,7 +2137,15 @@
- {
- // Invalidate pointer to reader's buffer or else gvcf_flush will attempt
- // to use the old lines via maux_get_line()
-- if ( ma->gvcf && !ma->gvcf[ir].active ) ma->buf[ir].cur = -1;
-+ if ( ma->gvcf )
-+ {
-+ if ( ma->gvcf[ir].active )
-+ {
-+ if ( ma->pos >= ma->gvcf[ir].end ) ma->gvcf[ir].active = 0;
-+ else if ( ma->buf[ir].cur==-1 ) ma->buf[ir].cur = ma->buf[ir].beg; // re-activate interrupted gVCF block
-+ }
-+ if ( !ma->gvcf[ir].active ) ma->buf[ir].cur = -1;
-+ }
-
- bcf_sr_t *reader = bcf_sr_get_reader(args->files,ir);
- if ( !reader->nbuffer ) continue; // nothing to clean
-@@ -2045,14 +2206,15 @@
- bcf_hdr_t *hdr = bcf_sr_get_header(args->files,i);
- const char *chr = bcf_hdr_id2name(hdr, maux->buf[i].rid);
- fprintf(bcftools_stderr,"\t");
-- for (j=maux->buf[i].beg; j<maux->buf[i].end; j++) fprintf(bcftools_stderr," %s:%d",chr,maux->buf[i].lines[j]->pos+1);
-+ for (j=maux->buf[i].beg; j<maux->buf[i].end; j++) fprintf(bcftools_stderr," %s:%"PRId64,chr,(int64_t) maux->buf[i].lines[j]->pos+1);
- }
- fprintf(bcftools_stderr,"\n");
- }
-+ fprintf(bcftools_stderr,"gvcf_min=%d\n", args->maux->gvcf_min);
- for (i=0; i<args->files->nreaders; i++)
- {
- fprintf(bcftools_stderr,"reader %d:\tgvcf_active=%d", i,maux->gvcf[i].active);
-- if ( maux->gvcf[i].active ) fprintf(bcftools_stderr,"\tpos,end=%d,%d", maux->gvcf[i].line->pos+1,maux->gvcf[i].end+1);
-+ if ( maux->gvcf[i].active ) fprintf(bcftools_stderr,"\tpos,end=%"PRId64",%"PRId64, (int64_t) maux->gvcf[i].line->pos+1,(int64_t) maux->gvcf[i].end+1);
- fprintf(bcftools_stderr,"\n");
- }
- fprintf(bcftools_stderr,"\n");
-@@ -2187,7 +2349,7 @@
- }
- // normalize alleles
- maux->als = merge_alleles(line->d.allele, line->n_allele, buf->rec[j].map, maux->als, &maux->nals, &maux->mals);
-- if ( !maux->als ) error("Failed to merge alleles at %s:%d in %s\n",maux->chr,line->pos+1,reader->fname);
-+ if ( !maux->als ) error("Failed to merge alleles at %s:%"PRId64" in %s\n",maux->chr,(int64_t) line->pos+1,reader->fname);
- hts_expand0(int, maux->nals, maux->ncnt, maux->cnt);
- for (k=1; k<line->n_allele; k++)
- maux->cnt[ buf->rec[j].map[k] ]++; // how many times an allele appears in the files
-@@ -2288,33 +2450,46 @@
- if ( args->do_gvcf )
- bcf_update_info_int32(args->out_hdr, out, "END", NULL, 0);
- merge_format(args, out);
-- bcf_write1(args->out_fh, args->out_hdr, out);
-+ if ( bcf_write1(args->out_fh, args->out_hdr, out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- bcf_clear1(out);
- }
-
- void bcf_hdr_append_version(bcf_hdr_t *hdr, int argc, char **argv, const char *cmd)
- {
- kstring_t str = {0,0,0};
-- ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version());
-- bcf_hdr_append(hdr,str.s);
-+ int e = 0;
-+ if (ksprintf(&str,"##%sVersion=%s+htslib-%s\n", cmd, bcftools_version(), hts_version()) < 0)
-+ goto fail;
-+ if (bcf_hdr_append(hdr,str.s) < 0)
-+ goto fail;
-
- str.l = 0;
-- ksprintf(&str,"##%sCommand=%s", cmd, argv[0]);
-+ e |= ksprintf(&str,"##%sCommand=%s", cmd, argv[0]) < 0;
- int i;
- for (i=1; i<argc; i++)
- {
- if ( strchr(argv[i],' ') )
-- ksprintf(&str, " '%s'", argv[i]);
-+ e |= ksprintf(&str, " '%s'", argv[i]) < 0;
- else
-- ksprintf(&str, " %s", argv[i]);
-+ e |= ksprintf(&str, " %s", argv[i]) < 0;
- }
-- kputs("; Date=", &str);
-- time_t tm; time(&tm); kputs(ctime(&tm), &str);
-- kputc('\n', &str);
-- bcf_hdr_append(hdr,str.s);
-- free(str.s);
-+ e |= kputs("; Date=", &str) < 0;
-+ time_t tm; time(&tm);
-+ e |= kputs(ctime(&tm), &str) < 0;
-+ e |= kputc('\n', &str) < 0;
-+ if (e)
-+ goto fail;
-+ if (bcf_hdr_append(hdr,str.s) < 0)
-+ goto fail;
-+ free(ks_release(&str));
-+
-+ if (bcf_hdr_sync(hdr) < 0)
-+ goto fail;
-+ return;
-
-- bcf_hdr_sync(hdr);
-+ fail:
-+ free(str.s);
-+ error_errno("[%s] Failed to add program information to header", __func__);
- }
-
- void merge_vcf(args_t *args)
-@@ -2333,20 +2508,21 @@
- int i;
- for (i=0; i<args->files->nreaders; i++)
- {
-- char buf[10]; snprintf(buf,10,"%d",i+1);
-+ char buf[24]; snprintf(buf,sizeof buf,"%d",i+1);
- merge_headers(args->out_hdr, args->files->readers[i].header,buf,args->force_samples);
- }
- if (args->record_cmd_line) bcf_hdr_append_version(args->out_hdr, args->argc, args->argv, "bcftools_merge");
-- bcf_hdr_sync(args->out_hdr);
-+ if (bcf_hdr_sync(args->out_hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
- }
- info_rules_init(args);
-
- bcf_hdr_set_version(args->out_hdr, bcf_hdr_get_version(args->files->readers[0].header));
-- bcf_hdr_write(args->out_fh, args->out_hdr);
-+ if ( bcf_hdr_write(args->out_fh, args->out_hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- if ( args->header_only )
- {
- bcf_hdr_destroy(args->out_hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- return;
- }
-
-@@ -2381,7 +2557,7 @@
- info_rules_destroy(args);
- maux_destroy(args->maux);
- bcf_hdr_destroy(args->out_hdr);
-- hts_close(args->out_fh);
-+ if ( hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- bcf_destroy1(args->out_line);
- kh_destroy(strdict, args->tmph);
- if ( args->tmps.m ) free(args->tmps.s);
-@@ -2412,7 +2588,7 @@
- fprintf(bcftools_stderr, " -O, --output-type <b|u|z|v> 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n");
- fprintf(bcftools_stderr, " -r, --regions <region> restrict to comma-separated list of regions\n");
- fprintf(bcftools_stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-@@ -2499,7 +2675,7 @@
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfnorm.c
-+++ python-pysam/bcftools/vcfnorm.c
-@@ -1,6 +1,6 @@
- /* vcfnorm.c -- Left-align and normalize indels.
-
-- Copyright (C) 2013-2017 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -31,6 +31,7 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/faidx.h>
-@@ -38,10 +39,10 @@
- #include "bcftools.h"
- #include "rbuf.h"
-
--#define CHECK_REF_EXIT 0
--#define CHECK_REF_WARN 1
--#define CHECK_REF_SKIP 2
--#define CHECK_REF_FIX 4
-+#define CHECK_REF_EXIT 1
-+#define CHECK_REF_WARN 2
-+#define CHECK_REF_SKIP 4
-+#define CHECK_REF_FIX 8
-
- #define MROWS_SPLIT 1
- #define MROWS_MERGE 2
-@@ -61,6 +62,13 @@
- char *ref, *alt;
- void *hash;
- }
-+cmpals1_t;
-+
-+typedef struct
-+{
-+ cmpals1_t *cmpals;
-+ int ncmpals, mcmpals;
-+}
- cmpals_t;
-
- typedef struct
-@@ -83,14 +91,13 @@
- int aln_win; // the realignment window size (maximum repeat size)
- bcf_srs_t *files; // using the synced reader only for -r option
- bcf_hdr_t *hdr;
-- cmpals_t *cmpals;
-- int ncmpals, mcmpals;
-+ cmpals_t cmpals_in, cmpals_out;
- faidx_t *fai;
- struct { int tot, set, swap; } nref;
- char **argv, *output_fname, *ref_fname, *vcf_fname, *region, *targets;
- int argc, rmdup, output_type, n_threads, check_ref, strict_filter, do_indels;
- int nchanged, nskipped, nsplit, ntotal, mrows_op, mrows_collapse, parsimonious;
-- int record_cmd_line;
-+ int record_cmd_line, force, force_warned;
- }
- args_t;
-
-@@ -137,7 +144,7 @@
- }
-
- char *ref = faidx_fetch_seq(args->fai, (char*)bcf_seqname(args->hdr,line), line->pos, line->pos+maxlen-1, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- replace_iupac_codes(ref,len);
-
- args->nref.tot++;
-@@ -248,7 +255,7 @@
- int i, j, nals = line->n_allele, nals_ori = line->n_allele;
- for (i=1, j=1; i<line->n_allele; i++)
- {
-- if ( strcmp(line->d.allele[0],line->d.allele[i]) )
-+ if ( strcasecmp(line->d.allele[0],line->d.allele[i]) )
- {
- args->tmp_arr1[i] = j++;
- continue;
-@@ -295,7 +302,7 @@
- // Sanity check REF
- int i, nref, reflen = strlen(line->d.allele[0]);
- char *ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos, line->pos+reflen-1, &nref);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", args->hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos+1);
- seq_to_upper(ref,0);
- replace_iupac_codes(ref,nref); // any non-ACGT character in fasta ref is replaced with N
-
-@@ -303,18 +310,18 @@
- if ( has_non_acgtn(line->d.allele[0],reflen) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Non-ACGTN reference allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]);
-+ error("Non-ACGTN reference allele at %s:%"PRId64" .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,ref,line->d.allele[0]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(stderr,"NON_ACGTN_REF\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]);
-+ fprintf(stderr,"NON_ACGTN_REF\t%s\t%"PRId64"\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[0]);
- free(ref);
- return ERR_REF_MISMATCH;
- }
- if ( strcasecmp(ref,line->d.allele[0]) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Reference allele mismatch at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]);
-+ error("Reference allele mismatch at %s:%"PRId64" .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,ref,line->d.allele[0]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(stderr,"REF_MISMATCH\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]);
-+ fprintf(stderr,"REF_MISMATCH\t%s\t%"PRId64"\t%s\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[0],ref);
- free(ref);
- return ERR_REF_MISMATCH;
- }
-@@ -342,9 +349,9 @@
- if ( has_non_acgtn(line->d.allele[i],line->shared.l) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Non-ACGTN alternate allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[i]);
-+ error("Non-ACGTN alternate allele at %s:%"PRId64" .. VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[i]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(stderr,"NON_ACGTN_ALT\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[i]);
-+ fprintf(stderr,"NON_ACGTN_ALT\t%s\t%"PRId64"\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[i]);
- return ERR_REF_MISMATCH;
- }
-
-@@ -352,7 +359,7 @@
- kputs(line->d.allele[i], &als[i]);
- seq_to_upper(als[i].s,0);
-
-- if ( i>0 && als[i].l==als[0].l && !strcmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
-+ if ( i>0 && als[i].l==als[0].l && !strcasecmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
- }
-
- // trim from right
-@@ -363,7 +370,7 @@
- int min_len = als[0].l;
- for (i=1; i<line->n_allele; i++)
- {
-- if ( als[0].s[ als[0].l-1 ]!=als[i].s[ als[i].l-1 ] ) break;
-+ if ( toupper(als[0].s[ als[0].l-1 ])!=toupper(als[i].s[ als[i].l-1 ]) ) break;
- if ( als[i].l < min_len ) min_len = als[i].l;
- }
- if ( i!=line->n_allele ) break; // there are differences, cannot be trimmed
-@@ -380,7 +387,7 @@
- int npad = line->pos >= args->aln_win ? args->aln_win : line->pos;
- free(ref);
- ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad, line->pos-1, &nref);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", args->hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos-npad+1);
- replace_iupac_codes(ref,nref);
- for (i=0; i<line->n_allele; i++)
- {
-@@ -420,7 +427,7 @@
-
- // Have the alleles changed?
- als[0].s[ als[0].l ] = 0; // in order for strcmp to work
-- if ( ori_pos==line->pos && !strcmp(line->d.allele[0],als[0].s) ) return ERR_OK;
-+ if ( ori_pos==line->pos && !strcasecmp(line->d.allele[0],als[0].s) ) return ERR_OK;
-
- // Create new block of alleles and update
- args->tmp_als_str.l = 0;
-@@ -459,23 +466,68 @@
- if ( len==BCF_VL_A ) \
- { \
- if ( ret!=src->n_allele-1 ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele-1,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele-1,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele-1,ret); \
-+ } \
- bcf_update_info_##type(args->hdr,dst,tag,vals+ialt,1); \
- } \
- else if ( len==BCF_VL_R ) \
- { \
- if ( ret!=src->n_allele ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele,ret); \
-+ } \
- if ( ialt!=0 ) vals[1] = vals[ialt+1]; \
- bcf_update_info_##type(args->hdr,dst,tag,vals,2); \
- } \
- else if ( len==BCF_VL_G ) \
- { \
- if ( ret!=src->n_allele*(src->n_allele+1)/2 ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ } \
- if ( ialt!=0 ) \
- { \
- vals[1] = vals[bcf_alleles2gt(0,ialt+1)]; \
-@@ -620,8 +672,23 @@
- if ( len==BCF_VL_A ) \
- { \
- if ( nvals!=(src->n_allele-1)*nsmpl ) \
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ } \
- nvals /= nsmpl; \
- type_t *src_vals = vals, *dst_vals = vals; \
- for (i=0; i<nsmpl; i++) \
-@@ -635,8 +702,23 @@
- else if ( len==BCF_VL_R ) \
- { \
- if ( nvals!=src->n_allele*nsmpl ) \
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*nsmpl,nvals); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*nsmpl,nvals); \
-+ } \
- nvals /= nsmpl; \
- type_t *src_vals = vals, *dst_vals = vals; \
- for (i=0; i<nsmpl; i++) \
-@@ -651,7 +733,22 @@
- else if ( len==BCF_VL_G ) \
- { \
- if ( nvals!=src->n_allele*(src->n_allele+1)/2*nsmpl && nvals!=src->n_allele*nsmpl ) \
-- error("Error at %s:%d, the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error at %s:%"PRId64", the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),(int64_t) src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \
-+ } \
- nvals /= nsmpl; \
- int all_haploid = nvals==src->n_allele ? 1 : 0; \
- type_t *src_vals = vals, *dst_vals = vals; \
-@@ -704,6 +801,7 @@
- {
- const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id);
- int ret = bcf_get_format_char(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1);
-+ if ( !ret ) return; // all values can be empty, leave out the tag, no need to panic
- assert( ret>0 );
-
- kstring_t str;
-@@ -760,9 +858,25 @@
- if ( *se==',' ) nfields++;
- se++;
- }
-+ if ( nfields==1 && se-ptr==1 && *ptr=='.' ) continue; // missing value
- if ( nfields!=src->n_allele*(src->n_allele+1)/2 && nfields!=src->n_allele )
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d or %d, found %d\n",
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ {
-+ if ( args->force && !args->force_warned )
-+ {
-+ fprintf(stderr,
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d or %d, found %d. Removing the field.\n"
-+ " (This warning is printed only once.)\n",
-+ tag,bcf_seqname(args->hdr,src),(int64_t)src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ args->force_warned = 1;
-+ }
-+ if ( args->force )
-+ {
-+ bcf_update_format_char(args->hdr,dst,tag,NULL,0);
-+ return;
-+ }
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d or %d, found %d\n",
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ }
-
- int len = 0;
- if ( nfields==src->n_allele ) // haploid
-@@ -888,7 +1002,7 @@
- if ( len==BCF_VL_A ) \
- { \
- if (nvals_ori!=lines[0]->n_allele - 1) \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \
- int nvals = dst->n_allele - 1; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
- vals = (type_t*) args->tmp_arr1; \
-@@ -899,7 +1013,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele-1) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- for (k=0; k<nvals2; k++) \
- { \
-@@ -912,7 +1026,7 @@
- else if ( len==BCF_VL_R ) \
- { \
- if (nvals_ori!=lines[0]->n_allele) \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \
- int nvals = dst->n_allele; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
- vals = (type_t*) args->tmp_arr1; \
-@@ -923,7 +1037,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- for (k=0; k<nvals2; k++) \
- { \
-@@ -938,7 +1052,7 @@
- /* expecting diploid gt in INFO */ \
- if (nvals_ori!=lines[0]->n_allele*(lines[0]->n_allele+1)/2) { \
- fprintf(stderr, "todo: merge Number=G INFO fields for haploid sites\n"); \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \
- } \
- int nvals = dst->n_allele*(dst->n_allele+1)/2; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
-@@ -950,7 +1064,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele*(lines[i]->n_allele+1)/2) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- int ia,ib; \
- k = 0; \
-@@ -1062,7 +1176,7 @@
- int ngts2 = bcf_get_genotypes(args->hdr,lines[i],&args->tmp_arr2,&ntmp2);
- args->ntmp_arr2 = ntmp2 * 4;
- ngts2 /= nsmpl;
-- if ( ngts!=ngts2 ) error("Error at %s:%d: cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1);
-+ if ( ngts!=ngts2 ) error("Error at %s:%"PRId64": cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1);
-
- int32_t *gt = (int32_t*) args->tmp_arr1;
- int32_t *gt2 = (int32_t*) args->tmp_arr2;
-@@ -1076,7 +1190,7 @@
- else
- {
- int ial = bcf_gt_allele(gt2[k]);
-- if ( ial>=args->maps[i].nals ) error("Error at %s:%d: incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1,ial);
-+ if ( ial>=args->maps[i].nals ) error("Error at %s:%"PRId64": incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1,ial);
- gt[k] = bcf_gt_unphased( args->maps[i].map[ial] ) | bcf_gt_is_phased(gt[k]);
- }
- }
-@@ -1123,7 +1237,7 @@
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- nvals2 /= nsmpl; \
- if (nvals2!=lines[i]->n_allele-1) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1151,7 +1265,7 @@
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- nvals2 /= nsmpl; \
- if (nvals2!=lines[i]->n_allele) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1198,7 +1312,7 @@
- int ndiploid = lines[i]->n_allele*(lines[i]->n_allele+1)/2; \
- int line_diploid = nvals2==ndiploid ? 1 : 0; \
- if (!(nvals2==1 || nvals2==lines[i]->n_allele || nvals2==lines[i]->n_allele*(lines[i]->n_allele+1)/2)) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1319,7 +1433,7 @@
- haploid[i] = 0;
- nfields = dst->n_allele*(dst->n_allele+1)/2;
- }
-- else error("The field %s at %s:%d neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),dst->pos+1);
-+ else error("The field %s at %s:%"PRId64" neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),(int64_t) dst->pos+1);
-
- kstring_t *tmp = &args->tmp_str[i];
- kputc('.',tmp);
-@@ -1415,7 +1529,7 @@
- args->maps[i].nals = lines[i]->n_allele;
- hts_expand(int,args->maps[i].nals,args->maps[i].mals,args->maps[i].map);
- args->als = merge_alleles(lines[i]->d.allele, lines[i]->n_allele, args->maps[i].map, args->als, &args->nals, &args->mals);
-- if ( !args->als ) error("Failed to merge alleles at %s:%d\n", bcf_seqname(args->hdr,dst),dst->pos+1);
-+ if ( !args->als ) error("Failed to merge alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr,dst),(int64_t) dst->pos+1);
- }
- bcf_update_alleles(args->hdr, dst, (const char**)args->als, args->nals);
- for (i=0; i<args->nals; i++)
-@@ -1533,11 +1647,11 @@
- }
- return NULL;
- }
--static void cmpals_add(args_t *args, bcf1_t *rec)
-+static void cmpals_add(cmpals_t *ca, bcf1_t *rec)
- {
-- args->ncmpals++;
-- hts_expand0(cmpals_t, args->ncmpals, args->mcmpals, args->cmpals);
-- cmpals_t *cmpals = args->cmpals + args->ncmpals - 1;
-+ ca->ncmpals++;
-+ hts_expand0(cmpals1_t, ca->ncmpals, ca->mcmpals, ca->cmpals);
-+ cmpals1_t *cmpals = ca->cmpals + ca->ncmpals - 1;
- free(cmpals->ref);
- cmpals->ref = strdup(rec->d.allele[0]);
- cmpals->n = rec->n_allele;
-@@ -1555,21 +1669,21 @@
- khash_str2int_inc(cmpals->hash, strdup(rec->d.allele[i]));
- }
- }
--static int cmpals_match(args_t *args, bcf1_t *rec)
-+static int cmpals_match(cmpals_t *ca, bcf1_t *rec)
- {
- int i, j;
-- for (i=0; i<args->ncmpals; i++)
-+ for (i=0; i<ca->ncmpals; i++)
- {
-- cmpals_t *cmpals = args->cmpals + i;
-+ cmpals1_t *cmpals = ca->cmpals + i;
- if ( rec->n_allele != cmpals->n ) continue;
-
- // NB. assuming both are normalized
-- if ( strcmp(rec->d.allele[0], cmpals->ref) ) continue;
-+ if ( strcasecmp(rec->d.allele[0], cmpals->ref) ) continue;
-
- // the most frequent case
- if ( rec->n_allele==2 )
- {
-- if ( strcmp(rec->d.allele[1], cmpals->alt) ) continue;
-+ if ( strcasecmp(rec->d.allele[1], cmpals->alt) ) continue;
- return 1;
- }
-
-@@ -1579,21 +1693,20 @@
- if ( j<rec->n_allele ) continue;
- return 1;
- }
-- cmpals_add(args, rec);
- return 0;
- }
--static void cmpals_reset(args_t *args) { args->ncmpals = 0; }
--static void cmpals_destroy(args_t *args)
-+static void cmpals_reset(cmpals_t *ca) { ca->ncmpals = 0; }
-+static void cmpals_destroy(cmpals_t *ca)
- {
- int i;
-- for (i=0; i<args->mcmpals; i++)
-+ for (i=0; i<ca->mcmpals; i++)
- {
-- cmpals_t *cmpals = args->cmpals + i;
-+ cmpals1_t *cmpals = ca->cmpals + i;
- free(cmpals->ref);
- free(cmpals->alt);
- if ( cmpals->hash ) khash_str2int_destroy_free(cmpals->hash);
- }
-- free(args->cmpals);
-+ free(ca->cmpals);
- }
-
- static void flush_buffer(args_t *args, htsFile *file, int n)
-@@ -1608,7 +1721,8 @@
- {
- if ( mrows_ready_to_flush(args, args->lines[k]) )
- {
-- while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line);
-+ while ( (line=mrows_flush(args)) )
-+ if ( bcf_write1(file, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- int merge = 1;
- if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY )
-@@ -1629,23 +1743,24 @@
- if ( args->rmdup & BCF_SR_PAIR_ANY ) continue; // rmdup by position only
- if ( args->rmdup & BCF_SR_PAIR_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue;
- if ( args->rmdup & BCF_SR_PAIR_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(args, args->lines[k]) ) continue;
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(&args->cmpals_out, args->lines[k]) ) continue;
- }
- else
- {
- prev_rid = args->lines[k]->rid;
- prev_pos = args->lines[k]->pos;
- prev_type = 0;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(args);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(&args->cmpals_out);
- }
- prev_type |= line_type;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(args, args->lines[k]);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(&args->cmpals_out, args->lines[k]);
- }
-- bcf_write1(file, args->hdr, args->lines[k]);
-+ if ( bcf_write1(file, args->hdr, args->lines[k])!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- if ( args->mrows_op==MROWS_MERGE && !args->rbuf.n )
- {
-- while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line);
-+ while ( (line=mrows_flush(args)) )
-+ if ( bcf_write1(file, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -1669,7 +1784,8 @@
-
- static void destroy_data(args_t *args)
- {
-- cmpals_destroy(args);
-+ cmpals_destroy(&args->cmpals_in);
-+ cmpals_destroy(&args->cmpals_out);
- int i;
- for (i=0; i<args->rbuf.m; i++)
- if ( args->lines[i] ) bcf_destroy1(args->lines[i]);
-@@ -1727,9 +1843,9 @@
- if ( args->check_ref & CHECK_REF_FIX )
- fix_dup_alt(args, line);
- else if ( args->check_ref==CHECK_REF_EXIT )
-- error("Duplicate alleles at %s:%d; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Duplicate alleles at %s:%"PRId64"; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(stderr,"ALT_DUP\t%s\t%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ fprintf(stderr,"ALT_DUP\t%s\t%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- }
- }
- }
-@@ -1754,7 +1870,7 @@
- if ( args->n_threads )
- hts_set_opt(out, HTS_OPT_THREAD_POOL, args->files->p);
- if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_norm");
-- bcf_hdr_write(out, args->hdr);
-+ if ( bcf_hdr_write(out, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- int prev_rid = -1, prev_pos = -1, prev_type = 0;
- while ( bcf_sr_next_line(args->files) )
-@@ -1770,17 +1886,17 @@
- if ( args->rmdup & BCF_SR_PAIR_ANY ) continue; // rmdup by position only
- if ( args->rmdup & BCF_SR_PAIR_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue;
- if ( args->rmdup & BCF_SR_PAIR_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(args, line) ) continue;
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(&args->cmpals_in, line) ) continue;
- }
- else
- {
- prev_rid = line->rid;
- prev_pos = line->pos;
- prev_type = 0;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(args);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(&args->cmpals_in);
- }
- prev_type |= line_type;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(args, line);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(&args->cmpals_in, line);
- }
-
- // still on the same chromosome?
-@@ -1819,7 +1935,7 @@
- if ( j>0 ) flush_buffer(args, out, j);
- }
- flush_buffer(args, out, args->rbuf.n);
-- hts_close(out);
-+ if ( hts_close(out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-
- fprintf(stderr,"Lines total/split/realigned/skipped:\t%d/%d/%d/%d\n", args->ntotal,args->nsplit,args->nchanged,args->nskipped);
- if ( args->check_ref & CHECK_REF_FIX )
-@@ -1837,8 +1953,9 @@
- fprintf(stderr, "Options:\n");
- fprintf(stderr, " -c, --check-ref <e|w|x|s> check REF alleles and exit (e), warn (w), exclude (x), or set (s) bad sites [e]\n");
- fprintf(stderr, " -D, --remove-duplicates remove duplicate lines of the same type.\n");
-- fprintf(stderr, " -d, --rm-dup <type> remove duplicate snps|indels|both|all|none\n");
-- fprintf(stderr, " -f, --fasta-ref <file> reference sequence (MANDATORY)\n");
-+ fprintf(stderr, " -d, --rm-dup <type> remove duplicate snps|indels|both|all|exact\n");
-+ fprintf(stderr, " -f, --fasta-ref <file> reference sequence\n");
-+ fprintf(stderr, " --force try to proceed even if malformed tags are encountered. Experimental, use at your own risk\n");
- fprintf(stderr, " -m, --multiallelics <-|+>[type] split multiallelics (-) or join biallelics (+), type: snps|indels|both|any [both]\n");
- fprintf(stderr, " --no-version do not append version and command line to the header\n");
- fprintf(stderr, " -N, --do-not-normalize do not normalize indels (with -m or -c s)\n");
-@@ -1849,9 +1966,16 @@
- fprintf(stderr, " -s, --strict-filter when merging (-m+), merged site is PASS only if all sites being merged PASS\n");
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(stderr, " --threads <int> number of extra (de)compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, " -w, --site-win <int> buffer for sorting lines which changed position during realignment [1000]\n");
- fprintf(stderr, "\n");
-+ fprintf(stderr, "Examples:\n");
-+ fprintf(stderr, " # normalize and left-align indels\n");
-+ fprintf(stderr, " bcftools norm -f ref.fa in.vcf\n");
-+ fprintf(stderr, "\n");
-+ fprintf(stderr, " # split multi-allelic sites\n");
-+ fprintf(stderr, " bcftools norm -m- in.vcf\n");
-+ fprintf(stderr, "\n");
- exit(1);
- }
-
-@@ -1875,6 +1999,7 @@
- static struct option loptions[] =
- {
- {"help",no_argument,NULL,'h'},
-+ {"force",no_argument,NULL,7},
- {"fasta-ref",required_argument,NULL,'f'},
- {"do-not-normalize",no_argument,NULL,'N'},
- {"multiallelics",required_argument,NULL,'m'},
-@@ -1904,6 +2029,7 @@
- else if ( !strcmp("all",optarg) ) args->rmdup = BCF_SR_PAIR_ANY;
- else if ( !strcmp("any",optarg) ) args->rmdup = BCF_SR_PAIR_ANY;
- else if ( !strcmp("none",optarg) ) args->rmdup = BCF_SR_PAIR_EXACT;
-+ else if ( !strcmp("exact",optarg) ) args->rmdup = BCF_SR_PAIR_EXACT;
- else error("The argument to -d not recognised: %s\n", optarg);
- break;
- case 'm':
-@@ -1951,8 +2077,9 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 7 : args->force = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -1966,7 +2093,8 @@
- else fname = argv[optind];
-
- if ( !args->ref_fname && !args->mrows_op && !args->rmdup ) error("Expected -f, -m, -D or -d option\n");
-- if ( !args->ref_fname && args->check_ref&CHECK_REF_FIX ) error("Expected --fasta-ref with --check-ref s\n");
-+ if ( !args->check_ref && args->ref_fname ) args->check_ref = CHECK_REF_EXIT;
-+ if ( args->check_ref && !args->ref_fname ) error("Expected --fasta-ref with --check-ref\n");
-
- if ( args->region )
- {
-@@ -1980,7 +2108,7 @@
- }
-
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- if ( args->mrows_op&MROWS_SPLIT && args->rmdup ) error("Cannot combine -D and -m-\n");
- init_data(args);
- normalize_vcf(args);
---- python-pysam.orig/bcftools/vcfnorm.c.pysam.c
-+++ python-pysam/bcftools/vcfnorm.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* vcfnorm.c -- Left-align and normalize indels.
-
-- Copyright (C) 2013-2017 Genome Research Ltd.
-+ Copyright (C) 2013-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -33,6 +33,7 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/faidx.h>
-@@ -40,10 +41,10 @@
- #include "bcftools.h"
- #include "rbuf.h"
-
--#define CHECK_REF_EXIT 0
--#define CHECK_REF_WARN 1
--#define CHECK_REF_SKIP 2
--#define CHECK_REF_FIX 4
-+#define CHECK_REF_EXIT 1
-+#define CHECK_REF_WARN 2
-+#define CHECK_REF_SKIP 4
-+#define CHECK_REF_FIX 8
-
- #define MROWS_SPLIT 1
- #define MROWS_MERGE 2
-@@ -63,6 +64,13 @@
- char *ref, *alt;
- void *hash;
- }
-+cmpals1_t;
-+
-+typedef struct
-+{
-+ cmpals1_t *cmpals;
-+ int ncmpals, mcmpals;
-+}
- cmpals_t;
-
- typedef struct
-@@ -85,14 +93,13 @@
- int aln_win; // the realignment window size (maximum repeat size)
- bcf_srs_t *files; // using the synced reader only for -r option
- bcf_hdr_t *hdr;
-- cmpals_t *cmpals;
-- int ncmpals, mcmpals;
-+ cmpals_t cmpals_in, cmpals_out;
- faidx_t *fai;
- struct { int tot, set, swap; } nref;
- char **argv, *output_fname, *ref_fname, *vcf_fname, *region, *targets;
- int argc, rmdup, output_type, n_threads, check_ref, strict_filter, do_indels;
- int nchanged, nskipped, nsplit, ntotal, mrows_op, mrows_collapse, parsimonious;
-- int record_cmd_line;
-+ int record_cmd_line, force, force_warned;
- }
- args_t;
-
-@@ -139,7 +146,7 @@
- }
-
- char *ref = faidx_fetch_seq(args->fai, (char*)bcf_seqname(args->hdr,line), line->pos, line->pos+maxlen-1, &len);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- replace_iupac_codes(ref,len);
-
- args->nref.tot++;
-@@ -250,7 +257,7 @@
- int i, j, nals = line->n_allele, nals_ori = line->n_allele;
- for (i=1, j=1; i<line->n_allele; i++)
- {
-- if ( strcmp(line->d.allele[0],line->d.allele[i]) )
-+ if ( strcasecmp(line->d.allele[0],line->d.allele[i]) )
- {
- args->tmp_arr1[i] = j++;
- continue;
-@@ -297,7 +304,7 @@
- // Sanity check REF
- int i, nref, reflen = strlen(line->d.allele[0]);
- char *ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos, line->pos+reflen-1, &nref);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", args->hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos+1);
- seq_to_upper(ref,0);
- replace_iupac_codes(ref,nref); // any non-ACGT character in fasta ref is replaced with N
-
-@@ -305,18 +312,18 @@
- if ( has_non_acgtn(line->d.allele[0],reflen) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Non-ACGTN reference allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]);
-+ error("Non-ACGTN reference allele at %s:%"PRId64" .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,ref,line->d.allele[0]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(bcftools_stderr,"NON_ACGTN_REF\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]);
-+ fprintf(bcftools_stderr,"NON_ACGTN_REF\t%s\t%"PRId64"\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[0]);
- free(ref);
- return ERR_REF_MISMATCH;
- }
- if ( strcasecmp(ref,line->d.allele[0]) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Reference allele mismatch at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[0]);
-+ error("Reference allele mismatch at %s:%"PRId64" .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,ref,line->d.allele[0]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(bcftools_stderr,"REF_MISMATCH\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[0]);
-+ fprintf(bcftools_stderr,"REF_MISMATCH\t%s\t%"PRId64"\t%s\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[0],ref);
- free(ref);
- return ERR_REF_MISMATCH;
- }
-@@ -344,9 +351,9 @@
- if ( has_non_acgtn(line->d.allele[i],line->shared.l) )
- {
- if ( args->check_ref==CHECK_REF_EXIT )
-- error("Non-ACGTN alternate allele at %s:%d .. REF_SEQ:'%s' vs VCF:'%s'\n", bcf_seqname(args->hdr,line),line->pos+1,ref,line->d.allele[i]);
-+ error("Non-ACGTN alternate allele at %s:%"PRId64" .. VCF:'%s'\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[i]);
- if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(bcftools_stderr,"NON_ACGTN_ALT\t%s\t%d\t%s\n", bcf_seqname(args->hdr,line),line->pos+1,line->d.allele[i]);
-+ fprintf(bcftools_stderr,"NON_ACGTN_ALT\t%s\t%"PRId64"\t%s\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1,line->d.allele[i]);
- return ERR_REF_MISMATCH;
- }
-
-@@ -354,7 +361,7 @@
- kputs(line->d.allele[i], &als[i]);
- seq_to_upper(als[i].s,0);
-
-- if ( i>0 && als[i].l==als[0].l && !strcmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
-+ if ( i>0 && als[i].l==als[0].l && !strcasecmp(als[0].s,als[i].s) ) return ERR_DUP_ALLELE;
- }
-
- // trim from right
-@@ -365,7 +372,7 @@
- int min_len = als[0].l;
- for (i=1; i<line->n_allele; i++)
- {
-- if ( als[0].s[ als[0].l-1 ]!=als[i].s[ als[i].l-1 ] ) break;
-+ if ( toupper(als[0].s[ als[0].l-1 ])!=toupper(als[i].s[ als[i].l-1 ]) ) break;
- if ( als[i].l < min_len ) min_len = als[i].l;
- }
- if ( i!=line->n_allele ) break; // there are differences, cannot be trimmed
-@@ -382,7 +389,7 @@
- int npad = line->pos >= args->aln_win ? args->aln_win : line->pos;
- free(ref);
- ref = faidx_fetch_seq(args->fai, (char*)args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad, line->pos-1, &nref);
-- if ( !ref ) error("faidx_fetch_seq failed at %s:%d\n", args->hdr->id[BCF_DT_CTG][line->rid].key, line->pos-npad+1);
-+ if ( !ref ) error("faidx_fetch_seq failed at %s:%"PRId64"\n", args->hdr->id[BCF_DT_CTG][line->rid].key, (int64_t) line->pos-npad+1);
- replace_iupac_codes(ref,nref);
- for (i=0; i<line->n_allele; i++)
- {
-@@ -422,7 +429,7 @@
-
- // Have the alleles changed?
- als[0].s[ als[0].l ] = 0; // in order for strcmp to work
-- if ( ori_pos==line->pos && !strcmp(line->d.allele[0],als[0].s) ) return ERR_OK;
-+ if ( ori_pos==line->pos && !strcasecmp(line->d.allele[0],als[0].s) ) return ERR_OK;
-
- // Create new block of alleles and update
- args->tmp_als_str.l = 0;
-@@ -461,23 +468,68 @@
- if ( len==BCF_VL_A ) \
- { \
- if ( ret!=src->n_allele-1 ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele-1,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele-1,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele-1,ret); \
-+ } \
- bcf_update_info_##type(args->hdr,dst,tag,vals+ialt,1); \
- } \
- else if ( len==BCF_VL_R ) \
- { \
- if ( ret!=src->n_allele ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele,ret); \
-+ } \
- if ( ialt!=0 ) vals[1] = vals[ialt+1]; \
- bcf_update_info_##type(args->hdr,dst,tag,vals,2); \
- } \
- else if ( len==BCF_VL_G ) \
- { \
- if ( ret!=src->n_allele*(src->n_allele+1)/2 ) \
-- error("Error: wrong number of fields in INFO/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_info_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in INFO/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,ret); \
-+ } \
- if ( ialt!=0 ) \
- { \
- vals[1] = vals[bcf_alleles2gt(0,ialt+1)]; \
-@@ -622,8 +674,23 @@
- if ( len==BCF_VL_A ) \
- { \
- if ( nvals!=(src->n_allele-1)*nsmpl ) \
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ } \
- nvals /= nsmpl; \
- type_t *src_vals = vals, *dst_vals = vals; \
- for (i=0; i<nsmpl; i++) \
-@@ -637,8 +704,23 @@
- else if ( len==BCF_VL_R ) \
- { \
- if ( nvals!=src->n_allele*nsmpl ) \
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d, found %d\n", \
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*nsmpl,nvals); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*nsmpl,nvals); \
-+ } \
- nvals /= nsmpl; \
- type_t *src_vals = vals, *dst_vals = vals; \
- for (i=0; i<nsmpl; i++) \
-@@ -653,7 +735,22 @@
- else if ( len==BCF_VL_G ) \
- { \
- if ( nvals!=src->n_allele*(src->n_allele+1)/2*nsmpl && nvals!=src->n_allele*nsmpl ) \
-- error("Error at %s:%d, the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \
-+ { \
-+ if ( args->force && !args->force_warned ) \
-+ { \
-+ fprintf(bcftools_stderr, \
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d, found %d. Removing the field.\n" \
-+ " (This warning is printed only once.)\n", \
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,(src->n_allele-1)*nsmpl,nvals); \
-+ args->force_warned = 1; \
-+ } \
-+ if ( args->force ) \
-+ { \
-+ bcf_update_format_##type(args->hdr,dst,tag,NULL,0); \
-+ return; \
-+ } \
-+ error("Error at %s:%"PRId64", the tag %s has wrong number of fields\n", bcf_seqname(args->hdr,src),(int64_t) src->pos+1,bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id)); \
-+ } \
- nvals /= nsmpl; \
- int all_haploid = nvals==src->n_allele ? 1 : 0; \
- type_t *src_vals = vals, *dst_vals = vals; \
-@@ -706,6 +803,7 @@
- {
- const char *tag = bcf_hdr_int2id(args->hdr,BCF_DT_ID,fmt->id);
- int ret = bcf_get_format_char(args->hdr,src,tag,&args->tmp_arr1,&args->ntmp_arr1);
-+ if ( !ret ) return; // all values can be empty, leave out the tag, no need to panic
- assert( ret>0 );
-
- kstring_t str;
-@@ -762,9 +860,25 @@
- if ( *se==',' ) nfields++;
- se++;
- }
-+ if ( nfields==1 && se-ptr==1 && *ptr=='.' ) continue; // missing value
- if ( nfields!=src->n_allele*(src->n_allele+1)/2 && nfields!=src->n_allele )
-- error("Error: wrong number of fields in FMT/%s at %s:%d, expected %d or %d, found %d\n",
-- tag,bcf_seqname(args->hdr,src),src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ {
-+ if ( args->force && !args->force_warned )
-+ {
-+ fprintf(bcftools_stderr,
-+ "Warning: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d or %d, found %d. Removing the field.\n"
-+ " (This warning is printed only once.)\n",
-+ tag,bcf_seqname(args->hdr,src),(int64_t)src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ args->force_warned = 1;
-+ }
-+ if ( args->force )
-+ {
-+ bcf_update_format_char(args->hdr,dst,tag,NULL,0);
-+ return;
-+ }
-+ error("Error: wrong number of fields in FMT/%s at %s:%"PRId64", expected %d or %d, found %d\n",
-+ tag,bcf_seqname(args->hdr,src),(int64_t) src->pos+1,src->n_allele*(src->n_allele+1)/2,src->n_allele,nfields);
-+ }
-
- int len = 0;
- if ( nfields==src->n_allele ) // haploid
-@@ -890,7 +1004,7 @@
- if ( len==BCF_VL_A ) \
- { \
- if (nvals_ori!=lines[0]->n_allele - 1) \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele-1); \
- int nvals = dst->n_allele - 1; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
- vals = (type_t*) args->tmp_arr1; \
-@@ -901,7 +1015,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele-1) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- for (k=0; k<nvals2; k++) \
- { \
-@@ -914,7 +1028,7 @@
- else if ( len==BCF_VL_R ) \
- { \
- if (nvals_ori!=lines[0]->n_allele) \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele); \
- int nvals = dst->n_allele; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
- vals = (type_t*) args->tmp_arr1; \
-@@ -925,7 +1039,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- for (k=0; k<nvals2; k++) \
- { \
-@@ -940,7 +1054,7 @@
- /* expecting diploid gt in INFO */ \
- if (nvals_ori!=lines[0]->n_allele*(lines[0]->n_allele+1)/2) { \
- fprintf(bcftools_stderr, "todo: merge Number=G INFO fields for haploid sites\n"); \
-- error("vcfnorm: number of fields in first record at position %s:%d for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \
-+ error("vcfnorm: number of fields in first record at position %s:%"PRId64" for INFO tag %s not as expected [found: %d vs expected:%d]\n", bcf_seqname(args->hdr,lines[0]),(int64_t) lines[0]->pos+1, tag, nvals_ori, lines[0]->n_allele*(lines[0]->n_allele+1)/2); \
- } \
- int nvals = dst->n_allele*(dst->n_allele+1)/2; \
- ENLARGE_ARRAY(type_t,set_missing,args->tmp_arr1,args->ntmp_arr1,1,nvals_ori,nvals); \
-@@ -952,7 +1066,7 @@
- if (nvals2<0) continue; /* info tag does not exist in this record, skip */ \
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- if (nvals2!=lines[i]->n_allele*(lines[i]->n_allele+1)/2) \
-- error("vcfnorm: could not merge INFO tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge INFO tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals2 = (type_t*) args->tmp_arr2; \
- int ia,ib; \
- k = 0; \
-@@ -1064,7 +1178,7 @@
- int ngts2 = bcf_get_genotypes(args->hdr,lines[i],&args->tmp_arr2,&ntmp2);
- args->ntmp_arr2 = ntmp2 * 4;
- ngts2 /= nsmpl;
-- if ( ngts!=ngts2 ) error("Error at %s:%d: cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1);
-+ if ( ngts!=ngts2 ) error("Error at %s:%"PRId64": cannot combine diploid with haploid genotype\n", bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1);
-
- int32_t *gt = (int32_t*) args->tmp_arr1;
- int32_t *gt2 = (int32_t*) args->tmp_arr2;
-@@ -1078,7 +1192,7 @@
- else
- {
- int ial = bcf_gt_allele(gt2[k]);
-- if ( ial>=args->maps[i].nals ) error("Error at %s:%d: incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1,ial);
-+ if ( ial>=args->maps[i].nals ) error("Error at %s:%"PRId64": incorrect allele index %d\n",bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1,ial);
- gt[k] = bcf_gt_unphased( args->maps[i].map[ial] ) | bcf_gt_is_phased(gt[k]);
- }
- }
-@@ -1125,7 +1239,7 @@
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- nvals2 /= nsmpl; \
- if (nvals2!=lines[i]->n_allele-1) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1153,7 +1267,7 @@
- args->ntmp_arr2 = ntmp2 * sizeof(type_t); \
- nvals2 /= nsmpl; \
- if (nvals2!=lines[i]->n_allele) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1200,7 +1314,7 @@
- int ndiploid = lines[i]->n_allele*(lines[i]->n_allele+1)/2; \
- int line_diploid = nvals2==ndiploid ? 1 : 0; \
- if (!(nvals2==1 || nvals2==lines[i]->n_allele || nvals2==lines[i]->n_allele*(lines[i]->n_allele+1)/2)) \
-- error("vcfnorm: could not merge FORMAT tag %s at position %s:%d\n", tag, bcf_seqname(args->hdr,lines[i]),lines[i]->pos+1); \
-+ error("vcfnorm: could not merge FORMAT tag %s at position %s:%"PRId64"\n", tag, bcf_seqname(args->hdr,lines[i]),(int64_t) lines[i]->pos+1); \
- vals = (type_t*) args->tmp_arr1; \
- vals2 = (type_t*) args->tmp_arr2; \
- for (j=0; j<nsmpl; j++) \
-@@ -1321,7 +1435,7 @@
- haploid[i] = 0;
- nfields = dst->n_allele*(dst->n_allele+1)/2;
- }
-- else error("The field %s at %s:%d neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),dst->pos+1);
-+ else error("The field %s at %s:%"PRId64" neither diploid nor haploid?\n", tag,bcf_seqname(args->hdr,dst),(int64_t) dst->pos+1);
-
- kstring_t *tmp = &args->tmp_str[i];
- kputc('.',tmp);
-@@ -1417,7 +1531,7 @@
- args->maps[i].nals = lines[i]->n_allele;
- hts_expand(int,args->maps[i].nals,args->maps[i].mals,args->maps[i].map);
- args->als = merge_alleles(lines[i]->d.allele, lines[i]->n_allele, args->maps[i].map, args->als, &args->nals, &args->mals);
-- if ( !args->als ) error("Failed to merge alleles at %s:%d\n", bcf_seqname(args->hdr,dst),dst->pos+1);
-+ if ( !args->als ) error("Failed to merge alleles at %s:%"PRId64"\n", bcf_seqname(args->hdr,dst),(int64_t) dst->pos+1);
- }
- bcf_update_alleles(args->hdr, dst, (const char**)args->als, args->nals);
- for (i=0; i<args->nals; i++)
-@@ -1535,11 +1649,11 @@
- }
- return NULL;
- }
--static void cmpals_add(args_t *args, bcf1_t *rec)
-+static void cmpals_add(cmpals_t *ca, bcf1_t *rec)
- {
-- args->ncmpals++;
-- hts_expand0(cmpals_t, args->ncmpals, args->mcmpals, args->cmpals);
-- cmpals_t *cmpals = args->cmpals + args->ncmpals - 1;
-+ ca->ncmpals++;
-+ hts_expand0(cmpals1_t, ca->ncmpals, ca->mcmpals, ca->cmpals);
-+ cmpals1_t *cmpals = ca->cmpals + ca->ncmpals - 1;
- free(cmpals->ref);
- cmpals->ref = strdup(rec->d.allele[0]);
- cmpals->n = rec->n_allele;
-@@ -1557,21 +1671,21 @@
- khash_str2int_inc(cmpals->hash, strdup(rec->d.allele[i]));
- }
- }
--static int cmpals_match(args_t *args, bcf1_t *rec)
-+static int cmpals_match(cmpals_t *ca, bcf1_t *rec)
- {
- int i, j;
-- for (i=0; i<args->ncmpals; i++)
-+ for (i=0; i<ca->ncmpals; i++)
- {
-- cmpals_t *cmpals = args->cmpals + i;
-+ cmpals1_t *cmpals = ca->cmpals + i;
- if ( rec->n_allele != cmpals->n ) continue;
-
- // NB. assuming both are normalized
-- if ( strcmp(rec->d.allele[0], cmpals->ref) ) continue;
-+ if ( strcasecmp(rec->d.allele[0], cmpals->ref) ) continue;
-
- // the most frequent case
- if ( rec->n_allele==2 )
- {
-- if ( strcmp(rec->d.allele[1], cmpals->alt) ) continue;
-+ if ( strcasecmp(rec->d.allele[1], cmpals->alt) ) continue;
- return 1;
- }
-
-@@ -1581,21 +1695,20 @@
- if ( j<rec->n_allele ) continue;
- return 1;
- }
-- cmpals_add(args, rec);
- return 0;
- }
--static void cmpals_reset(args_t *args) { args->ncmpals = 0; }
--static void cmpals_destroy(args_t *args)
-+static void cmpals_reset(cmpals_t *ca) { ca->ncmpals = 0; }
-+static void cmpals_destroy(cmpals_t *ca)
- {
- int i;
-- for (i=0; i<args->mcmpals; i++)
-+ for (i=0; i<ca->mcmpals; i++)
- {
-- cmpals_t *cmpals = args->cmpals + i;
-+ cmpals1_t *cmpals = ca->cmpals + i;
- free(cmpals->ref);
- free(cmpals->alt);
- if ( cmpals->hash ) khash_str2int_destroy_free(cmpals->hash);
- }
-- free(args->cmpals);
-+ free(ca->cmpals);
- }
-
- static void flush_buffer(args_t *args, htsFile *file, int n)
-@@ -1610,7 +1723,8 @@
- {
- if ( mrows_ready_to_flush(args, args->lines[k]) )
- {
-- while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line);
-+ while ( (line=mrows_flush(args)) )
-+ if ( bcf_write1(file, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- int merge = 1;
- if ( args->mrows_collapse!=COLLAPSE_BOTH && args->mrows_collapse!=COLLAPSE_ANY )
-@@ -1631,23 +1745,24 @@
- if ( args->rmdup & BCF_SR_PAIR_ANY ) continue; // rmdup by position only
- if ( args->rmdup & BCF_SR_PAIR_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue;
- if ( args->rmdup & BCF_SR_PAIR_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(args, args->lines[k]) ) continue;
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(&args->cmpals_out, args->lines[k]) ) continue;
- }
- else
- {
- prev_rid = args->lines[k]->rid;
- prev_pos = args->lines[k]->pos;
- prev_type = 0;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(args);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(&args->cmpals_out);
- }
- prev_type |= line_type;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(args, args->lines[k]);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(&args->cmpals_out, args->lines[k]);
- }
-- bcf_write1(file, args->hdr, args->lines[k]);
-+ if ( bcf_write1(file, args->hdr, args->lines[k])!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- if ( args->mrows_op==MROWS_MERGE && !args->rbuf.n )
- {
-- while ( (line=mrows_flush(args)) ) bcf_write1(file, args->hdr, line);
-+ while ( (line=mrows_flush(args)) )
-+ if ( bcf_write1(file, args->hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -1671,7 +1786,8 @@
-
- static void destroy_data(args_t *args)
- {
-- cmpals_destroy(args);
-+ cmpals_destroy(&args->cmpals_in);
-+ cmpals_destroy(&args->cmpals_out);
- int i;
- for (i=0; i<args->rbuf.m; i++)
- if ( args->lines[i] ) bcf_destroy1(args->lines[i]);
-@@ -1729,9 +1845,9 @@
- if ( args->check_ref & CHECK_REF_FIX )
- fix_dup_alt(args, line);
- else if ( args->check_ref==CHECK_REF_EXIT )
-- error("Duplicate alleles at %s:%d; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ error("Duplicate alleles at %s:%"PRId64"; run with -cw to turn the error into warning or with -cs to fix.\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- else if ( args->check_ref & CHECK_REF_WARN )
-- fprintf(bcftools_stderr,"ALT_DUP\t%s\t%d\n", bcf_seqname(args->hdr,line),line->pos+1);
-+ fprintf(bcftools_stderr,"ALT_DUP\t%s\t%"PRId64"\n", bcf_seqname(args->hdr,line),(int64_t) line->pos+1);
- }
- }
- }
-@@ -1756,7 +1872,7 @@
- if ( args->n_threads )
- hts_set_opt(out, HTS_OPT_THREAD_POOL, args->files->p);
- if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_norm");
-- bcf_hdr_write(out, args->hdr);
-+ if ( bcf_hdr_write(out, args->hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
-
- int prev_rid = -1, prev_pos = -1, prev_type = 0;
- while ( bcf_sr_next_line(args->files) )
-@@ -1772,17 +1888,17 @@
- if ( args->rmdup & BCF_SR_PAIR_ANY ) continue; // rmdup by position only
- if ( args->rmdup & BCF_SR_PAIR_SNPS && line_type&(VCF_SNP|VCF_MNP) && prev_type&(VCF_SNP|VCF_MNP) ) continue;
- if ( args->rmdup & BCF_SR_PAIR_INDELS && line_type&(VCF_INDEL) && prev_type&(VCF_INDEL) ) continue;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(args, line) ) continue;
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT && cmpals_match(&args->cmpals_in, line) ) continue;
- }
- else
- {
- prev_rid = line->rid;
- prev_pos = line->pos;
- prev_type = 0;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(args);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_reset(&args->cmpals_in);
- }
- prev_type |= line_type;
-- if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(args, line);
-+ if ( args->rmdup & BCF_SR_PAIR_EXACT ) cmpals_add(&args->cmpals_in, line);
- }
-
- // still on the same chromosome?
-@@ -1821,7 +1937,7 @@
- if ( j>0 ) flush_buffer(args, out, j);
- }
- flush_buffer(args, out, args->rbuf.n);
-- hts_close(out);
-+ if ( hts_close(out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
-
- fprintf(bcftools_stderr,"Lines total/split/realigned/skipped:\t%d/%d/%d/%d\n", args->ntotal,args->nsplit,args->nchanged,args->nskipped);
- if ( args->check_ref & CHECK_REF_FIX )
-@@ -1839,8 +1955,9 @@
- fprintf(bcftools_stderr, "Options:\n");
- fprintf(bcftools_stderr, " -c, --check-ref <e|w|x|s> check REF alleles and exit (e), warn (w), exclude (x), or set (s) bad sites [e]\n");
- fprintf(bcftools_stderr, " -D, --remove-duplicates remove duplicate lines of the same type.\n");
-- fprintf(bcftools_stderr, " -d, --rm-dup <type> remove duplicate snps|indels|both|all|none\n");
-- fprintf(bcftools_stderr, " -f, --fasta-ref <file> reference sequence (MANDATORY)\n");
-+ fprintf(bcftools_stderr, " -d, --rm-dup <type> remove duplicate snps|indels|both|all|exact\n");
-+ fprintf(bcftools_stderr, " -f, --fasta-ref <file> reference sequence\n");
-+ fprintf(bcftools_stderr, " --force try to proceed even if malformed tags are encountered. Experimental, use at your own risk\n");
- fprintf(bcftools_stderr, " -m, --multiallelics <-|+>[type] split multiallelics (-) or join biallelics (+), type: snps|indels|both|any [both]\n");
- fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n");
- fprintf(bcftools_stderr, " -N, --do-not-normalize do not normalize indels (with -m or -c s)\n");
-@@ -1851,9 +1968,16 @@
- fprintf(bcftools_stderr, " -s, --strict-filter when merging (-m+), merged site is PASS only if all sites being merged PASS\n");
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra (de)compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, " -w, --site-win <int> buffer for sorting lines which changed position during realignment [1000]\n");
- fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, "Examples:\n");
-+ fprintf(bcftools_stderr, " # normalize and left-align indels\n");
-+ fprintf(bcftools_stderr, " bcftools norm -f ref.fa in.vcf\n");
-+ fprintf(bcftools_stderr, "\n");
-+ fprintf(bcftools_stderr, " # split multi-allelic sites\n");
-+ fprintf(bcftools_stderr, " bcftools norm -m- in.vcf\n");
-+ fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-
-@@ -1877,6 +2001,7 @@
- static struct option loptions[] =
- {
- {"help",no_argument,NULL,'h'},
-+ {"force",no_argument,NULL,7},
- {"fasta-ref",required_argument,NULL,'f'},
- {"do-not-normalize",no_argument,NULL,'N'},
- {"multiallelics",required_argument,NULL,'m'},
-@@ -1906,6 +2031,7 @@
- else if ( !strcmp("all",optarg) ) args->rmdup = BCF_SR_PAIR_ANY;
- else if ( !strcmp("any",optarg) ) args->rmdup = BCF_SR_PAIR_ANY;
- else if ( !strcmp("none",optarg) ) args->rmdup = BCF_SR_PAIR_EXACT;
-+ else if ( !strcmp("exact",optarg) ) args->rmdup = BCF_SR_PAIR_EXACT;
- else error("The argument to -d not recognised: %s\n", optarg);
- break;
- case 'm':
-@@ -1953,8 +2079,9 @@
- break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-+ case 7 : args->force = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -1968,7 +2095,8 @@
- else fname = argv[optind];
-
- if ( !args->ref_fname && !args->mrows_op && !args->rmdup ) error("Expected -f, -m, -D or -d option\n");
-- if ( !args->ref_fname && args->check_ref&CHECK_REF_FIX ) error("Expected --fasta-ref with --check-ref s\n");
-+ if ( !args->check_ref && args->ref_fname ) args->check_ref = CHECK_REF_EXIT;
-+ if ( args->check_ref && !args->ref_fname ) error("Expected --fasta-ref with --check-ref\n");
-
- if ( args->region )
- {
-@@ -1982,7 +2110,7 @@
- }
-
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- if ( args->mrows_op&MROWS_SPLIT && args->rmdup ) error("Cannot combine -D and -m-\n");
- init_data(args);
- normalize_vcf(args);
---- python-pysam.orig/bcftools/vcfplugin.c
-+++ python-pysam/bcftools/vcfplugin.c
-@@ -38,7 +38,11 @@
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kseq.h>
- #include <htslib/khash_str2int.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#else
- #include <dlfcn.h>
-+#endif
- #include "bcftools.h"
- #include "vcmp.h"
- #include "filter.h"
-@@ -154,7 +158,7 @@
- {
- while (1)
- {
-- size_t len = strcspn(path, ":");
-+ size_t len = strcspn(path, HTS_PATH_SEPARATOR_STR);
-
- if ( len == 0 )
- {
-@@ -185,7 +189,7 @@
- }
-
- path += len;
-- if ( *path == ':' ) path++;
-+ if ( *path == HTS_PATH_SEPARATOR_CHAR ) path++;
- else break;
- }
- }
-@@ -207,28 +211,55 @@
-
- void *handle;
- char *tmp;
-- if ( fname[0]!='/' ) // not an absolute path
-+ int is_absolute_path = 0;
-+#ifdef _WIN32
-+ // Windows accepts both forward slash (/) and backslash (\) as folder separator
-+ // and can have any path prefixed by the drive letter and a colon (:).
-+ if ( fname[0]=='/' || fname[0]=='\\') is_absolute_path = 1;
-+ else if ( fname[0] && fname[1]==':' && (fname[2]=='/' || fname[2]=='\\') ) is_absolute_path = 1;
-+#else
-+ if ( fname[0]=='/' ) is_absolute_path = 1;
-+#endif
-+ if ( !is_absolute_path )
- {
- int i;
- for (i=0; i<args->nplugin_paths; i++)
- {
-- tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT);
-+ tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT);
-+#ifdef _WIN32
-+ handle = LoadLibraryA(tmp);
-+#else
- handle = dlopen(tmp, RTLD_NOW); // valgrind complains about unfreed memory, not our problem though
-+#endif
- if ( args->verbose > 1 )
- {
-- if ( !handle ) fprintf(stderr,"%s:\n\tdlopen .. %s\n", tmp,dlerror());
-- else fprintf(stderr,"%s:\n\tdlopen .. ok\n", tmp);
-+ if ( !handle )
-+#ifdef _WIN32
-+ fprintf(stderr,"%s:\n\tLoadLibraryA .. %lu\n", tmp, GetLastError());
-+#else
-+ fprintf(stderr,"%s:\n\tdlopen .. %s\n", tmp, dlerror());
-+#endif
-+ else fprintf(stderr,"%s:\n\tplugin open .. ok\n", tmp);
- }
- free(tmp);
- if ( handle ) return handle;
- }
- }
-
-+#ifdef _WIN32
-+ handle = LoadLibraryA(fname);
-+#else
- handle = dlopen(fname, RTLD_NOW);
-+#endif
- if ( args->verbose > 1 )
- {
-- if ( !handle ) fprintf(stderr,"%s:\n\tdlopen .. %s\n", fname,dlerror());
-- else fprintf(stderr,"%s:\n\tdlopen .. ok\n", fname);
-+ if ( !handle )
-+#ifdef _WIN32
-+ fprintf(stderr,"%s:\n\tLoadLibraryA .. %lu\n", fname, GetLastError());
-+#else
-+ fprintf(stderr,"%s:\n\tdlopen .. %s\n", fname, dlerror());
-+#endif
-+ else fprintf(stderr,"%s:\n\tplugin open .. ok\n", fname);
- }
-
- return handle;
-@@ -264,6 +295,55 @@
- return -1;
- }
-
-+#ifdef _WIN32
-+ plugin->init = (dl_init_f) GetProcAddress(plugin->handle, "init");
-+ if ( plugin->init && args->verbose > 1 ) fprintf(stderr,"\tinit .. ok\n");
-+
-+ plugin->run = (dl_run_f) GetProcAddress(plugin->handle, "run");
-+ if ( plugin->run && args->verbose > 1 ) fprintf(stderr,"\trun .. ok\n");
-+
-+ if ( !plugin->init && !plugin->run )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s, neither run or init found \n", plugin->name);
-+ else if ( args->verbose > 1 ) fprintf(stderr,"\tinit/run .. not found\n");
-+ return -1;
-+ }
-+
-+ plugin->version = (dl_version_f) GetProcAddress(plugin->handle, "version");
-+ if ( !plugin->version )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: version string not found\n", plugin->name);
-+ else if ( args->verbose > 1 ) fprintf(stderr,"\tversion .. not found\n");
-+ return -1;
-+ }
-+
-+ plugin->about = (dl_about_f) GetProcAddress(plugin->handle, "about");
-+ if ( !plugin->about )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: about string not found\n", plugin->name);
-+ return -1;
-+ }
-+
-+ plugin->usage = (dl_about_f) GetProcAddress(plugin->handle, "usage");
-+ if ( !plugin->usage )
-+ plugin->usage = plugin->about;
-+
-+ if ( plugin->run ) return 0;
-+
-+ plugin->process = (dl_process_f) GetProcAddress(plugin->handle, "process");
-+ if ( !plugin->process )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: process method not found\n", plugin->name);
-+ return -1;
-+ }
-+
-+ plugin->destroy = (dl_destroy_f) GetProcAddress(plugin->handle, "destroy");
-+ if ( !plugin->destroy )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: destroy method not found\n", plugin->name);
-+ return -1;
-+ }
-+#else
- dlerror();
- plugin->init = (dl_init_f) dlsym(plugin->handle, "init");
- char *ret = dlerror();
-@@ -325,6 +405,7 @@
- if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret);
- return -1;
- }
-+#endif
-
- return 0;
- }
-@@ -427,7 +508,7 @@
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -435,7 +516,11 @@
- {
- free(args->plugin.name);
- if ( args->plugin.destroy ) args->plugin.destroy();
-+#ifdef _WIN32
-+ FreeLibrary(args->plugin.handle);
-+#else
- dlclose(args->plugin.handle);
-+#endif
- if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out);
- if ( args->nplugin_paths>0 )
- {
-@@ -445,7 +530,7 @@
- }
- if ( args->filter )
- filter_destroy(args->filter);
-- if (args->out_fh) hts_close(args->out_fh);
-+ if (args->out_fh && hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- }
-
- static void usage(args_t *args)
-@@ -466,7 +551,7 @@
- fprintf(stderr, " --no-version do not append version and command line to the header\n");
- fprintf(stderr, " -o, --output <file> write output to a file [standard output]\n");
- fprintf(stderr, " -O, --output-type <type> 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n");
-- fprintf(stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "Plugin options:\n");
- fprintf(stderr, " -h, --help list plugin's options\n");
- fprintf(stderr, " -l, --list-plugins list available plugins. See BCFTOOLS_PLUGINS environment variable and man page for details\n");
-@@ -599,10 +684,16 @@
- char *fname = NULL;
- if ( optind>=argc || argv[optind][0]=='-' )
- {
-- if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin
-- else usage(args);
- args->plugin.argc = argc - optind + 1;
- args->plugin.argv = argv + optind - 1;
-+
-+ if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin
-+ else if ( optind>=argc ) usage(args);
-+ else
-+ {
-+ optind = 1;
-+ init_plugin(args);
-+ }
- }
- else
- {
-@@ -624,7 +715,7 @@
- error("Failed to read the targets: %s\n", args->targets_list);
- args->files->collapse |= COLLAPSE_SOME;
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
-@@ -640,7 +731,7 @@
- if ( line )
- {
- if ( line->errcode ) error("[E::main_plugin] Unchecked error (%d), exiting\n",line->errcode);
-- bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
- destroy_data(args);
---- python-pysam.orig/bcftools/vcfplugin.c.pysam.c
-+++ python-pysam/bcftools/vcfplugin.c.pysam.c
-@@ -40,7 +40,11 @@
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/kseq.h>
- #include <htslib/khash_str2int.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#else
- #include <dlfcn.h>
-+#endif
- #include "bcftools.h"
- #include "vcmp.h"
- #include "filter.h"
-@@ -156,7 +160,7 @@
- {
- while (1)
- {
-- size_t len = strcspn(path, ":");
-+ size_t len = strcspn(path, HTS_PATH_SEPARATOR_STR);
-
- if ( len == 0 )
- {
-@@ -187,7 +191,7 @@
- }
-
- path += len;
-- if ( *path == ':' ) path++;
-+ if ( *path == HTS_PATH_SEPARATOR_CHAR ) path++;
- else break;
- }
- }
-@@ -209,28 +213,55 @@
-
- void *handle;
- char *tmp;
-- if ( fname[0]!='/' ) // not an absolute path
-+ int is_absolute_path = 0;
-+#ifdef _WIN32
-+ // Windows accepts both forward slash (/) and backslash (\) as folder separator
-+ // and can have any path prefixed by the drive letter and a colon (:).
-+ if ( fname[0]=='/' || fname[0]=='\\') is_absolute_path = 1;
-+ else if ( fname[0] && fname[1]==':' && (fname[2]=='/' || fname[2]=='\\') ) is_absolute_path = 1;
-+#else
-+ if ( fname[0]=='/' ) is_absolute_path = 1;
-+#endif
-+ if ( !is_absolute_path )
- {
- int i;
- for (i=0; i<args->nplugin_paths; i++)
- {
-- tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT);
-+ tmp = msprintf("%s/%s%s", args->plugin_paths[i], fname, PLUGIN_EXT);
-+#ifdef _WIN32
-+ handle = LoadLibraryA(tmp);
-+#else
- handle = dlopen(tmp, RTLD_NOW); // valgrind complains about unfreed memory, not our problem though
-+#endif
- if ( args->verbose > 1 )
- {
-- if ( !handle ) fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", tmp,dlerror());
-- else fprintf(bcftools_stderr,"%s:\n\tdlopen .. ok\n", tmp);
-+ if ( !handle )
-+#ifdef _WIN32
-+ fprintf(bcftools_stderr,"%s:\n\tLoadLibraryA .. %lu\n", tmp, GetLastError());
-+#else
-+ fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", tmp, dlerror());
-+#endif
-+ else fprintf(bcftools_stderr,"%s:\n\tplugin open .. ok\n", tmp);
- }
- free(tmp);
- if ( handle ) return handle;
- }
- }
-
-+#ifdef _WIN32
-+ handle = LoadLibraryA(fname);
-+#else
- handle = dlopen(fname, RTLD_NOW);
-+#endif
- if ( args->verbose > 1 )
- {
-- if ( !handle ) fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", fname,dlerror());
-- else fprintf(bcftools_stderr,"%s:\n\tdlopen .. ok\n", fname);
-+ if ( !handle )
-+#ifdef _WIN32
-+ fprintf(bcftools_stderr,"%s:\n\tLoadLibraryA .. %lu\n", fname, GetLastError());
-+#else
-+ fprintf(bcftools_stderr,"%s:\n\tdlopen .. %s\n", fname, dlerror());
-+#endif
-+ else fprintf(bcftools_stderr,"%s:\n\tplugin open .. ok\n", fname);
- }
-
- return handle;
-@@ -266,6 +297,55 @@
- return -1;
- }
-
-+#ifdef _WIN32
-+ plugin->init = (dl_init_f) GetProcAddress(plugin->handle, "init");
-+ if ( plugin->init && args->verbose > 1 ) fprintf(bcftools_stderr,"\tinit .. ok\n");
-+
-+ plugin->run = (dl_run_f) GetProcAddress(plugin->handle, "run");
-+ if ( plugin->run && args->verbose > 1 ) fprintf(bcftools_stderr,"\trun .. ok\n");
-+
-+ if ( !plugin->init && !plugin->run )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s, neither run or init found \n", plugin->name);
-+ else if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\tinit/run .. not found\n");
-+ return -1;
-+ }
-+
-+ plugin->version = (dl_version_f) GetProcAddress(plugin->handle, "version");
-+ if ( !plugin->version )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: version string not found\n", plugin->name);
-+ else if ( args->verbose > 1 ) fprintf(bcftools_stderr,"\tversion .. not found\n");
-+ return -1;
-+ }
-+
-+ plugin->about = (dl_about_f) GetProcAddress(plugin->handle, "about");
-+ if ( !plugin->about )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: about string not found\n", plugin->name);
-+ return -1;
-+ }
-+
-+ plugin->usage = (dl_about_f) GetProcAddress(plugin->handle, "usage");
-+ if ( !plugin->usage )
-+ plugin->usage = plugin->about;
-+
-+ if ( plugin->run ) return 0;
-+
-+ plugin->process = (dl_process_f) GetProcAddress(plugin->handle, "process");
-+ if ( !plugin->process )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: process method not found\n", plugin->name);
-+ return -1;
-+ }
-+
-+ plugin->destroy = (dl_destroy_f) GetProcAddress(plugin->handle, "destroy");
-+ if ( !plugin->destroy )
-+ {
-+ if ( exit_on_error ) error("Could not initialize %s: destroy method not found\n", plugin->name);
-+ return -1;
-+ }
-+#else
- dlerror();
- plugin->init = (dl_init_f) dlsym(plugin->handle, "init");
- char *ret = dlerror();
-@@ -327,6 +407,7 @@
- if ( exit_on_error ) error("Could not initialize %s: %s\n", plugin->name, ret);
- return -1;
- }
-+#endif
-
- return 0;
- }
-@@ -429,7 +510,7 @@
- args->out_fh = hts_open(args->output_fname,hts_bcf_wmode(args->output_type));
- if ( args->out_fh == NULL ) error("Can't write to \"%s\": %s\n", args->output_fname, strerror(errno));
- if ( args->n_threads ) hts_set_threads(args->out_fh, args->n_threads);
-- bcf_hdr_write(args->out_fh, args->hdr_out);
-+ if ( bcf_hdr_write(args->out_fh, args->hdr_out)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
-
-@@ -437,7 +518,11 @@
- {
- free(args->plugin.name);
- if ( args->plugin.destroy ) args->plugin.destroy();
-+#ifdef _WIN32
-+ FreeLibrary(args->plugin.handle);
-+#else
- dlclose(args->plugin.handle);
-+#endif
- if ( args->hdr_out ) bcf_hdr_destroy(args->hdr_out);
- if ( args->nplugin_paths>0 )
- {
-@@ -447,7 +532,7 @@
- }
- if ( args->filter )
- filter_destroy(args->filter);
-- if (args->out_fh) hts_close(args->out_fh);
-+ if (args->out_fh && hts_close(args->out_fh)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->output_fname);
- }
-
- static void usage(args_t *args)
-@@ -468,7 +553,7 @@
- fprintf(bcftools_stderr, " --no-version do not append version and command line to the header\n");
- fprintf(bcftools_stderr, " -o, --output <file> write output to a file [standard output]\n");
- fprintf(bcftools_stderr, " -O, --output-type <type> 'b' compressed BCF; 'u' uncompressed BCF; 'z' compressed VCF; 'v' uncompressed VCF [v]\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra output compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "Plugin options:\n");
- fprintf(bcftools_stderr, " -h, --help list plugin's options\n");
- fprintf(bcftools_stderr, " -l, --list-plugins list available plugins. See BCFTOOLS_PLUGINS environment variable and man page for details\n");
-@@ -601,10 +686,16 @@
- char *fname = NULL;
- if ( optind>=argc || argv[optind][0]=='-' )
- {
-- if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin
-- else usage(args);
- args->plugin.argc = argc - optind + 1;
- args->plugin.argv = argv + optind - 1;
-+
-+ if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin
-+ else if ( optind>=argc ) usage(args);
-+ else
-+ {
-+ optind = 1;
-+ init_plugin(args);
-+ }
- }
- else
- {
-@@ -626,7 +717,7 @@
- error("Failed to read the targets: %s\n", args->targets_list);
- args->files->collapse |= COLLAPSE_SOME;
- }
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
-@@ -642,7 +733,7 @@
- if ( line )
- {
- if ( line->errcode ) error("[E::main_plugin] Unchecked error (%d), exiting\n",line->errcode);
-- bcf_write1(args->out_fh, args->hdr_out, line);
-+ if ( bcf_write1(args->out_fh, args->hdr_out, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- }
- }
- destroy_data(args);
---- python-pysam.orig/bcftools/vcfquery.c
-+++ python-pysam/bcftools/vcfquery.c
-@@ -128,7 +128,7 @@
- if ( args->print_header )
- {
- convert_header(args->convert,&str);
-- fwrite(str.s, str.l, 1, args->out);
-+ if ( fwrite(str.s, str.l, 1, args->out)!=1 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out?args->fn_out:"standard output");
- }
-
- int i,max_convert_unpack = convert_max_unpack(args->convert);
-@@ -168,8 +168,7 @@
-
- str.l = 0;
- convert_line(args->convert, line, &str);
-- if ( str.l )
-- fwrite(str.s, str.l, 1, args->out);
-+ if ( str.l && fwrite(str.s, str.l, 1, args->out)!=1 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out?args->fn_out:"standard output");
- }
- if ( str.m ) free(str.s);
- }
-@@ -308,7 +307,7 @@
- case 's': args->sample_list = optarg; break;
- case 'S': args->sample_list = optarg; args->sample_is_file = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -324,14 +323,18 @@
- {
- if ( !fname ) error("Missing the VCF file name\n");
- args->files = bcf_sr_init();
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- list_columns(args);
- bcf_sr_destroy(args->files);
- free(args);
- return 0;
- }
-
-- if ( !args->format_str ) usage();
-+ if ( !args->format_str )
-+ {
-+ if ( argc==1 && !fname ) usage();
-+ error("Error: Missing the --format option\n");
-+ }
- args->out = args->fn_out ? fopen(args->fn_out, "w") : stdout;
- if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno));
-
-@@ -349,7 +352,7 @@
- }
- while ( fname )
- {
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- fname = ++optind < argc ? argv[optind] : NULL;
- }
- init_data(args);
-@@ -357,7 +360,7 @@
- free(args->format_str);
- destroy_data(args);
- bcf_sr_destroy(args->files);
-- fclose(args->out);
-+ if ( fclose(args->out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fn_out);
- free(args);
- return 0;
- }
-@@ -384,7 +387,10 @@
- if ( !bcf_sr_add_reader(args->files, argv[k]) ) error("Failed to open %s: %s\n", argv[k],bcf_sr_strerror(args->files->errnum));
- init_data(args);
- if ( i==0 )
-+ {
- prev_samples = copy_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header));
-+ prev_nsamples = bcf_hdr_nsamples(args->files->readers[0].header);
-+ }
- else
- {
- args->print_header = 0;
-@@ -395,7 +401,7 @@
- destroy_data(args);
- bcf_sr_destroy(args->files);
- }
-- fclose(args->out);
-+ if ( fclose(args->out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fn_out);;
- destroy_list(fnames, nfiles);
- destroy_list(prev_samples, prev_nsamples);
- free(args->format_str);
---- python-pysam.orig/bcftools/vcfquery.c.pysam.c
-+++ python-pysam/bcftools/vcfquery.c.pysam.c
-@@ -130,7 +130,7 @@
- if ( args->print_header )
- {
- convert_header(args->convert,&str);
-- fwrite(str.s, str.l, 1, args->out);
-+ if ( fwrite(str.s, str.l, 1, args->out)!=1 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out?args->fn_out:"standard output");
- }
-
- int i,max_convert_unpack = convert_max_unpack(args->convert);
-@@ -170,8 +170,7 @@
-
- str.l = 0;
- convert_line(args->convert, line, &str);
-- if ( str.l )
-- fwrite(str.s, str.l, 1, args->out);
-+ if ( str.l && fwrite(str.s, str.l, 1, args->out)!=1 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out?args->fn_out:"standard output");
- }
- if ( str.m ) free(str.s);
- }
-@@ -310,7 +309,7 @@
- case 's': args->sample_list = optarg; break;
- case 'S': args->sample_list = optarg; args->sample_is_file = 1; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -326,14 +325,18 @@
- {
- if ( !fname ) error("Missing the VCF file name\n");
- args->files = bcf_sr_init();
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- list_columns(args);
- bcf_sr_destroy(args->files);
- free(args);
- return 0;
- }
-
-- if ( !args->format_str ) usage();
-+ if ( !args->format_str )
-+ {
-+ if ( argc==1 && !fname ) usage();
-+ error("Error: Missing the --format option\n");
-+ }
- args->out = args->fn_out ? fopen(args->fn_out, "w") : bcftools_stdout;
- if ( !args->out ) error("%s: %s\n", args->fn_out,strerror(errno));
-
-@@ -351,7 +354,7 @@
- }
- while ( fname )
- {
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- fname = ++optind < argc ? argv[optind] : NULL;
- }
- init_data(args);
-@@ -359,7 +362,7 @@
- free(args->format_str);
- destroy_data(args);
- bcf_sr_destroy(args->files);
-- fclose(args->out);
-+ if ( fclose(args->out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fn_out);
- free(args);
- return 0;
- }
-@@ -386,7 +389,10 @@
- if ( !bcf_sr_add_reader(args->files, argv[k]) ) error("Failed to open %s: %s\n", argv[k],bcf_sr_strerror(args->files->errnum));
- init_data(args);
- if ( i==0 )
-+ {
- prev_samples = copy_header(args->header, args->files->readers[0].header->samples, bcf_hdr_nsamples(args->files->readers[0].header));
-+ prev_nsamples = bcf_hdr_nsamples(args->files->readers[0].header);
-+ }
- else
- {
- args->print_header = 0;
-@@ -397,7 +403,7 @@
- destroy_data(args);
- bcf_sr_destroy(args->files);
- }
-- fclose(args->out);
-+ if ( fclose(args->out)!=0 ) error("[%s] Error: close failed .. %s\n", __func__,args->fn_out);;
- destroy_list(fnames, nfiles);
- destroy_list(prev_samples, prev_nsamples);
- free(args->format_str);
---- python-pysam.orig/bcftools/vcfroh.c
-+++ python-pysam/bcftools/vcfroh.c
-@@ -130,6 +130,11 @@
- return mem;
- }
-
-+static inline int max255(int i)
-+{
-+ return i < 256 ? i : 255;
-+}
-+
- static void init_data(args_t *args)
- {
- int i;
-@@ -156,7 +161,7 @@
- if ( !strncmp("GT,",args->estimate_AF,3) ) args->estimate_AF += 3;
- else if ( !strncmp("PL,",args->estimate_AF,3) ) { args->estimate_AF += 3; args->af_from_PL = 1; }
- if ( strcmp("-",args->estimate_AF) )
-- args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE);
-+ args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE|SMPL_VERBOSE);
- }
-
- if ( args->estimate_AF || args->fake_PLs )
-@@ -181,7 +186,7 @@
- error("Error: The FORMAT/GT tag not found in the header\n");
- }
-
-- args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE);
-+ args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE|SMPL_VERBOSE);
- if ( args->samples )
- {
- // we may be able to subset to a few samples, for a text VCF this can be a major speedup
-@@ -749,9 +754,9 @@
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
- double prob[3], norm = 0; \
-- prob[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- prob[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- prob[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ prob[0] = args->pl2p[ max255(p[irr]) ]; \
-+ prob[1] = args->pl2p[ max255(p[ira]) ]; \
-+ prob[2] = args->pl2p[ max255(p[iaa]) ]; \
- for (j=0; j<3; j++) norm += prob[j]; \
- for (j=0; j<3; j++) prob[j] /= norm; \
- af += 0.5*prob[1] + prob[2]; \
-@@ -779,9 +784,9 @@
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
- double prob[3], norm = 0; \
-- prob[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- prob[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- prob[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ prob[0] = args->pl2p[ max255(p[irr]) ]; \
-+ prob[1] = args->pl2p[ max255(p[ira]) ]; \
-+ prob[2] = args->pl2p[ max255(p[iaa]) ]; \
- for (j=0; j<3; j++) norm += prob[j]; \
- for (j=0; j<3; j++) prob[j] /= norm; \
- af += 0.5*prob[1] + prob[2]; \
-@@ -827,7 +832,7 @@
- if ( ret>0 )
- alt_freq = args->AFs[ial-1];
- if ( ret==-2 )
-- error("Type mismatch for INFO/%s tag at %s:%d\n", args->af_tag, bcf_seqname(args->hdr,line), line->pos+1);
-+ error("Type mismatch for INFO/%s tag at %s:%"PRId64"\n", args->af_tag, bcf_seqname(args->hdr,line), (int64_t) line->pos+1);
- }
- else if ( args->af_fname )
- {
-@@ -926,9 +931,9 @@
- type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
-- pdg[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- pdg[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- pdg[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ pdg[0] = args->pl2p[ max255(p[irr]) ]; \
-+ pdg[1] = args->pl2p[ max255(p[ira]) ]; \
-+ pdg[2] = args->pl2p[ max255(p[iaa]) ]; \
- }
- switch (fmt_pl->type) {
- case BCF_BT_INT8: BRANCH(int8_t); break;
-@@ -1089,7 +1094,7 @@
- fprintf(stderr, " -S, --samples-file <file> file of samples to analyze [all samples]\n");
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(stderr, " --threads <int> number of extra decompression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "HMM Options:\n");
- fprintf(stderr, " -a, --hw-to-az <float> P(AZ|HW) transition probability from HW (Hardy-Weinberg) to AZ (autozygous) state [6.7e-8]\n");
-@@ -1198,7 +1203,7 @@
- }
- }
- if ( !args->output_fname ) args->output_fname = "stdout";
-- if ( !args->output_type ) args->output_type = OUTPUT_ST|OUTPUT_RG;
-+ if ( !args->output_type || args->output_type==OUTPUT_GZ ) args->output_type |= OUTPUT_ST|OUTPUT_RG;
- char *fname = NULL;
- if ( optind==argc )
- {
-@@ -1229,7 +1234,7 @@
- }
- if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0)
- error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
---- python-pysam.orig/bcftools/vcfroh.c.pysam.c
-+++ python-pysam/bcftools/vcfroh.c.pysam.c
-@@ -132,6 +132,11 @@
- return mem;
- }
-
-+static inline int max255(int i)
-+{
-+ return i < 256 ? i : 255;
-+}
-+
- static void init_data(args_t *args)
- {
- int i;
-@@ -158,7 +163,7 @@
- if ( !strncmp("GT,",args->estimate_AF,3) ) args->estimate_AF += 3;
- else if ( !strncmp("PL,",args->estimate_AF,3) ) { args->estimate_AF += 3; args->af_from_PL = 1; }
- if ( strcmp("-",args->estimate_AF) )
-- args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE);
-+ args->af_smpl = smpl_ilist_init(args->hdr, args->estimate_AF, 1, SMPL_NONE|SMPL_VERBOSE);
- }
-
- if ( args->estimate_AF || args->fake_PLs )
-@@ -183,7 +188,7 @@
- error("Error: The FORMAT/GT tag not found in the header\n");
- }
-
-- args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE);
-+ args->roh_smpl = smpl_ilist_init(args->hdr, args->samples, args->samples_is_file, SMPL_NONE|SMPL_VERBOSE);
- if ( args->samples )
- {
- // we may be able to subset to a few samples, for a text VCF this can be a major speedup
-@@ -751,9 +756,9 @@
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
- double prob[3], norm = 0; \
-- prob[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- prob[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- prob[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ prob[0] = args->pl2p[ max255(p[irr]) ]; \
-+ prob[1] = args->pl2p[ max255(p[ira]) ]; \
-+ prob[2] = args->pl2p[ max255(p[iaa]) ]; \
- for (j=0; j<3; j++) norm += prob[j]; \
- for (j=0; j<3; j++) prob[j] /= norm; \
- af += 0.5*prob[1] + prob[2]; \
-@@ -781,9 +786,9 @@
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
- double prob[3], norm = 0; \
-- prob[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- prob[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- prob[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ prob[0] = args->pl2p[ max255(p[irr]) ]; \
-+ prob[1] = args->pl2p[ max255(p[ira]) ]; \
-+ prob[2] = args->pl2p[ max255(p[iaa]) ]; \
- for (j=0; j<3; j++) norm += prob[j]; \
- for (j=0; j<3; j++) prob[j] /= norm; \
- af += 0.5*prob[1] + prob[2]; \
-@@ -829,7 +834,7 @@
- if ( ret>0 )
- alt_freq = args->AFs[ial-1];
- if ( ret==-2 )
-- error("Type mismatch for INFO/%s tag at %s:%d\n", args->af_tag, bcf_seqname(args->hdr,line), line->pos+1);
-+ error("Type mismatch for INFO/%s tag at %s:%"PRId64"\n", args->af_tag, bcf_seqname(args->hdr,line), (int64_t) line->pos+1);
- }
- else if ( args->af_fname )
- {
-@@ -928,9 +933,9 @@
- type_t *p = (type_t*)fmt_pl->p + fmt_pl->n*ismpl; \
- if ( p[irr]<0 || p[ira]<0 || p[iaa]<0 ) continue; /* missing value */ \
- if ( p[irr]==p[ira] && p[irr]==p[iaa] ) continue; /* all values are the same */ \
-- pdg[0] = p[irr] < 256 ? args->pl2p[ p[irr] ] : args->pl2p[255]; \
-- pdg[1] = p[ira] < 256 ? args->pl2p[ p[ira] ] : args->pl2p[255]; \
-- pdg[2] = p[iaa] < 256 ? args->pl2p[ p[iaa] ] : args->pl2p[255]; \
-+ pdg[0] = args->pl2p[ max255(p[irr]) ]; \
-+ pdg[1] = args->pl2p[ max255(p[ira]) ]; \
-+ pdg[2] = args->pl2p[ max255(p[iaa]) ]; \
- }
- switch (fmt_pl->type) {
- case BCF_BT_INT8: BRANCH(int8_t); break;
-@@ -1091,7 +1096,7 @@
- fprintf(bcftools_stderr, " -S, --samples-file <file> file of samples to analyze [all samples]\n");
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra decompression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "HMM Options:\n");
- fprintf(bcftools_stderr, " -a, --hw-to-az <float> P(AZ|HW) transition probability from HW (Hardy-Weinberg) to AZ (autozygous) state [6.7e-8]\n");
-@@ -1200,7 +1205,7 @@
- }
- }
- if ( !args->output_fname ) args->output_fname = "bcftools_stdout";
-- if ( !args->output_type ) args->output_type = OUTPUT_ST|OUTPUT_RG;
-+ if ( !args->output_type || args->output_type==OUTPUT_GZ ) args->output_type |= OUTPUT_ST|OUTPUT_RG;
- char *fname = NULL;
- if ( optind==argc )
- {
-@@ -1231,7 +1236,7 @@
- }
- if ( args->n_threads && bcf_sr_set_threads(args->files, args->n_threads)<0)
- error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- while ( bcf_sr_next_line(args->files) )
---- python-pysam.orig/bcftools/vcfsom.c
-+++ python-pysam/bcftools/vcfsom.c
-@@ -35,6 +35,7 @@
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/hts_os.h>
- #include <inttypes.h>
- #include "bcftools.h"
-
-@@ -356,7 +357,7 @@
- if ( !som->w ) error("Could not alloc %"PRIu64" bytes [nbin=%d ndim=%d]\n", (uint64_t)(sizeof(double)*som->size),som->nbin,som->ndim);
- int i;
- for (i=0; i<som->size*som->kdim; i++)
-- som->w[i] = (double)random()/RAND_MAX;
-+ som->w[i] = random();
- som->a_idx = (int*) malloc(sizeof(int)*som->ndim);
- som->b_idx = (int*) malloc(sizeof(int)*som->ndim);
- som->div = (double*) malloc(sizeof(double)*som->ndim);
-@@ -695,7 +696,7 @@
- case 't': args->action = SOM_TRAIN; break;
- case 'c': args->action = SOM_CLASSIFY; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfsom.c.pysam.c
-+++ python-pysam/bcftools/vcfsom.c.pysam.c
-@@ -37,6 +37,7 @@
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-+#include <htslib/hts_os.h>
- #include <inttypes.h>
- #include "bcftools.h"
-
-@@ -358,7 +359,7 @@
- if ( !som->w ) error("Could not alloc %"PRIu64" bytes [nbin=%d ndim=%d]\n", (uint64_t)(sizeof(double)*som->size),som->nbin,som->ndim);
- int i;
- for (i=0; i<som->size*som->kdim; i++)
-- som->w[i] = (double)random()/RAND_MAX;
-+ som->w[i] = random();
- som->a_idx = (int*) malloc(sizeof(int)*som->ndim);
- som->b_idx = (int*) malloc(sizeof(int)*som->ndim);
- som->div = (double*) malloc(sizeof(double)*som->ndim);
-@@ -697,7 +698,7 @@
- case 't': args->action = SOM_TRAIN; break;
- case 'c': args->action = SOM_CLASSIFY; break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfsort.c
-+++ python-pysam/bcftools/vcfsort.c
-@@ -29,13 +29,18 @@
- #include <getopt.h>
- #include <ctype.h>
- #include <string.h>
-+#include <strings.h>
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <math.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#endif
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-+#include <htslib/hts_os.h>
- #include "kheap.h"
- #include "bcftools.h"
-
-@@ -59,6 +64,33 @@
- }
- args_t;
-
-+void clean_files(args_t *args)
-+{
-+ int i;
-+ fprintf(stderr,"Cleaning\n");
-+ for (i=0; i<args->nblk; i++)
-+ {
-+ blk_t *blk = args->blk + i;
-+ if ( blk->fname )
-+ {
-+ unlink(blk->fname);
-+ free(blk->fname);
-+ }
-+ if ( blk->rec )
-+ bcf_destroy(blk->rec);
-+ }
-+ rmdir(args->tmp_dir);
-+}
-+void clean_files_and_throw(args_t *args, const char *format, ...)
-+{
-+ va_list ap;
-+ va_start(ap, format);
-+ vfprintf(stderr, format, ap);
-+ va_end(ap);
-+ clean_files(args);
-+ exit(-1);
-+}
-+
- int cmp_bcf_pos(const void *aptr, const void *bptr)
- {
- bcf1_t *a = *((bcf1_t**)aptr);
-@@ -98,18 +130,20 @@
- kstring_t str = {0,0,0};
- ksprintf(&str, "%s/%05d.bcf", args->tmp_dir, (int)args->nblk);
- blk->fname = str.s;
-+ blk->rec = NULL;
-+ blk->fh = NULL;
-
- htsFile *fh = hts_open(blk->fname, "wbu");
-- if ( fh == NULL ) error("Cannot write %s: %s\n", blk->fname, strerror(errno));
-- bcf_hdr_write(fh, args->hdr);
-+ if ( fh == NULL ) clean_files_and_throw(args, "Cannot write %s: %s\n", blk->fname, strerror(errno));
-+ if ( bcf_hdr_write(fh, args->hdr)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,blk->fname);
-
- int i;
- for (i=0; i<args->nbuf; i++)
- {
-- bcf_write(fh, args->hdr, args->buf[i]);
-+ if ( bcf_write(fh, args->hdr, args->buf[i])!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,blk->fname);
- bcf_destroy(args->buf[i]);
- }
-- hts_close(fh);
-+ if ( hts_close(fh)!=0 ) clean_files_and_throw(args, "[%s] Error: close failed .. %s\n", __func__,blk->fname);
-
- args->nbuf = 0;
- args->mem = 0;
-@@ -128,25 +162,27 @@
- void sort_blocks(args_t *args)
- {
- htsFile *in = hts_open(args->fname, "r");
-- if ( !in ) error("Could not read %s\n", args->fname);
-+ if ( !in ) clean_files_and_throw(args, "Could not read %s\n", args->fname);
- args->hdr = bcf_hdr_read(in);
-+ if ( !args->hdr) clean_files_and_throw(args, "Could not read VCF/BCF headers from %s\n", args->fname);
-
- while ( 1 )
- {
- bcf1_t *rec = bcf_init();
- int ret = bcf_read1(in, args->hdr, rec);
-- if ( ret < -1 ) error("Error encountered while parsing the input\n");
-+ if ( ret < -1 ) clean_files_and_throw(args,"Error encountered while parsing the input\n");
- if ( ret == -1 )
- {
- bcf_destroy(rec);
- break;
- }
-+ if ( rec->errcode ) clean_files_and_throw(args,"Error encountered while parsing the input at %s:%d\n",bcf_seqname(args->hdr,rec),rec->pos+1);
- buf_push(args, rec);
- }
- buf_flush(args);
- free(args->buf);
-
-- if ( hts_close(in)!=0 ) error("Close failed: %s\n", args->fname);
-+ if ( hts_close(in)!=0 ) clean_files_and_throw(args,"Close failed: %s\n", args->fname);
- }
-
- static inline int blk_is_smaller(blk_t **aptr, blk_t **bptr)
-@@ -159,14 +195,14 @@
- }
- KHEAP_INIT(blk, blk_t*, blk_is_smaller)
-
--void blk_read(khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk)
-+void blk_read(args_t *args, khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk)
- {
- if ( !blk->fh ) return;
- int ret = bcf_read(blk->fh, hdr, blk->rec);
-- if ( ret < -1 ) error("Error reading %s\n", blk->fname);
-+ if ( ret < -1 ) clean_files_and_throw(args, "Error reading %s\n", blk->fname);
- if ( ret == -1 )
- {
-- if ( hts_close(blk->fh)!=0 ) error("Close failed: %s\n", blk->fname);
-+ if ( hts_close(blk->fh)!=0 ) clean_files_and_throw(args, "Close failed: %s\n", blk->fname);
- blk->fh = 0;
- return;
- }
-@@ -184,33 +220,26 @@
- {
- blk_t *blk = args->blk + i;
- blk->fh = hts_open(blk->fname, "r");
-- if ( !blk->fh ) error("Could not read %s: %s\n", blk->fname, strerror(errno));
-+ if ( !blk->fh ) clean_files_and_throw(args, "Could not read %s: %s\n", blk->fname, strerror(errno));
- bcf_hdr_t *hdr = bcf_hdr_read(blk->fh);
- bcf_hdr_destroy(hdr);
- blk->rec = bcf_init();
-- blk_read(bhp, args->hdr, blk);
-+ blk_read(args, bhp, args->hdr, blk);
- }
-
- htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-- bcf_hdr_write(out, args->hdr);
-+ if ( bcf_hdr_write(out, args->hdr)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- while ( bhp->ndat )
- {
- blk_t *blk = bhp->dat[0];
-- bcf_write(out, args->hdr, blk->rec);
-+ if ( bcf_write(out, args->hdr, blk->rec)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- khp_delete(blk, bhp);
-- blk_read(bhp, args->hdr, blk);
-+ blk_read(args, bhp, args->hdr, blk);
- }
-- if ( hts_close(out)!=0 ) error("Close failed: %s\n", args->output_fname);
-+ if ( hts_close(out)!=0 ) clean_files_and_throw(args, "Close failed: %s\n", args->output_fname);
-+
-+ clean_files(args);
-
-- fprintf(stderr,"Cleaning\n");
-- for (i=0; i<args->nblk; i++)
-- {
-- blk_t *blk = args->blk + i;
-- unlink(blk->fname);
-- free(blk->fname);
-- bcf_destroy(blk->rec);
-- }
-- rmdir(args->tmp_dir);
- free(args->blk);
- khp_destroy(blk, bhp);
- fprintf(stderr,"Done\n");
-@@ -226,7 +255,7 @@
- fprintf(stderr, " -m, --max-mem <float>[kMG] maximum memory to use [768M]\n"); // using metric units, 1M=1e6
- fprintf(stderr, " -o, --output-file <file> output file name [stdout]\n");
- fprintf(stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
-- fprintf(stderr, " -T, --temp-dir <dir> temporary files [/tmp/bcftools-sort.XXXXXX/]\n");
-+ fprintf(stderr, " -T, --temp-dir <dir> temporary files [/tmp/bcftools-sort.XXXXXX]\n");
- fprintf(stderr, "\n");
- exit(1);
- }
-@@ -243,22 +272,40 @@
- }
-
- void mkdir_p(const char *fmt, ...);
--void init(args_t *args)
-+static void init(args_t *args)
- {
-- if ( !args->tmp_dir )
-+#ifdef _WIN32
-+ char tmp_path[MAX_PATH];
-+ int ret = GetTempPath(MAX_PATH, tmp_path);
-+ if (!ret || ret > MAX_PATH)
-+ error("Could not get the path to the temporary folder\n");
-+ if (strlen(tmp_path) + strlen("/bcftools-sort.XXXXXX") >= MAX_PATH)
-+ error("Full path to the temporary folder is too long\n");
-+ strcat(tmp_path, "/bcftools-sort.XXXXXX");
-+ args->tmp_dir = strdup(tmp_path);
-+#else
-+ args->tmp_dir = args->tmp_dir ? strdup(args->tmp_dir) : strdup("/tmp/bcftools-sort.XXXXXX");
-+#endif
-+ size_t len = strlen(args->tmp_dir);
-+ if ( !strcmp("XXXXXX",args->tmp_dir+len-6) )
- {
-- args->tmp_dir = strdup("/tmp/bcftools-sort.XXXXXX");
-- char *tmp_dir = mkdtemp(args->tmp_dir);
-- if ( !tmp_dir ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+#ifdef _WIN32
-+ int ret = mkdir(mktemp(args->tmp_dir), 0700);
-+ if ( ret ) error("mkdir(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+#else
-+ char *tmp = mkdtemp(args->tmp_dir);
-+ if ( !tmp ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+ int ret = chmod(tmp, S_IRUSR|S_IWUSR|S_IXUSR);
-+ if ( ret ) error("chmod(%s,S_IRUSR|S_IWUSR|S_IXUSR) failed: %s\n", args->tmp_dir,strerror(errno));
-+#endif
- }
-- else
-- {
-- args->tmp_dir = strdup(args->tmp_dir);
-- mkdir_p(args->tmp_dir);
-+ else {
-+ mkdir_p("%s/",args->tmp_dir);
- }
-+
- fprintf(stderr,"Writing to %s\n", args->tmp_dir);
- }
--void destroy(args_t *args)
-+static void destroy(args_t *args)
- {
- bcf_hdr_destroy(args->hdr);
- free(args->tmp_dir);
-@@ -298,8 +345,8 @@
- default: error("The output type \"%s\" not recognised\n", optarg);
- };
- break;
-- case 'h': usage(args);
-- case '?': usage(args);
-+ case 'h':
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfsort.c.pysam.c
-+++ python-pysam/bcftools/vcfsort.c.pysam.c
-@@ -31,13 +31,18 @@
- #include <getopt.h>
- #include <ctype.h>
- #include <string.h>
-+#include <strings.h>
- #include <errno.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <math.h>
-+#ifdef _WIN32
-+#include <windows.h>
-+#endif
- #include <htslib/vcf.h>
- #include <htslib/kstring.h>
-+#include <htslib/hts_os.h>
- #include "kheap.h"
- #include "bcftools.h"
-
-@@ -61,6 +66,33 @@
- }
- args_t;
-
-+void clean_files(args_t *args)
-+{
-+ int i;
-+ fprintf(bcftools_stderr,"Cleaning\n");
-+ for (i=0; i<args->nblk; i++)
-+ {
-+ blk_t *blk = args->blk + i;
-+ if ( blk->fname )
-+ {
-+ unlink(blk->fname);
-+ free(blk->fname);
-+ }
-+ if ( blk->rec )
-+ bcf_destroy(blk->rec);
-+ }
-+ rmdir(args->tmp_dir);
-+}
-+void clean_files_and_throw(args_t *args, const char *format, ...)
-+{
-+ va_list ap;
-+ va_start(ap, format);
-+ vfprintf(bcftools_stderr, format, ap);
-+ va_end(ap);
-+ clean_files(args);
-+ exit(-1);
-+}
-+
- int cmp_bcf_pos(const void *aptr, const void *bptr)
- {
- bcf1_t *a = *((bcf1_t**)aptr);
-@@ -100,18 +132,20 @@
- kstring_t str = {0,0,0};
- ksprintf(&str, "%s/%05d.bcf", args->tmp_dir, (int)args->nblk);
- blk->fname = str.s;
-+ blk->rec = NULL;
-+ blk->fh = NULL;
-
- htsFile *fh = hts_open(blk->fname, "wbu");
-- if ( fh == NULL ) error("Cannot write %s: %s\n", blk->fname, strerror(errno));
-- bcf_hdr_write(fh, args->hdr);
-+ if ( fh == NULL ) clean_files_and_throw(args, "Cannot write %s: %s\n", blk->fname, strerror(errno));
-+ if ( bcf_hdr_write(fh, args->hdr)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,blk->fname);
-
- int i;
- for (i=0; i<args->nbuf; i++)
- {
-- bcf_write(fh, args->hdr, args->buf[i]);
-+ if ( bcf_write(fh, args->hdr, args->buf[i])!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,blk->fname);
- bcf_destroy(args->buf[i]);
- }
-- hts_close(fh);
-+ if ( hts_close(fh)!=0 ) clean_files_and_throw(args, "[%s] Error: close failed .. %s\n", __func__,blk->fname);
-
- args->nbuf = 0;
- args->mem = 0;
-@@ -130,25 +164,27 @@
- void sort_blocks(args_t *args)
- {
- htsFile *in = hts_open(args->fname, "r");
-- if ( !in ) error("Could not read %s\n", args->fname);
-+ if ( !in ) clean_files_and_throw(args, "Could not read %s\n", args->fname);
- args->hdr = bcf_hdr_read(in);
-+ if ( !args->hdr) clean_files_and_throw(args, "Could not read VCF/BCF headers from %s\n", args->fname);
-
- while ( 1 )
- {
- bcf1_t *rec = bcf_init();
- int ret = bcf_read1(in, args->hdr, rec);
-- if ( ret < -1 ) error("Error encountered while parsing the input\n");
-+ if ( ret < -1 ) clean_files_and_throw(args,"Error encountered while parsing the input\n");
- if ( ret == -1 )
- {
- bcf_destroy(rec);
- break;
- }
-+ if ( rec->errcode ) clean_files_and_throw(args,"Error encountered while parsing the input at %s:%d\n",bcf_seqname(args->hdr,rec),rec->pos+1);
- buf_push(args, rec);
- }
- buf_flush(args);
- free(args->buf);
-
-- if ( hts_close(in)!=0 ) error("Close failed: %s\n", args->fname);
-+ if ( hts_close(in)!=0 ) clean_files_and_throw(args,"Close failed: %s\n", args->fname);
- }
-
- static inline int blk_is_smaller(blk_t **aptr, blk_t **bptr)
-@@ -161,14 +197,14 @@
- }
- KHEAP_INIT(blk, blk_t*, blk_is_smaller)
-
--void blk_read(khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk)
-+void blk_read(args_t *args, khp_blk_t *bhp, bcf_hdr_t *hdr, blk_t *blk)
- {
- if ( !blk->fh ) return;
- int ret = bcf_read(blk->fh, hdr, blk->rec);
-- if ( ret < -1 ) error("Error reading %s\n", blk->fname);
-+ if ( ret < -1 ) clean_files_and_throw(args, "Error reading %s\n", blk->fname);
- if ( ret == -1 )
- {
-- if ( hts_close(blk->fh)!=0 ) error("Close failed: %s\n", blk->fname);
-+ if ( hts_close(blk->fh)!=0 ) clean_files_and_throw(args, "Close failed: %s\n", blk->fname);
- blk->fh = 0;
- return;
- }
-@@ -186,33 +222,26 @@
- {
- blk_t *blk = args->blk + i;
- blk->fh = hts_open(blk->fname, "r");
-- if ( !blk->fh ) error("Could not read %s: %s\n", blk->fname, strerror(errno));
-+ if ( !blk->fh ) clean_files_and_throw(args, "Could not read %s: %s\n", blk->fname, strerror(errno));
- bcf_hdr_t *hdr = bcf_hdr_read(blk->fh);
- bcf_hdr_destroy(hdr);
- blk->rec = bcf_init();
-- blk_read(bhp, args->hdr, blk);
-+ blk_read(args, bhp, args->hdr, blk);
- }
-
- htsFile *out = hts_open(args->output_fname, hts_bcf_wmode(args->output_type));
-- bcf_hdr_write(out, args->hdr);
-+ if ( bcf_hdr_write(out, args->hdr)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- while ( bhp->ndat )
- {
- blk_t *blk = bhp->dat[0];
-- bcf_write(out, args->hdr, blk->rec);
-+ if ( bcf_write(out, args->hdr, blk->rec)!=0 ) clean_files_and_throw(args, "[%s] Error: cannot write to %s\n", __func__,args->output_fname);
- khp_delete(blk, bhp);
-- blk_read(bhp, args->hdr, blk);
-+ blk_read(args, bhp, args->hdr, blk);
- }
-- if ( hts_close(out)!=0 ) error("Close failed: %s\n", args->output_fname);
-+ if ( hts_close(out)!=0 ) clean_files_and_throw(args, "Close failed: %s\n", args->output_fname);
-+
-+ clean_files(args);
-
-- fprintf(bcftools_stderr,"Cleaning\n");
-- for (i=0; i<args->nblk; i++)
-- {
-- blk_t *blk = args->blk + i;
-- unlink(blk->fname);
-- free(blk->fname);
-- bcf_destroy(blk->rec);
-- }
-- rmdir(args->tmp_dir);
- free(args->blk);
- khp_destroy(blk, bhp);
- fprintf(bcftools_stderr,"Done\n");
-@@ -228,7 +257,7 @@
- fprintf(bcftools_stderr, " -m, --max-mem <float>[kMG] maximum memory to use [768M]\n"); // using metric units, 1M=1e6
- fprintf(bcftools_stderr, " -o, --output-file <file> output file name [bcftools_stdout]\n");
- fprintf(bcftools_stderr, " -O, --output-type <b|u|z|v> b: compressed BCF, u: uncompressed BCF, z: compressed VCF, v: uncompressed VCF [v]\n");
-- fprintf(bcftools_stderr, " -T, --temp-dir <dir> temporary files [/tmp/bcftools-sort.XXXXXX/]\n");
-+ fprintf(bcftools_stderr, " -T, --temp-dir <dir> temporary files [/tmp/bcftools-sort.XXXXXX]\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
- }
-@@ -245,22 +274,40 @@
- }
-
- void mkdir_p(const char *fmt, ...);
--void init(args_t *args)
-+static void init(args_t *args)
- {
-- if ( !args->tmp_dir )
-+#ifdef _WIN32
-+ char tmp_path[MAX_PATH];
-+ int ret = GetTempPath(MAX_PATH, tmp_path);
-+ if (!ret || ret > MAX_PATH)
-+ error("Could not get the path to the temporary folder\n");
-+ if (strlen(tmp_path) + strlen("/bcftools-sort.XXXXXX") >= MAX_PATH)
-+ error("Full path to the temporary folder is too long\n");
-+ strcat(tmp_path, "/bcftools-sort.XXXXXX");
-+ args->tmp_dir = strdup(tmp_path);
-+#else
-+ args->tmp_dir = args->tmp_dir ? strdup(args->tmp_dir) : strdup("/tmp/bcftools-sort.XXXXXX");
-+#endif
-+ size_t len = strlen(args->tmp_dir);
-+ if ( !strcmp("XXXXXX",args->tmp_dir+len-6) )
- {
-- args->tmp_dir = strdup("/tmp/bcftools-sort.XXXXXX");
-- char *tmp_dir = mkdtemp(args->tmp_dir);
-- if ( !tmp_dir ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+#ifdef _WIN32
-+ int ret = mkdir(mktemp(args->tmp_dir), 0700);
-+ if ( ret ) error("mkdir(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+#else
-+ char *tmp = mkdtemp(args->tmp_dir);
-+ if ( !tmp ) error("mkdtemp(%s) failed: %s\n", args->tmp_dir,strerror(errno));
-+ int ret = chmod(tmp, S_IRUSR|S_IWUSR|S_IXUSR);
-+ if ( ret ) error("chmod(%s,S_IRUSR|S_IWUSR|S_IXUSR) failed: %s\n", args->tmp_dir,strerror(errno));
-+#endif
- }
-- else
-- {
-- args->tmp_dir = strdup(args->tmp_dir);
-- mkdir_p(args->tmp_dir);
-+ else {
-+ mkdir_p("%s/",args->tmp_dir);
- }
-+
- fprintf(bcftools_stderr,"Writing to %s\n", args->tmp_dir);
- }
--void destroy(args_t *args)
-+static void destroy(args_t *args)
- {
- bcf_hdr_destroy(args->hdr);
- free(args->tmp_dir);
-@@ -300,8 +347,8 @@
- default: error("The output type \"%s\" not recognised\n", optarg);
- };
- break;
-- case 'h': usage(args);
-- case '?': usage(args);
-+ case 'h':
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
---- python-pysam.orig/bcftools/vcfstats.c
-+++ python-pysam/bcftools/vcfstats.c
-@@ -70,7 +70,7 @@
-
- typedef struct
- {
-- int n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts;
-+ uint32_t n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts;
- int *af_ts, *af_tv, *af_snps; // first bin of af_* stats are singletons
- #if HWE_STATS
- int *af_hwe;
-@@ -88,12 +88,14 @@
- int subst[15];
- int *smpl_hets, *smpl_homRR, *smpl_homAA, *smpl_ts, *smpl_tv, *smpl_indels, *smpl_ndp, *smpl_sngl;
- int *smpl_hapRef, *smpl_hapAlt, *smpl_missing;
-- int *smpl_indel_hets, *smpl_indel_homs;
-+ int *smpl_ins_hets, *smpl_del_hets, *smpl_ins_homs, *smpl_del_homs;
- int *smpl_frm_shifts; // not-applicable, in-frame, out-frame
- unsigned long int *smpl_dp;
- idist_t dp, dp_sites;
- int nusr;
- user_stats_t *usr;
-+ double *dvaf; // distribution of the mean indel-allele frequency by length: -m_indel,-(m_indel-1),...-1,0,1,..,m_indel
-+ uint32_t *nvaf;
- }
- stats_t;
-
-@@ -476,8 +478,10 @@
- stats->smpl_homRR = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_hapRef = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_hapAlt = (int *) calloc(args->files->n_smpl,sizeof(int));
-- stats->smpl_indel_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-- stats->smpl_indel_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_ins_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_del_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_ins_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_del_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_ts = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_tv = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_indels = (int *) calloc(args->files->n_smpl,sizeof(int));
-@@ -489,6 +493,8 @@
- #endif
- if ( args->exons_fname )
- stats->smpl_frm_shifts = (int*) calloc(args->files->n_smpl*3,sizeof(int));
-+ stats->nvaf = (uint32_t*) calloc(stats->m_indel*2+1,sizeof(*stats->nvaf));
-+ stats->dvaf = (double*) calloc(stats->m_indel*2+1,sizeof(*stats->dvaf));
- }
- idist_init(&stats->dp, args->dp_min,args->dp_max,args->dp_step);
- idist_init(&stats->dp_sites, args->dp_min,args->dp_max,args->dp_step);
-@@ -558,8 +564,10 @@
- free(stats->smpl_homRR);
- free(stats->smpl_hapRef);
- free(stats->smpl_hapAlt);
-- free(stats->smpl_indel_homs);
-- free(stats->smpl_indel_hets);
-+ free(stats->smpl_ins_homs);
-+ free(stats->smpl_del_homs);
-+ free(stats->smpl_ins_hets);
-+ free(stats->smpl_del_hets);
- free(stats->smpl_ts);
- free(stats->smpl_tv);
- free(stats->smpl_indels);
-@@ -576,6 +584,8 @@
- }
- free(stats->usr);
- if ( args->exons ) free(stats->smpl_frm_shifts);
-+ free(stats->nvaf);
-+ free(stats->dvaf);
- }
- for (j=0; j<args->nusr; j++) free(args->usr[j].tag);
- if ( args->af_bins ) bin_destroy(args->af_bins);
-@@ -844,6 +854,34 @@
- }
- }
-
-+static inline void update_dvaf(stats_t *stats, bcf1_t *line, bcf_fmt_t *fmt, int ismpl, int ial, int jal)
-+{
-+ if ( !fmt ) return;
-+
-+ float dvaf;
-+ #define BRANCH_INT(type_t,missing,vector_end) { \
-+ type_t *p = (type_t *) (fmt->p + fmt->size*ismpl); \
-+ if ( p[ial]==vector_end || p[jal]==vector_end ) return; \
-+ if ( p[ial]==missing || p[jal]==missing ) return; \
-+ if ( !p[ial] && !p[jal] ) return; \
-+ dvaf = (float)p[ial]/(p[ial]+p[jal]); \
-+ }
-+ switch (fmt->type) {
-+ case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: fprintf(stderr, "[E::%s] todo: %d\n", __func__, fmt->type); exit(1); break;
-+ }
-+ #undef BRANCH_INT
-+
-+ int len = line->d.var[ial].n;
-+ if ( len < -stats->m_indel ) len = -stats->m_indel;
-+ else if ( len > stats->m_indel ) len = stats->m_indel;
-+ int bin = stats->m_indel + len;
-+ stats->nvaf[bin]++;
-+ stats->dvaf[bin] += dvaf;
-+}
-+
- static void do_sample_stats(args_t *args, stats_t *stats, bcf_sr_t *reader, int matched)
- {
- bcf_srs_t *files = args->files;
-@@ -854,6 +892,8 @@
-
- if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"GT")) )
- {
-+ bcf_fmt_t *ad_fmt_ptr = bcf_get_variant_types(line)&VCF_INDEL ? bcf_get_fmt(reader->header,reader->buffer[0],"AD") : NULL;
-+
- int ref = bcf_acgt2int(*line->d.allele[0]);
- int is, n_nref = 0, i_nref = 0;
- for (is=0; is<args->files->n_smpl; is++)
-@@ -910,8 +950,31 @@
- if ( gt != GT_HOM_RR )
- {
- stats->smpl_indels[is]++;
-- if ( gt==GT_HET_RA || gt==GT_HET_AA ) stats->smpl_indel_hets[is]++;
-- else if ( gt==GT_HOM_AA ) stats->smpl_indel_homs[is]++;
-+
-+ if ( gt==GT_HET_RA || gt==GT_HET_AA )
-+ {
-+ int is_ins = 0, is_del = 0;
-+ if ( bcf_get_variant_type(line,ial)&VCF_INDEL )
-+ {
-+ if ( line->d.var[ial].n < 0 ) is_del = 1;
-+ else is_ins = 1;
-+ update_dvaf(stats,line,ad_fmt_ptr,is,ial,jal);
-+ }
-+ if ( bcf_get_variant_type(line,jal)&VCF_INDEL )
-+ {
-+ if ( line->d.var[jal].n < 0 ) is_del = 1;
-+ else is_ins = 1;
-+ update_dvaf(stats,line,ad_fmt_ptr,is,jal,ial);
-+ }
-+ // Note that alt-het genotypes with both ins and del allele are counted twice!!
-+ if ( is_del ) stats->smpl_del_hets[is]++;
-+ if ( is_ins ) stats->smpl_ins_hets[is]++;
-+ }
-+ else if ( gt==GT_HOM_AA )
-+ {
-+ if ( line->d.var[ial].n < 0 ) stats->smpl_del_homs[is]++;
-+ else stats->smpl_ins_homs[is]++;
-+ }
- }
- if ( stats->smpl_frm_shifts )
- {
-@@ -959,6 +1022,37 @@
- }
- #undef BRANCH_INT
- }
-+ else if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"AD")) )
-+ {
-+ #define BRANCH_INT(type_t,missing,vector_end) { \
-+ int is,iv; \
-+ for (is=0; is<args->files->n_smpl; is++) \
-+ { \
-+ type_t *p = (type_t *) (fmt_ptr->p + fmt_ptr->size*is); \
-+ int dp = 0, has_value = 0; \
-+ for (iv=0; iv<fmt_ptr->n; iv++) \
-+ { \
-+ if ( p[iv]==vector_end ) break; \
-+ if ( p[iv]==missing ) continue; \
-+ has_value = 1; \
-+ dp += p[iv]; \
-+ } \
-+ if ( has_value ) \
-+ { \
-+ (*idist(&stats->dp, dp))++; \
-+ stats->smpl_ndp[is]++; \
-+ stats->smpl_dp[is] += dp; \
-+ } \
-+ } \
-+ }
-+ switch (fmt_ptr->type) {
-+ case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: fprintf(stderr, "[E::%s] todo: %d\n", __func__, fmt_ptr->type); exit(1); break;
-+ }
-+ #undef BRANCH_INT
-+ }
-
- if ( matched==3 )
- {
-@@ -968,6 +1062,7 @@
- fmt1 = bcf_get_fmt(files->readers[1].header,files->readers[1].buffer[0],"GT"); if ( !fmt1 ) return;
-
- // only the first ALT allele is considered
-+ if (args->ntmp_iaf <= 1) return; // Do not consider invariate sites
- int iaf = args->tmp_iaf[1];
- int line_type = bcf_get_variant_types(files->readers[0].buffer[0]);
- gtcmp_t *af_stats = line_type&VCF_SNP ? args->af_gts_snps : args->af_gts_indels;
-@@ -1019,7 +1114,7 @@
- {
- nmm++;
- bcf_sr_t *reader = &files->readers[0];
-- printf("DBG\t%s\t%d\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,files->samples[is],gt,gt2);
-+ printf("DBG\t%s\t%"PRId64"\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,(int64_t) reader->buffer[0]->pos+1,files->samples[is],gt,gt2);
- }
- else
- {
-@@ -1028,7 +1123,7 @@
- }
- }
- float nrd = nrefm+nmm ? 100.*nmm/(nrefm+nmm) : 0;
-- printf("PSD\t%s\t%d\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,nm,nmm,nrd);
-+ printf("PSD\t%s\t%"PRId64"\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,(int64_t) reader->buffer[0]->pos+1,nm,nmm,nrd);
- }
- }
- }
-@@ -1162,14 +1257,14 @@
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
-- printf("SN\t%d\tnumber of records:\t%d\n", id, stats->n_records);
-- printf("SN\t%d\tnumber of no-ALTs:\t%d\n", id, stats->n_noalts);
-- printf("SN\t%d\tnumber of SNPs:\t%d\n", id, stats->n_snps);
-- printf("SN\t%d\tnumber of MNPs:\t%d\n", id, stats->n_mnps);
-- printf("SN\t%d\tnumber of indels:\t%d\n", id, stats->n_indels);
-- printf("SN\t%d\tnumber of others:\t%d\n", id, stats->n_others);
-- printf("SN\t%d\tnumber of multiallelic sites:\t%d\n", id, stats->n_mals);
-- printf("SN\t%d\tnumber of multiallelic SNP sites:\t%d\n", id, stats->n_snp_mals);
-+ printf("SN\t%d\tnumber of records:\t%u\n", id, stats->n_records);
-+ printf("SN\t%d\tnumber of no-ALTs:\t%u\n", id, stats->n_noalts);
-+ printf("SN\t%d\tnumber of SNPs:\t%u\n", id, stats->n_snps);
-+ printf("SN\t%d\tnumber of MNPs:\t%u\n", id, stats->n_mnps);
-+ printf("SN\t%d\tnumber of indels:\t%u\n", id, stats->n_indels);
-+ printf("SN\t%d\tnumber of others:\t%u\n", id, stats->n_others);
-+ printf("SN\t%d\tnumber of multiallelic sites:\t%u\n", id, stats->n_mals);
-+ printf("SN\t%d\tnumber of multiallelic SNP sites:\t%u\n", id, stats->n_snp_mals);
- }
- printf("# TSTV, transitions/transversions:\n# TSTV\t[2]id\t[3]ts\t[4]tv\t[5]ts/tv\t[6]ts (1st ALT)\t[7]tv (1st ALT)\t[8]ts/tv (1st ALT)\n");
- for (id=0; id<args->nstats; id++)
-@@ -1287,14 +1382,33 @@
- }
- }
- }
-- printf("# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]count\n");
-+ printf("# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]number of sites\t[5]number of genotypes\t[6]mean VAF\n");
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
- for (i=stats->m_indel-1; i>=0; i--)
-- if ( stats->deletions[i] ) printf("IDD\t%d\t%d\t%d\n", id,-i-1,stats->deletions[i]);
-+ {
-+ if ( !stats->deletions[i] ) continue;
-+ // whops, differently organized arrow, dels are together with ins
-+ int bin = stats->m_indel - i - 1;
-+ printf("IDD\t%d\t%d\t%d\t", id,-i-1,stats->deletions[i]);
-+ if ( stats->nvaf && stats->nvaf[bin] )
-+ printf("%u\t%.2f",stats->nvaf[bin],stats->dvaf[bin]/stats->nvaf[bin]);
-+ else
-+ printf("0\t.");
-+ printf("\n");
-+ }
- for (i=0; i<stats->m_indel; i++)
-- if ( stats->insertions[i] ) printf("IDD\t%d\t%d\t%d\n", id,i+1,stats->insertions[i]);
-+ {
-+ if ( !stats->insertions[i] ) continue;
-+ int bin = stats->m_indel + i + 1;
-+ printf("IDD\t%d\t%d\t%d\t", id,i+1,stats->insertions[i]);
-+ if ( stats->nvaf && stats->nvaf[bin] )
-+ printf("%u\t%.2f",stats->nvaf[bin],stats->dvaf[bin]/stats->nvaf[bin]);
-+ else
-+ printf("0\t.");
-+ printf("\n");
-+ }
- }
- printf("# ST, Substitution types:\n# ST\t[2]id\t[3]type\t[4]count\n");
- for (id=0; id<args->nstats; id++)
-@@ -1517,8 +1631,8 @@
- }
- }
-
--
-- printf("# PSI, Per-Sample Indels\n# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nHets\t[9]nAA\n");
-+ printf("# PSI, Per-Sample Indels. Note that alt-het genotypes with both ins and del allele are counted twice, in both nInsHets and nDelHets.\n");
-+ printf("# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nInsHets\t[9]nDelHets\t[10]nInsAltHoms\t[11]nDelAltHoms\n");
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
-@@ -1531,9 +1645,8 @@
- in = stats->smpl_frm_shifts[i*3 + 1];
- out = stats->smpl_frm_shifts[i*3 + 2];
- }
-- int nhom = stats->smpl_indel_homs[i];
-- int nhet = stats->smpl_indel_hets[i];
-- printf("PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,nhet,nhom);
-+ printf("PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,
-+ stats->smpl_ins_hets[i],stats->smpl_del_hets[i],stats->smpl_ins_homs[i],stats->smpl_del_homs[i]);
- }
- }
-
-@@ -1609,7 +1722,7 @@
- fprintf(stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
- fprintf(stderr, " -u, --user-tstv <TAG[:min:max:n]> collect Ts/Tv stats for any tag using the given binning [0:1:100]\n");
-- fprintf(stderr, " --threads <int> number of extra decompression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, " -v, --verbose produce verbose per-site and per-sample output\n");
- fprintf(stderr, "\n");
- exit(1);
-@@ -1686,7 +1799,7 @@
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -1715,7 +1828,7 @@
- while (fname)
- {
- if ( !bcf_sr_add_reader(args->files, fname) )
-- error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- fname = ++optind < argc ? argv[optind] : NULL;
- }
-
---- python-pysam.orig/bcftools/vcfstats.c.pysam.c
-+++ python-pysam/bcftools/vcfstats.c.pysam.c
-@@ -72,7 +72,7 @@
-
- typedef struct
- {
-- int n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts;
-+ uint32_t n_snps, n_indels, n_mnps, n_others, n_mals, n_snp_mals, n_records, n_noalts;
- int *af_ts, *af_tv, *af_snps; // first bin of af_* stats are singletons
- #if HWE_STATS
- int *af_hwe;
-@@ -90,12 +90,14 @@
- int subst[15];
- int *smpl_hets, *smpl_homRR, *smpl_homAA, *smpl_ts, *smpl_tv, *smpl_indels, *smpl_ndp, *smpl_sngl;
- int *smpl_hapRef, *smpl_hapAlt, *smpl_missing;
-- int *smpl_indel_hets, *smpl_indel_homs;
-+ int *smpl_ins_hets, *smpl_del_hets, *smpl_ins_homs, *smpl_del_homs;
- int *smpl_frm_shifts; // not-applicable, in-frame, out-frame
- unsigned long int *smpl_dp;
- idist_t dp, dp_sites;
- int nusr;
- user_stats_t *usr;
-+ double *dvaf; // distribution of the mean indel-allele frequency by length: -m_indel,-(m_indel-1),...-1,0,1,..,m_indel
-+ uint32_t *nvaf;
- }
- stats_t;
-
-@@ -478,8 +480,10 @@
- stats->smpl_homRR = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_hapRef = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_hapAlt = (int *) calloc(args->files->n_smpl,sizeof(int));
-- stats->smpl_indel_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-- stats->smpl_indel_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_ins_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_del_hets = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_ins_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
-+ stats->smpl_del_homs = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_ts = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_tv = (int *) calloc(args->files->n_smpl,sizeof(int));
- stats->smpl_indels = (int *) calloc(args->files->n_smpl,sizeof(int));
-@@ -491,6 +495,8 @@
- #endif
- if ( args->exons_fname )
- stats->smpl_frm_shifts = (int*) calloc(args->files->n_smpl*3,sizeof(int));
-+ stats->nvaf = (uint32_t*) calloc(stats->m_indel*2+1,sizeof(*stats->nvaf));
-+ stats->dvaf = (double*) calloc(stats->m_indel*2+1,sizeof(*stats->dvaf));
- }
- idist_init(&stats->dp, args->dp_min,args->dp_max,args->dp_step);
- idist_init(&stats->dp_sites, args->dp_min,args->dp_max,args->dp_step);
-@@ -560,8 +566,10 @@
- free(stats->smpl_homRR);
- free(stats->smpl_hapRef);
- free(stats->smpl_hapAlt);
-- free(stats->smpl_indel_homs);
-- free(stats->smpl_indel_hets);
-+ free(stats->smpl_ins_homs);
-+ free(stats->smpl_del_homs);
-+ free(stats->smpl_ins_hets);
-+ free(stats->smpl_del_hets);
- free(stats->smpl_ts);
- free(stats->smpl_tv);
- free(stats->smpl_indels);
-@@ -578,6 +586,8 @@
- }
- free(stats->usr);
- if ( args->exons ) free(stats->smpl_frm_shifts);
-+ free(stats->nvaf);
-+ free(stats->dvaf);
- }
- for (j=0; j<args->nusr; j++) free(args->usr[j].tag);
- if ( args->af_bins ) bin_destroy(args->af_bins);
-@@ -846,6 +856,34 @@
- }
- }
-
-+static inline void update_dvaf(stats_t *stats, bcf1_t *line, bcf_fmt_t *fmt, int ismpl, int ial, int jal)
-+{
-+ if ( !fmt ) return;
-+
-+ float dvaf;
-+ #define BRANCH_INT(type_t,missing,vector_end) { \
-+ type_t *p = (type_t *) (fmt->p + fmt->size*ismpl); \
-+ if ( p[ial]==vector_end || p[jal]==vector_end ) return; \
-+ if ( p[ial]==missing || p[jal]==missing ) return; \
-+ if ( !p[ial] && !p[jal] ) return; \
-+ dvaf = (float)p[ial]/(p[ial]+p[jal]); \
-+ }
-+ switch (fmt->type) {
-+ case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: fprintf(bcftools_stderr, "[E::%s] todo: %d\n", __func__, fmt->type); exit(1); break;
-+ }
-+ #undef BRANCH_INT
-+
-+ int len = line->d.var[ial].n;
-+ if ( len < -stats->m_indel ) len = -stats->m_indel;
-+ else if ( len > stats->m_indel ) len = stats->m_indel;
-+ int bin = stats->m_indel + len;
-+ stats->nvaf[bin]++;
-+ stats->dvaf[bin] += dvaf;
-+}
-+
- static void do_sample_stats(args_t *args, stats_t *stats, bcf_sr_t *reader, int matched)
- {
- bcf_srs_t *files = args->files;
-@@ -856,6 +894,8 @@
-
- if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"GT")) )
- {
-+ bcf_fmt_t *ad_fmt_ptr = bcf_get_variant_types(line)&VCF_INDEL ? bcf_get_fmt(reader->header,reader->buffer[0],"AD") : NULL;
-+
- int ref = bcf_acgt2int(*line->d.allele[0]);
- int is, n_nref = 0, i_nref = 0;
- for (is=0; is<args->files->n_smpl; is++)
-@@ -912,8 +952,31 @@
- if ( gt != GT_HOM_RR )
- {
- stats->smpl_indels[is]++;
-- if ( gt==GT_HET_RA || gt==GT_HET_AA ) stats->smpl_indel_hets[is]++;
-- else if ( gt==GT_HOM_AA ) stats->smpl_indel_homs[is]++;
-+
-+ if ( gt==GT_HET_RA || gt==GT_HET_AA )
-+ {
-+ int is_ins = 0, is_del = 0;
-+ if ( bcf_get_variant_type(line,ial)&VCF_INDEL )
-+ {
-+ if ( line->d.var[ial].n < 0 ) is_del = 1;
-+ else is_ins = 1;
-+ update_dvaf(stats,line,ad_fmt_ptr,is,ial,jal);
-+ }
-+ if ( bcf_get_variant_type(line,jal)&VCF_INDEL )
-+ {
-+ if ( line->d.var[jal].n < 0 ) is_del = 1;
-+ else is_ins = 1;
-+ update_dvaf(stats,line,ad_fmt_ptr,is,jal,ial);
-+ }
-+ // Note that alt-het genotypes with both ins and del allele are counted twice!!
-+ if ( is_del ) stats->smpl_del_hets[is]++;
-+ if ( is_ins ) stats->smpl_ins_hets[is]++;
-+ }
-+ else if ( gt==GT_HOM_AA )
-+ {
-+ if ( line->d.var[ial].n < 0 ) stats->smpl_del_homs[is]++;
-+ else stats->smpl_ins_homs[is]++;
-+ }
- }
- if ( stats->smpl_frm_shifts )
- {
-@@ -961,6 +1024,37 @@
- }
- #undef BRANCH_INT
- }
-+ else if ( (fmt_ptr = bcf_get_fmt(reader->header,reader->buffer[0],"AD")) )
-+ {
-+ #define BRANCH_INT(type_t,missing,vector_end) { \
-+ int is,iv; \
-+ for (is=0; is<args->files->n_smpl; is++) \
-+ { \
-+ type_t *p = (type_t *) (fmt_ptr->p + fmt_ptr->size*is); \
-+ int dp = 0, has_value = 0; \
-+ for (iv=0; iv<fmt_ptr->n; iv++) \
-+ { \
-+ if ( p[iv]==vector_end ) break; \
-+ if ( p[iv]==missing ) continue; \
-+ has_value = 1; \
-+ dp += p[iv]; \
-+ } \
-+ if ( has_value ) \
-+ { \
-+ (*idist(&stats->dp, dp))++; \
-+ stats->smpl_ndp[is]++; \
-+ stats->smpl_dp[is] += dp; \
-+ } \
-+ } \
-+ }
-+ switch (fmt_ptr->type) {
-+ case BCF_BT_INT8: BRANCH_INT(int8_t, bcf_int8_missing, bcf_int8_vector_end); break;
-+ case BCF_BT_INT16: BRANCH_INT(int16_t, bcf_int16_missing, bcf_int16_vector_end); break;
-+ case BCF_BT_INT32: BRANCH_INT(int32_t, bcf_int32_missing, bcf_int32_vector_end); break;
-+ default: fprintf(bcftools_stderr, "[E::%s] todo: %d\n", __func__, fmt_ptr->type); exit(1); break;
-+ }
-+ #undef BRANCH_INT
-+ }
-
- if ( matched==3 )
- {
-@@ -970,6 +1064,7 @@
- fmt1 = bcf_get_fmt(files->readers[1].header,files->readers[1].buffer[0],"GT"); if ( !fmt1 ) return;
-
- // only the first ALT allele is considered
-+ if (args->ntmp_iaf <= 1) return; // Do not consider invariate sites
- int iaf = args->tmp_iaf[1];
- int line_type = bcf_get_variant_types(files->readers[0].buffer[0]);
- gtcmp_t *af_stats = line_type&VCF_SNP ? args->af_gts_snps : args->af_gts_indels;
-@@ -1021,7 +1116,7 @@
- {
- nmm++;
- bcf_sr_t *reader = &files->readers[0];
-- fprintf(bcftools_stdout, "DBG\t%s\t%d\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,files->samples[is],gt,gt2);
-+ fprintf(bcftools_stdout, "DBG\t%s\t%"PRId64"\t%s\t%d\t%d\n",reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,(int64_t) reader->buffer[0]->pos+1,files->samples[is],gt,gt2);
- }
- else
- {
-@@ -1030,7 +1125,7 @@
- }
- }
- float nrd = nrefm+nmm ? 100.*nmm/(nrefm+nmm) : 0;
-- fprintf(bcftools_stdout, "PSD\t%s\t%d\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,reader->buffer[0]->pos+1,nm,nmm,nrd);
-+ fprintf(bcftools_stdout, "PSD\t%s\t%"PRId64"\t%d\t%d\t%f\n", reader->header->id[BCF_DT_CTG][reader->buffer[0]->rid].key,(int64_t) reader->buffer[0]->pos+1,nm,nmm,nrd);
- }
- }
- }
-@@ -1164,14 +1259,14 @@
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of records:\t%d\n", id, stats->n_records);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of no-ALTs:\t%d\n", id, stats->n_noalts);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of SNPs:\t%d\n", id, stats->n_snps);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of MNPs:\t%d\n", id, stats->n_mnps);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of indels:\t%d\n", id, stats->n_indels);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of others:\t%d\n", id, stats->n_others);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic sites:\t%d\n", id, stats->n_mals);
-- fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic SNP sites:\t%d\n", id, stats->n_snp_mals);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of records:\t%u\n", id, stats->n_records);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of no-ALTs:\t%u\n", id, stats->n_noalts);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of SNPs:\t%u\n", id, stats->n_snps);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of MNPs:\t%u\n", id, stats->n_mnps);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of indels:\t%u\n", id, stats->n_indels);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of others:\t%u\n", id, stats->n_others);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic sites:\t%u\n", id, stats->n_mals);
-+ fprintf(bcftools_stdout, "SN\t%d\tnumber of multiallelic SNP sites:\t%u\n", id, stats->n_snp_mals);
- }
- fprintf(bcftools_stdout, "# TSTV, transitions/transversions:\n# TSTV\t[2]id\t[3]ts\t[4]tv\t[5]ts/tv\t[6]ts (1st ALT)\t[7]tv (1st ALT)\t[8]ts/tv (1st ALT)\n");
- for (id=0; id<args->nstats; id++)
-@@ -1289,14 +1384,33 @@
- }
- }
- }
-- fprintf(bcftools_stdout, "# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]count\n");
-+ fprintf(bcftools_stdout, "# IDD, InDel distribution:\n# IDD\t[2]id\t[3]length (deletions negative)\t[4]number of sites\t[5]number of genotypes\t[6]mean VAF\n");
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
- for (i=stats->m_indel-1; i>=0; i--)
-- if ( stats->deletions[i] ) fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\n", id,-i-1,stats->deletions[i]);
-+ {
-+ if ( !stats->deletions[i] ) continue;
-+ // whops, differently organized arrow, dels are together with ins
-+ int bin = stats->m_indel - i - 1;
-+ fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\t", id,-i-1,stats->deletions[i]);
-+ if ( stats->nvaf && stats->nvaf[bin] )
-+ fprintf(bcftools_stdout, "%u\t%.2f",stats->nvaf[bin],stats->dvaf[bin]/stats->nvaf[bin]);
-+ else
-+ fprintf(bcftools_stdout, "0\t.");
-+ fprintf(bcftools_stdout, "\n");
-+ }
- for (i=0; i<stats->m_indel; i++)
-- if ( stats->insertions[i] ) fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\n", id,i+1,stats->insertions[i]);
-+ {
-+ if ( !stats->insertions[i] ) continue;
-+ int bin = stats->m_indel + i + 1;
-+ fprintf(bcftools_stdout, "IDD\t%d\t%d\t%d\t", id,i+1,stats->insertions[i]);
-+ if ( stats->nvaf && stats->nvaf[bin] )
-+ fprintf(bcftools_stdout, "%u\t%.2f",stats->nvaf[bin],stats->dvaf[bin]/stats->nvaf[bin]);
-+ else
-+ fprintf(bcftools_stdout, "0\t.");
-+ fprintf(bcftools_stdout, "\n");
-+ }
- }
- fprintf(bcftools_stdout, "# ST, Substitution types:\n# ST\t[2]id\t[3]type\t[4]count\n");
- for (id=0; id<args->nstats; id++)
-@@ -1519,8 +1633,8 @@
- }
- }
-
--
-- fprintf(bcftools_stdout, "# PSI, Per-Sample Indels\n# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nHets\t[9]nAA\n");
-+ fprintf(bcftools_stdout, "# PSI, Per-Sample Indels. Note that alt-het genotypes with both ins and del allele are counted twice, in both nInsHets and nDelHets.\n");
-+ fprintf(bcftools_stdout, "# PSI\t[2]id\t[3]sample\t[4]in-frame\t[5]out-frame\t[6]not applicable\t[7]out/(in+out) ratio\t[8]nInsHets\t[9]nDelHets\t[10]nInsAltHoms\t[11]nDelAltHoms\n");
- for (id=0; id<args->nstats; id++)
- {
- stats_t *stats = &args->stats[id];
-@@ -1533,9 +1647,8 @@
- in = stats->smpl_frm_shifts[i*3 + 1];
- out = stats->smpl_frm_shifts[i*3 + 2];
- }
-- int nhom = stats->smpl_indel_homs[i];
-- int nhet = stats->smpl_indel_hets[i];
-- fprintf(bcftools_stdout, "PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,nhet,nhom);
-+ fprintf(bcftools_stdout, "PSI\t%d\t%s\t%d\t%d\t%d\t%.2f\t%d\t%d\t%d\t%d\n", id,args->files->samples[i], in,out,na,in+out?1.0*out/(in+out):0,
-+ stats->smpl_ins_hets[i],stats->smpl_del_hets[i],stats->smpl_ins_homs[i],stats->smpl_del_homs[i]);
- }
- }
-
-@@ -1611,7 +1724,7 @@
- fprintf(bcftools_stderr, " -t, --targets <region> similar to -r but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -T, --targets-file <file> similar to -R but streams rather than index-jumps\n");
- fprintf(bcftools_stderr, " -u, --user-tstv <TAG[:min:max:n]> collect Ts/Tv stats for any tag using the given binning [0:1:100]\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra decompression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, " -v, --verbose produce verbose per-site and per-sample output\n");
- fprintf(bcftools_stderr, "\n");
- exit(1);
-@@ -1688,7 +1801,7 @@
- case 'i': args->filter_str = optarg; args->filter_logic |= FLT_INCLUDE; break;
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 'h':
-- case '?': usage();
-+ case '?': usage(); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -1717,7 +1830,7 @@
- while (fname)
- {
- if ( !bcf_sr_add_reader(args->files, fname) )
-- error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
- fname = ++optind < argc ? argv[optind] : NULL;
- }
-
---- python-pysam.orig/bcftools/vcfview.c
-+++ python-pysam/bcftools/vcfview.c
-@@ -32,6 +32,7 @@
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-@@ -85,11 +86,14 @@
-
- if (args->calc_ac && args->update_info)
- {
-- bcf_hdr_append(args->hdr,"##INFO=<ID=AC,Number=A,Type=Integer,Description=\"Allele count in genotypes\">");
-- bcf_hdr_append(args->hdr,"##INFO=<ID=AN,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes\">");
-+ if (bcf_hdr_append(args->hdr,"##INFO=<ID=AC,Number=A,Type=Integer,Description=\"Allele count in genotypes\">") < 0)
-+ error_errno("[%s] Failed to add \"AC\" INFO header", __func__);
-+ if (bcf_hdr_append(args->hdr,"##INFO=<ID=AN,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes\">") < 0)
-+ error_errno("[%s] Failed to add \"AN\" INFO header", __func__);
- }
- if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_view");
-- else bcf_hdr_sync(args->hdr);
-+ else if (bcf_hdr_sync(args->hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-
- // setup sample data
- if (args->sample_names)
-@@ -452,7 +456,7 @@
- if (args->trim_alts)
- {
- int ret = bcf_trim_alleles(args->hsub ? args->hsub : args->hdr, line);
-- if ( ret<0 ) error("Error: Could not trim alleles at %s:%d\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), line->pos+1);
-+ if ( ret<0 ) error("Error: Could not trim alleles at %s:%"PRId64"\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), (int64_t) line->pos+1);
- }
- if (args->phased) {
- int phased = bcf_all_phased(args->hdr, line);
-@@ -503,10 +507,10 @@
- fprintf(stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
- fprintf(stderr, " -t, --targets [^]<region> similar to -r but streams rather than index-jumps. Exclude regions with \"^\" prefix\n");
- fprintf(stderr, " -T, --targets-file [^]<file> similar to -R but streams rather than index-jumps. Exclude regions with \"^\" prefix\n");
-- fprintf(stderr, " --threads <int> number of extra (de)compression threads [0]\n");
-+ fprintf(stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(stderr, "\n");
- fprintf(stderr, "Subset options:\n");
-- fprintf(stderr, " -a, --trim-alt-alleles trim alternate alleles not seen in the subset\n");
-+ fprintf(stderr, " -a, --trim-alt-alleles trim ALT alleles not seen in the genotype fields (or their subset with -s/-S)\n");
- fprintf(stderr, " -I, --no-update do not (re)calculate INFO fields for the subset (currently INFO/AC and INFO/AN)\n");
- fprintf(stderr, " -s, --samples [^]<list> comma separated list of samples to include (or exclude with \"^\" prefix)\n");
- fprintf(stderr, " -S, --samples-file [^]<file> file of samples to include (or exclude with \"^\" prefix)\n");
-@@ -694,7 +698,7 @@
- }
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -737,12 +741,14 @@
- }
-
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- bcf_hdr_t *out_hdr = args->hnull ? args->hnull : (args->hsub ? args->hsub : args->hdr);
- if (args->print_header)
-- bcf_hdr_write(args->out, out_hdr);
-+ {
-+ if ( bcf_hdr_write(args->out, out_hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out);
-+ }
- else if ( args->output_type & FT_BCF )
- error("BCF output requires header, cannot proceed with -H\n");
-
-@@ -753,8 +759,7 @@
- {
- bcf1_t *line = args->files->readers[0].buffer[0];
- if ( line->errcode && out_hdr!=args->hdr ) error("Undefined tags in the header, cannot proceed in the sample subset mode.\n");
-- if ( subset_vcf(args, line) )
-- bcf_write1(args->out, out_hdr, line);
-+ if ( subset_vcf(args, line) && bcf_write1(args->out, out_hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out);
- }
- ret = args->files->errnum;
- if ( ret ) fprintf(stderr,"Error: %s\n", bcf_sr_strerror(args->files->errnum));
---- python-pysam.orig/bcftools/vcfview.c.pysam.c
-+++ python-pysam/bcftools/vcfview.c.pysam.c
-@@ -34,6 +34,7 @@
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <math.h>
-+#include <inttypes.h>
- #include <htslib/vcf.h>
- #include <htslib/synced_bcf_reader.h>
- #include <htslib/vcfutils.h>
-@@ -87,11 +88,14 @@
-
- if (args->calc_ac && args->update_info)
- {
-- bcf_hdr_append(args->hdr,"##INFO=<ID=AC,Number=A,Type=Integer,Description=\"Allele count in genotypes\">");
-- bcf_hdr_append(args->hdr,"##INFO=<ID=AN,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes\">");
-+ if (bcf_hdr_append(args->hdr,"##INFO=<ID=AC,Number=A,Type=Integer,Description=\"Allele count in genotypes\">") < 0)
-+ error_errno("[%s] Failed to add \"AC\" INFO header", __func__);
-+ if (bcf_hdr_append(args->hdr,"##INFO=<ID=AN,Number=1,Type=Integer,Description=\"Total number of alleles in called genotypes\">") < 0)
-+ error_errno("[%s] Failed to add \"AN\" INFO header", __func__);
- }
- if (args->record_cmd_line) bcf_hdr_append_version(args->hdr, args->argc, args->argv, "bcftools_view");
-- else bcf_hdr_sync(args->hdr);
-+ else if (bcf_hdr_sync(args->hdr) < 0)
-+ error_errno("[%s] Failed to update header", __func__);
-
- // setup sample data
- if (args->sample_names)
-@@ -454,7 +458,7 @@
- if (args->trim_alts)
- {
- int ret = bcf_trim_alleles(args->hsub ? args->hsub : args->hdr, line);
-- if ( ret<0 ) error("Error: Could not trim alleles at %s:%d\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), line->pos+1);
-+ if ( ret<0 ) error("Error: Could not trim alleles at %s:%"PRId64"\n", bcf_seqname(args->hsub ? args->hsub : args->hdr, line), (int64_t) line->pos+1);
- }
- if (args->phased) {
- int phased = bcf_all_phased(args->hdr, line);
-@@ -505,10 +509,10 @@
- fprintf(bcftools_stderr, " -R, --regions-file <file> restrict to regions listed in a file\n");
- fprintf(bcftools_stderr, " -t, --targets [^]<region> similar to -r but streams rather than index-jumps. Exclude regions with \"^\" prefix\n");
- fprintf(bcftools_stderr, " -T, --targets-file [^]<file> similar to -R but streams rather than index-jumps. Exclude regions with \"^\" prefix\n");
-- fprintf(bcftools_stderr, " --threads <int> number of extra (de)compression threads [0]\n");
-+ fprintf(bcftools_stderr, " --threads <int> use multithreading with <int> worker threads [0]\n");
- fprintf(bcftools_stderr, "\n");
- fprintf(bcftools_stderr, "Subset options:\n");
-- fprintf(bcftools_stderr, " -a, --trim-alt-alleles trim alternate alleles not seen in the subset\n");
-+ fprintf(bcftools_stderr, " -a, --trim-alt-alleles trim ALT alleles not seen in the genotype fields (or their subset with -s/-S)\n");
- fprintf(bcftools_stderr, " -I, --no-update do not (re)calculate INFO fields for the subset (currently INFO/AC and INFO/AN)\n");
- fprintf(bcftools_stderr, " -s, --samples [^]<list> comma separated list of samples to include (or exclude with \"^\" prefix)\n");
- fprintf(bcftools_stderr, " -S, --samples-file [^]<file> file of samples to include (or exclude with \"^\" prefix)\n");
-@@ -696,7 +700,7 @@
- }
- case 9 : args->n_threads = strtol(optarg, 0, 0); break;
- case 8 : args->record_cmd_line = 0; break;
-- case '?': usage(args);
-+ case '?': usage(args); break;
- default: error("Unknown argument: %s\n", optarg);
- }
- }
-@@ -739,12 +743,14 @@
- }
-
- if ( bcf_sr_set_threads(args->files, args->n_threads)<0 ) error("Failed to create threads\n");
-- if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum));
-+ if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to read from %s: %s\n", !strcmp("-",fname)?"standard input":fname,bcf_sr_strerror(args->files->errnum));
-
- init_data(args);
- bcf_hdr_t *out_hdr = args->hnull ? args->hnull : (args->hsub ? args->hsub : args->hdr);
- if (args->print_header)
-- bcf_hdr_write(args->out, out_hdr);
-+ {
-+ if ( bcf_hdr_write(args->out, out_hdr)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out);
-+ }
- else if ( args->output_type & FT_BCF )
- error("BCF output requires header, cannot proceed with -H\n");
-
-@@ -755,8 +761,7 @@
- {
- bcf1_t *line = args->files->readers[0].buffer[0];
- if ( line->errcode && out_hdr!=args->hdr ) error("Undefined tags in the header, cannot proceed in the sample subset mode.\n");
-- if ( subset_vcf(args, line) )
-- bcf_write1(args->out, out_hdr, line);
-+ if ( subset_vcf(args, line) && bcf_write1(args->out, out_hdr, line)!=0 ) error("[%s] Error: cannot write to %s\n", __func__,args->fn_out);
- }
- ret = args->files->errnum;
- if ( ret ) fprintf(bcftools_stderr,"Error: %s\n", bcf_sr_strerror(args->files->errnum));
---- python-pysam.orig/bcftools/version.c
-+++ python-pysam/bcftools/version.c
-@@ -25,6 +25,7 @@
- #include <stdarg.h>
- #include <stdlib.h>
- #include <stdio.h>
-+#include <errno.h>
- #include <htslib/hts.h>
- #include "bcftools.h"
- #include "version.h"
-@@ -44,6 +45,22 @@
- exit(-1);
- }
-
-+void error_errno(const char *format, ...)
-+{
-+ va_list ap;
-+ int e = errno;
-+ va_start(ap, format);
-+ vfprintf(stderr, format, ap);
-+ va_end(ap);
-+ if (e) {
-+ fprintf(stderr, ": %s\n", strerror(e));
-+ } else {
-+ fprintf(stderr, "\n");
-+ }
-+ exit(-1);
-+}
-+
-+
- const char *hts_bcf_wmode(int file_type)
- {
- if ( file_type == FT_BCF ) return "wbu"; // uncompressed BCF
---- python-pysam.orig/bcftools/version.c.pysam.c
-+++ python-pysam/bcftools/version.c.pysam.c
-@@ -27,6 +27,7 @@
- #include <stdarg.h>
- #include <stdlib.h>
- #include <stdio.h>
-+#include <errno.h>
- #include <htslib/hts.h>
- #include "bcftools.h"
- #include "version.h"
-@@ -46,6 +47,22 @@
- exit(-1);
- }
-
-+void error_errno(const char *format, ...)
-+{
-+ va_list ap;
-+ int e = errno;
-+ va_start(ap, format);
-+ vfprintf(bcftools_stderr, format, ap);
-+ va_end(ap);
-+ if (e) {
-+ fprintf(bcftools_stderr, ": %s\n", strerror(e));
-+ } else {
-+ fprintf(bcftools_stderr, "\n");
-+ }
-+ exit(-1);
-+}
-+
-+
- const char *hts_bcf_wmode(int file_type)
- {
- if ( file_type == FT_BCF ) return "wbu"; // uncompressed BCF
---- python-pysam.orig/bcftools/version.h
-+++ python-pysam/bcftools/version.h
-@@ -1 +1 @@
--#define BCFTOOLS_VERSION "1.9"
-+#define BCFTOOLS_VERSION "1.10"
+++ /dev/null
-Author: Michael R. Crusoe <michael.crusoe@gmail.com>
-Description: sync with htslib, samtools, and bcftools 1.10
-
-- Remove symbols that was removed in libhts3 (hts_useek and uts_utell)
-- use devtools/import.py and the contents of the samtools & bcftools 1.10
-Debian packages with their patches fully applied
-
---- python-pysam.orig/pysam/htslib_util.h
-+++ python-pysam/pysam/htslib_util.h
-@@ -5,9 +5,6 @@
- #include "htslib/vcf.h"
- #include "htslib/khash.h"
-
--int hts_useek(htsFile *fp, long uoffset, int where);
--long hts_utell(htsFile *fp);
--
- int hts_set_verbosity(int verbosity);
- int hts_get_verbosity(void);
-
---- python-pysam.orig/pysam/libchtslib.pxd
-+++ python-pysam/pysam/libchtslib.pxd
-@@ -632,8 +632,6 @@
- int8_t HTS_FMT_CRAI
-
- BGZF *hts_get_bgzfp(htsFile *fp)
-- int hts_useek(htsFile *fp, long uoffset, int where)
-- long hts_utell(htsFile *fp)
-
- ctypedef struct hts_idx_t
-
---- python-pysam.orig/tests/00README.txt
-+++ python-pysam/tests/00README.txt
-@@ -15,7 +15,7 @@
- To try samtools, you may run the following commands:
-
- samtools faidx ex1.fa # index the reference FASTA
-- samtools import ex1.fa.fai ex1.sam.gz ex1.bam # SAM->BAM
-+ samtools view -bt ex1.fa.fai -o ex1.bam ex1.sam.gz # SAM->BAM
- samtools index ex1.bam # index BAM
- samtools tview ex1.bam ex1.fa # view alignment
- samtools pileup -cf ex1.fa ex1.bam # pileup and consensus
---- python-pysam.orig/tests/pysam_data/Makefile
-+++ python-pysam/tests/pysam_data/Makefile
-@@ -32,7 +32,7 @@
- samtools calmd --output-fmt BAM $^ > $@
-
- #%.bam: %.sam ex1.fa.fai
--# samtools import ex1.fa.fai $< $@
-+# samtools view -bt ex1.fa.fai -i $@ $<
-
- uncompressed.bam: ex2.sam
- samtools view -buS $< > $@
-@@ -53,7 +53,7 @@
- samtools faidx ex1.fa
-
- ex1.bam:ex1.sam.gz ex1.fa.fai
-- samtools import ex1.fa.fai ex1.sam.gz ex1.bam
-+ samtools view -bt ex1.fa.fai -o ex1.bam ex1.sam.gz
-
- %.bam.bai:%.bam
- samtools index $<
-@@ -73,7 +73,7 @@
-
- example_unmapped_reads_no_sq.bam: example_unmapped_reads_no_sq.sam
- touch tmp.list
-- samtools import tmp.list $< $@
-+ samtools view -bt tmp.list -o $@ $<
- rm -f tmp.list
-
- example_bai.bam: ex1.bam
---- python-pysam.orig/setup.py
-+++ python-pysam/setup.py
-@@ -159,8 +159,7 @@
- package_list = ['pysam',
- 'pysam.include',
- 'pysam.include.samtools',
-- 'pysam.include.bcftools',
-- 'pysam.include.samtools.win32']
-+ 'pysam.include.bcftools']
- package_dirs = {'pysam': 'pysam',
- 'pysam.include.samtools': 'samtools',
- 'pysam.include.bcftools': 'bcftools'}
---- python-pysam.orig/pysam/libchtslib.pyx
-+++ python-pysam/pysam/libchtslib.pyx
-@@ -490,8 +490,7 @@
- with nogil:
- ret = bgzf_seek(hts_get_bgzfp(self.htsfile), offset, SEEK_SET)
- elif self.htsfile.format.compression == no_compression:
-- with nogil:
-- ret = hts_useek(self.htsfile, <int>offset, SEEK_SET)
-+ ret = 0 if (hseek(self.htsfile.fp.hfile, <int>offset, SEEK_SET) >= 0) else -1
- else:
- raise NotImplementedError("seek not implemented in files compressed by method {}".format(
- self.htsfile.format.compression))
-@@ -509,8 +508,7 @@
- with nogil:
- ret = bgzf_tell(hts_get_bgzfp(self.htsfile))
- elif self.htsfile.format.compression == no_compression:
-- with nogil:
-- ret = hts_utell(self.htsfile)
-+ ret = htell(self.htsfile.fp.hfile)
- elif self.htsfile.format.format == cram:
- with nogil:
- ret = htell(cram_fd_get_fp(self.htsfile.fp.cram))
+++ /dev/null
-Author: Michael R. Crusoe <michael.crusoe@gmail.com>
-Description: support samtools 1.10 as it is more strict
-
---- python-pysam.orig/tests/pysam_data/example_empty_with_header.sam
-+++ /dev/null
-@@ -1 +0,0 @@
--@HD VN:1.3 SO:coordinate
---- python-pysam.orig/tests/pysam_data/rg_with_tab.sam
-+++ /dev/null
-@@ -1,3273 +0,0 @@
--@SQ SN:chr1 LN:1575
--@SQ SN:chr2 LN:1584
--@PG ID:bwa PN:bwa VN:0.7.9a-r786 CL:bwa mem -p -t 8 -M -R @RG ID:None SM:None /mnt/data/hg19.fa /mnt/analysis/default-0.fastq
--EAS56_57:6:190:289:82 69 chr1 100 0 * = 100 0 CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA <<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<; MF:i:192
--EAS56_57:6:190:289:82 137 chr1 100 73 35M = 100 0 AGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCAC <<<<<<;<<<<<<<<<<;<<;<<<<;8<6;9;;2; MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:190:727:308 99 chr1 103 99 35M = 263 195 GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:141:80:875 99 chr1 110 99 35M = 265 190 AGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAA <<<<<<<<<<<<<<<<<<<<<<:<<8;<<8+7;-7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:40:1128:1940 163 chr1 112 99 35M = 291 214 CCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACC <<<<<<<<<<<<<<<<<<<;<<5;;<<<9;;;;7: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:290:319:736 69 chr1 113 0 * = 113 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<<<<:7:<.<<<<7<<.<.<<.9*<4<:<4%74 MF:i:192
--EAS51_62:5:290:319:736 137 chr1 113 73 35M = 113 0 CGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCT ==;=======7====6=;==:;;====66=::27: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:132:493:921 69 chr1 119 0 * = 119 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<<<<<<<<<<<<<<<<<;<<<<77;0<;;6777 MF:i:192
--B7_597:2:132:493:921 137 chr1 119 75 35M = 119 0 ACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTG <<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;;88: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:283:799:560 163 chr1 121 66 35M = 283 197 GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGAC <<<<+<<<<8<<<+<<<<<;<<:07;8;7402447 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:225:195:543 99 chr1 123 99 35M = 299 211 GGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTG <<<<<<<<<<<<<<<<<<<<<<<9<<;::388998 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:114:714:317 99 chr1 126 99 35M = 311 220 TGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5;<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:70:147:84 163 chr1 128 73 35M = 285 192 CCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;(5<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:187:227:818 163 chr1 129 99 35M = 290 196 CAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:77:29:126 99 chr1 131 99 35M = 315 219 GCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCT <<<<<<<<<<3<<<<<<<;;;7<;<<449<-:977 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:327:795:103 99 chr1 133 99 35M = 302 204 ACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:139:117:262 69 chr1 135 0 * = 135 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<7<<<<<<<<<<<<<<<<<<<;<;<<<<<37;3 MF:i:192
--EAS114_30:3:139:117:262 137 chr1 135 76 35M = 135 0 AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG <<<<;<<<<<<<<<<<<<:<<<<<:<<8<<<<:<: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:29:817:854 73 chr1 135 77 35M = 135 0 AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:29:817:854 133 chr1 135 0 * = 135 0 GTTCTCAAGGTTGTTGCAAGGGGGTTTATGTGAAC <<<<<<<<<<<<<<<1..;:;;;;1%407)07&7. MF:i:192
--EAS192_3:6:170:169:57 163 chr1 138 99 35M = 296 193 GGCTTGACCTCTGGTGACTGCCAGAGCTGCTGGCC <<<<<;<<<<<<;<<<<<<<<<<<<:<<<<<;;+% MF:i:18 Aq:i:45 NM:i:2 UQ:i:30 H0:i:0 H1:i:1
--B7_595:4:84:802:737 99 chr1 140 68 35M = 284 179 CTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAG <<<<<<<<<<;9<9<<<;<<;73;<<<<<37;1+. MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:78:583:670 163 chr1 142 99 35M = 316 209 TAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCT <<<<<<<<<<;;;<;;<<<:7;5;<5;;<2--8-; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:90:435:691 99 chr1 147 99 35M = 318 206 TCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGT <<<<<<<<<<;<<<;<<<<:<<<;<81;<<1;784 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:13:122:187 163 chr1 153 99 35M = 343 225 GACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCCTT <<<<<<<;<;<<<;<<<<:;6<<<<;;;;:<<%%< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS221_1:6:69:735:1915 99 chr1 154 99 35M = 321 202 ACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTT <<<<<<<<;<<<<<<<<<;<<<<;<8<<<<;1:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:66:959:1311 163 chr1 159 95 35M = 336 212 CAGAGCTGCTGGCAAGCTAGAGGCCCATCTGGAGC ;;4;;;+;;;-01;;&-;;4;;&;;73)(&**274 MF:i:18 Aq:i:31 NM:i:2 UQ:i:12 H0:i:0 H1:i:1
--EAS56_57:6:325:759:288 99 chr1 163 99 35M = 341 213 GCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCT 8<;<<<<81<<<<<;<<;<<<;9</;6;;809034 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:82:926:112 99 chr1 164 99 35M = 328 199 CTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTC <;<<<<<<<<<5<<<<<<<<<<<<<<<;<<1:<4< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:324:728:956 99 chr1 165 99 35M = 322 192 TGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCT <<<<<<<<<<<<<<<<<<<<8<<<:<::;;;;<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:294:525:849 163 chr1 167 99 35M = 340 208 CTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAA <<<<<<<<<<<<<<<<<<<<<<9+<:<<<<9;;15 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:159:125:297 163 chr1 170 99 35M = 337 202 GCAAGCTAGAGTCCCATTTGGAGCCACTCTAAGAC <<<<<<<<<<<<<<;<<<;<;<<6;)<:9;26;39 MF:i:18 Aq:i:43 NM:i:2 UQ:i:26 H0:i:0 H1:i:1
--EAS54_65:6:164:797:930 99 chr1 173 99 35M = 332 194 AGCTAGAGACCCATTTGGAGCCCCTCTAAGCCGTT <<<<<<<<<<<<<<<;;;:<<<<<;<;<<<<<,:: MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_81:7:293:355:321 163 chr1 174 99 35M = 356 217 GCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTC <<<:<;<<<<<<<;<<<<<<<<<;<<;4<<<:+:< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:653:400 163 chr1 175 99 35M = 340 200 CTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCT <;<9<<+<2<9<,;;64;<<<<;8<00*1<48:+8 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:62:1109:804 163 chr1 176 99 35M = 350 209 TAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTA <<<<<<<<<<<<<:<<:<<<<<<:<:<<<<;;;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:303:402:142 163 chr1 181 99 35M = 343 197 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT <8<<<<<<<<<<<<<<<<<<<<<<<46<648;;'; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:321:642:388 163 chr1 181 99 35M = 357 209 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:1:1140:1206 163 chr1 181 99 35M = 368 222 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT ;;;;;;;;;;;;;:9;;7;;:;:;97;:;:88888 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:155:68:326 99 chr1 182 99 36M = 332 186 CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:19:886:279 99 chr1 182 99 35M = 337 190 CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTA <9<<<<<<<<<<<<6<28:<<85<<<<<2<;<9<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:143:69:578 147 chr1 185 98 35M = 36 -184 ATTGGGAGCCCCTCTAAGCCGTTCTATTTGTAATG 222&<21<<<<12<7<01<<<<<0<<<<<<<20<< MF:i:18 Aq:i:35 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_71:4:13:981:659 181 chr1 187 0 * = 188 0 CGGGACAATGGACGAGGTAAACCGCACATTGACAA +)---3&&3&--+0)&+3:7777).333:<06<<< MF:i:192
--EAS54_71:4:13:981:659 121 chr1 188 37 34M = 187 0 TGTAGCCCCTCTAAGGCGTTCTATTTGTAATGAA ()&)06636;;<664*6;<<<<<<<<<<<<<<<1 MF:i:64 Aq:i:0 NM:i:2 UQ:i:14 H0:i:0 H1:i:1
--B7_610:1:37:652:403 163 chr1 193 99 35M = 347 189 CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT <<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:282:274:50 163 chr1 193 99 35M = 371 213 CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT <<<<<<<<<<<<<<<<<;<<<<<99<9<5909;5; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:133:460:542 99 chr1 195 99 36M = 356 197 CCTATAAGCCGTTCTATTTGTAATGAAAACTATATT <<<<<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_73:5:44:498:945 99 chr1 195 82 35M = 377 217 CCTATAAGCCGTTCTATTTGTAATGAAAACTATAT ;<;<<<<<<<<<<9<;<:<<<<<<:<<<<;:;<3< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:1:139:152:856 99 chr1 198 99 35M = 392 229 CTAAGCCGTTCTATTTGTAATGAAAACTATATTTA <<<<<<<<;<<<<<<<<<<;<;<<<;<<<<;<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:323:639:311 163 chr1 200 99 36M = 357 193 AAGCCGTTCTATTTGTAATGAAAACTATATTTAGGC <<<<<<<<<<<<<<<<<<<2<<<<<<;<<<<<<81< MF:i:18 Aq:i:70 NM:i:1 UQ:i:23 H0:i:1 H1:i:0
--EAS114_39:2:18:967:582 163 chr1 200 99 35M = 398 233 AAGCCGTTCTATTTGTAATGAAAACTATATTTATG <<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<<<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:186:850:838 99 chr1 205 99 35M = 389 219 GTTCTATTTGTAATGAAAACTATATTTATGCTATT <<<<<;<<<<<<<<<<<:<<<<<;<<<;</<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:126:558:408 163 chr1 206 99 35M = 368 197 TTCTATTTGTAATGAAAACTATATTTATGCTATTC <<<<<<<<<<<<<:<<<<<<<<<<<<<<7<;<<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:157:643:175 163 chr1 206 99 35M = 380 209 TTCTATTTGTAATGAAAACTATATTTATGCTATTC <<<<<<<<;<<<<<<<<<<<<<<<<<<<)<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:141:711:813 99 chr1 209 99 35M = 370 196 TATTTGTAATGAAAACTATATTTATGCTATTCAGT <<<<<<<<<<;<<<<<<<<<<<<<<;<<<<<<:+< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:115:538:276 163 chr1 209 99 35M = 360 186 TATTTGTAATGAAAACTATATTTATGCTATTCAGT <<<<<<<<;<<<;;<<<;<:<<<:<<<<<<;;;7; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:51:1429:1043 83 chr1 209 99 35M = 59 -185 TATTTGTAATGAAAACTATATTTATGCTATTCAGT 9<5<<<<<<<<<<<<<9<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:176:168:513 163 chr1 210 99 35M = 410 235 ATTTGTAATGAAAACTATATTTATGCTATTCAGTT <<<<;<<<<<<<<<<<<<<<<<<<:&<<<<:;0;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:282:817:710 99 chr1 211 99 35M = 384 208 TTTGTAATGAAAACTATATTTATGCTATTCAGTTC <<<<<<<<<<<<<<<<<<<<<<<;:<<<<:8,<<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:65:787:74 83 chr1 213 88 35M = 61 -187 TGTAATGAAAACTATATTTATGCTATTCAGTTCTA 44848=:1661/66==?:<=:?6><<<<1>><<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:240:264:231 121 chr1 213 66 35M = 213 0 TGTAATGAAAACTATATTTATGCTATTCAGTTCTA 9;,;;62<9<)29<<<;96<<<;<<7<<<<<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:240:264:231 181 chr1 213 0 * = 213 0 CAACAGATCAAGAAGGAGGGGCAATGGACGAGTTA %15+5022))0&<<)0)+7:4+&<0<<:0<<<7<< MF:i:192
--EAS1_93:7:14:426:613 99 chr1 214 99 35M = 379 200 GTAATGAAAACTATATTTATGCTATTCAGTTCTAA ======;=;==========;;==3=;==-=<;<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:173:995:93 163 chr1 215 99 35M = 382 202 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<<<<<<<<<<<<<7:<<<<;:<:<<<<:7 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:195:348:703 163 chr1 215 99 35M = 353 173 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<;<<<<<;:<<<<<<<<<<<<:<1:<:7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:62:879:264 163 chr1 216 99 35M = 396 215 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:83:452:970 99 chr1 216 99 35M = 379 198 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT ==========================;======== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:64:1318:1711 99 chr1 218 99 35M = 389 206 TGAAAACTATATTTATGCTATTCAGTTCTAAATAT <<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:113:968:19 83 chr1 219 99 35M = 50 -204 GAAAACTATATTTATGCTATTCAGTTCTAAATATA 8;<;8;9<<<<<<<9<:<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:160:896:275 163 chr1 220 99 35M = 387 202 AAAACTATATTTATGCTATTCAGTTCTAAATATAG ============<====<==<====<==<==;=:6 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:181:191:418 163 chr1 221 99 36M = 387 202 AAACTATATTTATGCTATTCAGTTCTAAATATAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<988 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:242:354:637 99 chr1 222 99 36M = 417 231 AACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<6<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:77:789 163 chr1 223 99 35M = 396 208 ACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<:<4<<9<:7<<<:<<<7<<<<<<<<<<9<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:42:540:501 147 chr1 224 99 36M = 60 -200 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:155:12:674 83 chr1 224 99 36M = 52 -208 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<;<<<<;<<<<8<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:106:316:452 147 chr1 224 99 36M = 49 -211 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT :<<<<<;<<<<:<<:<<<<<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:89:525:113 163 chr1 227 78 40M = 397 210 TATTTATGCTATTCAGTTATAAATATAGAAATTGAAACAG <1<7<6;+0;7;7'<70;-<7<:<:<<5<<:9<5:7:%:7 MF:i:18 Aq:i:39 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS54_65:3:321:311:983 147 chr1 228 99 35M = 51 -212 ATTTATGCTATTCAGTTCTAAATATAGAAATTGAA ;;4;;<7<<<<<<77<<<<<<<<<<17<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:76:493:708 147 chr1 229 44 35M = 73 -191 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA 5/)63.&1517(544(055(0454&7706566679 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:125:628:79 163 chr1 229 99 35M = 400 205 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA ==================<6<====<<:<==7;:: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:78:583:499 83 chr1 229 74 35M = 37 -227 TTTACGCTATTCAGTACTAAATATAGAAATTGAAA &6&9774&<;67<44&-4<;<9<7<<<<<;<<<<< MF:i:18 Aq:i:37 NM:i:2 UQ:i:27 H0:i:0 H1:i:1
--EAS54_67:3:175:730:949 83 chr1 230 99 35M = 70 -195 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC <<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:84:275:1572 163 chr1 230 99 35M = 394 199 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC /6;;;4;;;;;;;;7;;4;.4;;;;;6;;;77077 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:248:753:731 99 chr1 231 99 35M = 402 206 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA <<<<<<<<<<<8<<<<<<<<<<<<:<<<<&<:<.: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:9:1289:215 99 chr1 231 99 35M = 394 198 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA ;;;;;;9;;;67;;;;;99;9;;;;;;;;977747 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:188:802:71 163 chr1 232 99 35M = 415 218 ATGCTATTCAGTTCTAAATATAGAAATTGAAACAG <<<<<<<<<;<<<<<9<<<:<<<:<<<<<<:<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:252:171:323 83 chr1 234 99 35M = 43 -226 GCTATTCAGTTCTAAATATAGAAATTGAAACAGCT ;8<;<=3=6==:====;;======;========== MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:223:142:410 147 chr1 235 99 35M = 60 -210 CTATTCAGTTCTAAATATAGAAATTGAAACAGCTG 8;<<<;<<<<;<<<<<<;<;<<<<<<<<<<<<;<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:243:10:911 83 chr1 236 99 35M = 63 -208 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;<;;;<4;9:<<<;<<;<<<<<;;<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:5:730:1436 163 chr1 236 99 35M = 403 202 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:57:1672:1890 121 chr1 236 75 40M = 236 0 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTA :;;;9<8;;*<<<<<<:<<<<<<<<1:<<<<<<<<<<<7< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:57:1672:1890 181 chr1 236 0 * = 236 0 CCCCCCCCCCCCCCCCCAGCCACTGCGGCCCCCCCAGCCA -+)%)'-'+,,<066,))090+:&486083:5&&:<<5<0 MF:i:192
--EAS1_105:2:299:360:220 99 chr1 237 99 35M = 403 201 ATTCAGTTCTAAATATAGAAATTGAAACAGCTGTG <<<<<<<9<9<<<<<<<<<<<<<<<<<5<;<0<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:24:1037:84 163 chr1 238 99 35M = 415 212 TTCAGTTCTAAATATAGAAATTGAAACAGCTGTGT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<;:<57< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:86:823:683 163 chr1 240 99 35M = 408 203 CAGTTCTAAATATAGAAATTGAAACAGCTGTGTTT <<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;9<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:130:568:978 99 chr1 246 88 35M = 434 223 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGAC 7<<;<<;<7<:;<7<<<<<<<<);4;+<7+3+%;< MF:i:18 Aq:i:24 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS114_45:4:73:1208:495 163 chr1 246 99 35M = 431 220 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGCC ;;;;;;;;;;;;;;;;;;;;;;;;5;;;;;37377 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:264:642:506 99 chr1 247 99 35M = 420 208 AAATATAGAAATTGAAACAGCTGTGTTTATTGTAT <<;<<<<<<;<<<;:;;:;;<<;<<<<;*+;*&.4 MF:i:18 Aq:i:56 NM:i:3 UQ:i:28 H0:i:1 H1:i:0
--EAS114_28:5:104:350:749 163 chr1 247 99 36M = 415 204 AAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <<8<<<<<<<<<<<;<<<<<<<<0;<<<9;<85;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:227:259:597 147 chr1 248 99 35M = 61 -222 AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:113:809:364 99 chr1 250 99 35M = 413 198 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<7<;<;<<<4 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:218:877:489 83 chr1 250 86 35M = 80 -205 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG 9<<<8<<<;<9<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:20:979:96 83 chr1 254 99 35M = 79 -210 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA '9996;(:;-<;1<<<<=<<<<=<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:259:219:114 99 chr1 254 99 35M = 411 192 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA <<<<<<<<<<<<<<<;<<<<<<7<7<<<<<0<<9< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:13:1034:1144 99 chr1 256 99 35M = 429 208 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<<<<<<<<<<<<<<<<<<<<<<<3<<<;<<;<++ MF:i:18 Aq:i:69 NM:i:2 UQ:i:48 H0:i:1 H1:i:0
--EAS221_1:2:29:1486:672 147 chr1 256 99 35M = 79 -212 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<:<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<++ MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS139_11:7:46:695:738 163 chr1 259 74 35M = 428 204 TGAAACAGCTGAGTTTAGCGCCTGTGTTCACATAG <;<<<<;<<),&4<3<<7&7<0;)).3;79;7<;0 MF:i:130 Aq:i:74 NM:i:3 UQ:i:18 H0:i:0 H1:i:0
--EAS139_11:8:26:1221:222 163 chr1 261 99 35M = 446 220 AAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:190:727:308 147 chr1 263 99 35M = 103 -195 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:284:261:124 83 chr1 263 99 35M = 79 -219 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ===27===.====&===========;;======== MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:141:80:875 147 chr1 265 99 35M = 110 -190 AGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCA 6/<;84<;<;<<<<<<5<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:24:1135:563 163 chr1 266 99 40M = 446 220 GCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACC <<<<:<<<<:1:<<<<<<.<<<<<<<<;<;;;43+:30:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:90:986:1224 83 chr1 267 99 35M = 67 -235 CTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAAC <7*37;;;;;;;9<<;<7<<<<<<<<<<<;;<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:287:492:169 99 chr1 269 99 36M = 449 216 GTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAAC <<<7<<<<<<<<<<<<<<<<<<<<<<<8;;<;6<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:48:9:409 99 chr1 271 75 18M5I12M = 464 228 GTTTAGTGCCTTTGTTCACATAGACCCCCTTGCAA <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:1:87:1222:878 163 chr1 272 10 40M = 435 203 TATAGGGCCTTTGTTCAAACCCCTTGCAACAACCTTGAGA &+6<6&<:<<9<1112<<;)9227</);;;2-79;)/769 MF:i:18 Aq:i:10 NM:i:3 UQ:i:41 H0:i:0 H1:i:0
--B7_591:7:200:192:373 163 chr1 275 75 14M5I17M = 451 212 AGTGCCTTTGTTCACATAGACCCCCTTGCAACAACC <<<<<<<<<<<<<<<<<<<<<<<<<:<:<;5<<;<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_65:1:163:846:223 163 chr1 278 74 11M5I19M = 463 220 GCCTTTGTTCACATAGACCCCCTTGCAACAACCTT <<<<;<<;4<<<;;9<<<<<+<<;<</27;;47;. MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:7:283:799:560 83 chr1 283 66 35M = 121 -197 ACATAGACCCCCTTGCAACAACCTTGAGAACCCCA <4<6<8;;6<<<+;<:<<;<<<<<<<<<<<<<<<< MF:i:130 Aq:i:66 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_595:4:84:802:737 147 chr1 284 68 35M = 140 -179 CATAGACCCCCTTGCAACAACCTTGAGAACCCCAG +<1<-;69;;;;8;:<<6<;<<<<<<<<<<<<<<< MF:i:130 Aq:i:68 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_66:5:308:400:602 163 chr1 285 71 35M = 470 220 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG ;<<<<<<<<<<<<<<<<<<<<<<<<;;;<<;<;76 MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS54_81:2:285:367:932 163 chr1 285 74 35M = 440 190 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG ===========;======;=====;=======5== MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:1:70:147:84 83 chr1 285 73 35M = 128 -192 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG <<<:<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<; MF:i:130 Aq:i:73 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_62:3:314:386:190 99 chr1 287 98 35M = 459 207 AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA ++<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS56_65:1:53:272:944 99 chr1 287 99 35M = 447 195 CAACCCCCTTGCAACAACCTTGCGAACCCCAGGGA <<<<<<<<<<<<.7<.<<<<<<-<-<<<<<&<222 MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS188_7:5:112:51:128 163 chr1 287 99 35M = 477 225 AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA ++<<<<<<<<<<<<<5<<<<<<<<<<<<<<;<;<6 MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS56_57:6:44:280:641 163 chr1 288 99 35M = 454 201 AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA ;<<<<<<<<<<66<;<<<<<;<<2;;;<<;;;;,; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:75:946:1035 99 chr1 288 99 35M = 480 227 AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA <<<<<<<<<<;<<<;<<<<<<<8;<6<<<<44<:4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:187:227:818 83 chr1 290 99 35M = 129 -196 CCCCCTTGCAACAACCTTGAGAACCCCAGGGAATT <<9<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:40:1128:1940 83 chr1 291 99 35M = 112 -214 CCCCTTACAACAACCTTGAGAACCCCAGGGAATTT <<<:///77:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS54_71:4:72:63:435 99 chr1 293 99 34M = 490 232 CCTTGCAACAACCTTGAGAACCCCAGGGAATTTG <<<<<<<<<<<<<<<<<<<<;<<<;<;;39:7:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:271:244:568 99 chr1 294 99 35M = 481 222 CTTGCAACAACCTTGAGAACCCCAGGGAATTTGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:82:902:868 99 chr1 295 99 35M = 471 211 TTGCAACAACCTTGAGAACCCCAGGGAATTTGTCA <<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:313:83:546 163 chr1 296 99 35M = 454 193 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<;<<<<<<<<<<<<<<4<<<:<;<<9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:57:786:414 163 chr1 296 99 35M = 453 192 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<<<<<<<<<<<<<<:<<:<<:;;7<7 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:260:985:520 163 chr1 296 99 35M = 468 207 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<<<<<<<<;:;<<;<:<<<,:1;)<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:170:169:57 83 chr1 296 99 35M = 138 -193 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA 778<:<<<9<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:199:327:965 163 chr1 297 91 35M = 494 232 NCAACAACCTTGAGAACCCCAGGGAATTTGTCAAT !,+*+++++++++++*+++++++**)+*+**+(** MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--B7_610:5:147:68:353 163 chr1 299 99 35M = 486 222 AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT <;<;<<7<<<<<<<7<<;;<7<4<8<<<8.;4;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:225:195:543 147 chr1 299 99 35M = 123 -211 AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT ;;8;;+;(<<<<<<<<7;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:303:184:14 163 chr1 301 99 35M = 479 213 CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA <<<<<<8<0<<<<-<-98<<--<<<6;076;75+& MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:326:309:149 163 chr1 301 99 35M = 467 201 CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA <<<<<<<<<<<<<<<<<<<<:<<<<<<<<<;;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:327:795:103 147 chr1 302 99 35M = 133 -204 AACCTTGAGAACCCCAGGGAATTTGTCAATGTCAG ;::;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:110:355:323 99 chr1 303 99 35M = 477 209 ACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGG <<<<<<<<<<<<<<<<<<<<<<<<;<<<<;;<<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:18:1418:237 99 chr1 304 99 35M = 503 234 CCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<7< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:112:203:90 163 chr1 305 99 35M = 470 200 CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA <<:<<<<<<<<.<<<<<<<<<<<<6<:867<8884 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:319:246:304 99 chr1 305 99 35M = 472 202 CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:114:714:317 147 chr1 311 99 35M = 126 -220 AACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGC ;8<;:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:327:991:508 99 chr1 312 99 35M = 495 218 ACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCA <<<<<<<<<<<<<<<<<<<<<;<;:<7:47;:75; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:77:29:126 147 chr1 315 99 35M = 131 -219 ACAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT ()9;;<<<<<<<<<<5<<<7<<<<<<;<<<;7<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS219_1:1:37:1004:1136 99 chr1 315 99 35M = 473 193 CCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT <<<<<<<<<<<<<<;<<<;<<<<<:<<;;369<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:78:583:670 83 chr1 316 99 35M = 142 -209 CAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTT 8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:90:435:691 147 chr1 318 99 35M = 147 -206 GGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGT ;;<;;;+<<:<<<:<;;<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:69:735:1915 147 chr1 321 99 35M = 154 -202 AATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAG <<::<<<7<<<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:324:728:956 147 chr1 322 99 35M = 165 -192 ATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGT <;;;;5;<<0<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:269:280:716 99 chr1 323 99 35M = 490 202 TTTGTCAATGTCAGGGAAGGAGCATTTTTTCAGTT <<<<<<<<<2<<:2:1<<7/2/:3<<<<*<3($<< MF:i:18 Aq:i:58 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_73:3:88:24:744 163 chr1 325 84 35M = 484 194 TGTCAATGTCAGGGAAGGAGCATTTTTGAAGTTTA <7*:<<::.'<<<<:<<:<<'<63'6+'303*%%+ MF:i:18 Aq:i:21 NM:i:5 UQ:i:53 H0:i:0 H1:i:0
--EAS1_108:7:82:926:112 147 chr1 328 99 35M = 164 -199 CAATGTCAGGGAAGGAGCATTTTGTCAGTTGCCAA <1:/<*6<<6<<<<<6<<<<<<4<<<<82<+<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS56_63:7:185:213:330 163 chr1 328 99 35M = 502 209 CAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAA <<<<<<<<<;<<;<<<<<;<<<<;;;<<;<<;<38 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:277:458:330 163 chr1 329 99 36M = 490 197 AATGTCAGGGAAGGAGCCTTTTGTCAGTTACCAAAT <<7<<<<<<<<<2<<<%,<6<&<<,<<<<:<<<<(7 MF:i:18 Aq:i:41 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--B7_595:1:81:1000:375 163 chr1 329 90 35M = 524 230 NATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAA !.............................+.(+. MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS220_1:8:33:672:473 99 chr1 330 99 35M = 515 220 ATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAAT <<<<<<<<7<7<7<<62<<<<66<15*/99*5241 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:164:797:930 147 chr1 332 99 35M = 173 -194 GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGT ;;:;8<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:155:68:326 147 chr1 332 99 36M = 182 -186 GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTG ;<<<:6<<<<<<6<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:202:39:380 99 chr1 334 99 35M = 513 214 CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT <<<<<<<<<<<<<<<<<;<<:;<<18<84:<&<+< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:42:1091:1726 99 chr1 334 99 35M = 502 203 CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT <<<<<<<<<<<<<<<<<<<<<<8<<<<<<8:<.<: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:66:959:1311 83 chr1 336 95 35M = 159 -212 GGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT 67.68:4::6;;;7:6:;:5;8;;<<:;;<;;;;< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:200:559:765 99 chr1 337 99 36M = 521 220 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTAT <<<<<<<<<<<<<<7<<<<<<;<<;;4<7<9;<<-; MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:328:669:662 99 chr1 337 99 34M = 512 210 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT <<<<<<<<<<<<<<<<<<<<<<<<+9;<;;.<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:159:125:297 83 chr1 337 99 35M = 170 -202 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA 89<;;8<<;<;<4<;<8<<<<;;8<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:19:886:279 147 chr1 337 99 35M = 182 -190 GAAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA 9%<2)2.2::<;<<<2<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:67 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--B7_595:1:209:653:400 83 chr1 340 99 35M = 175 -200 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA <69<98<+<<6<<4<<<<</4<<:<4<<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:294:525:849 83 chr1 340 99 35M = 167 -208 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA ;<;:;:<;<;<<<3<<<;<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:87:1375:1303 163 chr1 340 99 35M = 529 224 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA <<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:325:759:288 147 chr1 341 99 35M = 163 -213 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC 9;<9<;<;;<;<;<;<<<:<;<<<;<<<<<;<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:76:786:458 163 chr1 341 99 35M = 502 196 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC <<.<<<<2<<:84<:<<<:<8<<)<)429<2<<8< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:210:880:606 163 chr1 341 99 35M = 518 212 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAT <<<<<<<<<<<<<<<<<<;<<<<<<:<<<<3<<8& MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS192_3:3:257:611:440 99 chr1 341 99 35M = 524 218 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC <<<<<<<<<<<<<<<<<<<<8<<<<;<<<<8<<+5 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:303:402:142 83 chr1 343 99 35M = 181 -197 AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA ;;;;;<9<<8;<<<<7<<;<<<<;<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:13:122:187 83 chr1 343 99 35M = 153 -225 AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA <<&<;;<<<;7<<<<;<;<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:80:885:513 163 chr1 344 99 35M = 507 198 GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG <<<<<<<<<<<<<<<<<<<:<<<<2:<;<<75<7; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:90:1873:89 99 chr1 344 99 35M = 531 222 GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<7<<<7 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:1:37:652:403 83 chr1 347 99 35M = 193 -189 TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG <;<<<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:28:701:724 163 chr1 347 99 35M = 521 209 TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG <<<<<<7<<<<<<7::<:<<-<<::::::<747:: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:66:655:769 99 chr1 348 99 35M = 515 202 TTTGTCAGTTACCAAATGTGTTTATTACCAGAGGG 8;<<<<<8<<<<<;<<<7<;<<<<<;<7<27<;;7 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:231:339:551 163 chr1 350 99 35M = 527 212 TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT <<<<<<;<<<<<<;<<<<<<<<<<;5<<46;<;:1 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:129:694:359 163 chr1 350 88 35M = 525 210 TGTCAGTTACCAAATGTGTTTATTACCCGAGGGAT ============+7=======:==;;;'=;==7;= MF:i:18 Aq:i:43 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--EAS220_1:2:62:1109:804 83 chr1 350 99 35M = 176 -209 TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT <<<<<:<<<::<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:157:935:374 99 chr1 353 99 35M = 512 194 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <<<<<<<<<<;<<;;<<<<<<<<<::8'5++;+11 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:103:111:720 99 chr1 353 99 36M = 512 195 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGAG <<<<<<<<<<<<<<<<<<<<<<<<<5<<<5;<5<:; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:311:100:539 163 chr1 353 99 35M = 508 190 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <<<<;<<<<;<<<<<;<<<<<<<<<:<::;7;<0; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:195:348:703 83 chr1 353 99 35M = 215 -173 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <9<<9</<<<<<<<<<<<<<<2<8<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:72:308:839 163 chr1 354 99 40M = 517 203 AGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG <<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<99494416: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:133:460:542 147 chr1 356 99 36M = 195 -197 TTACCAAATGTGTTTATTACCAGAGGGATGGAGGGA ;:;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:293:355:321 83 chr1 356 99 35M = 174 -217 TTACCAAATGTGTTTATTACCAGAGGGATGGAGGG <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:323:639:311 83 chr1 357 99 36M = 200 -193 TACCAAATGTGTTTATTACCAGAGGGATGGAGGGAA -94<<<<<<<4<<<<<<<<2<<<<<7<<<-<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:321:642:388 83 chr1 357 99 33M = 181 -209 TACCAAATGTGTTTATTACCAGAGGGATGGAGG 19<<<<<8<<<<<<<<;<<<<<<<<<<7<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:4:262:456:74 99 chr1 357 99 35M = 504 182 TACCAAATGTGTTTATTACCAGAGGGATGGAGGGA <<<<<<<<<<<<<<<<<<<<:;;:;7:<::7<7:3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:95:426:791 99 chr1 359 99 35M = 547 223 CCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG <<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<,<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:115:538:276 83 chr1 360 99 35M = 209 -186 CAAATGTGTTTATTACCAGAGGGATGGAGGGAAGA :<<<<<<<<;;<5<<;<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:196:533:921 99 chr1 361 99 35M = 526 200 AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAG =====1========8===:===7======971=3= MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:121:380:656 99 chr1 362 99 35M = 542 215 AATGTGTTTATTACCAGAGGGATGGAGGGAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<:<:<<83<:<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:34:970:1374 99 chr1 363 99 35M = 520 192 ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG <<<<<<<<<<<<<<;7<77;<<;<;;9;;:86::: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:29:1061:574 163 chr1 363 99 35M = 563 235 ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG <<<<<<<<<<<<<<<<<<;<<<<<<;<<8<:<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:124:243:35 99 chr1 364 60 35M = 544 215 TGTGTTTATTACCAGAGGGATGGAGGGAAGAGCGA <<<<<;;<<<<<<:<<<.<<<:++5+:1(;1;$<( MF:i:18 Aq:i:60 NM:i:1 UQ:i:3 H0:i:1 H1:i:0
--EAS114_30:2:272:750:698 163 chr1 365 80 35M = 538 208 GTGTTTATTACCAGAGGGATGGAGGGATGACGGAC <)<<<<<7;<<<4<;7<<<<78068:(%<3*861, MF:i:18 Aq:i:37 NM:i:2 UQ:i:13 H0:i:0 H1:i:1
--EAS56_53:3:126:558:408 83 chr1 368 99 35M = 206 -197 TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT <:<<:;;<<<<<<<<8<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:1:1140:1206 83 chr1 368 99 35M = 181 -222 TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT 77977::99;;;:;;<;;;:;;;<<;<;;;;<;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:141:711:813 147 chr1 370 99 35M = 209 -196 TATTACCAGAGGGATGGAGGGAAGAGGGACGCTGA =<5<5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:282:274:50 83 chr1 371 99 35M = 193 -213 ATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAA </7;/:<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:485:482 99 chr1 371 94 35M = 530 194 ATTACCAGAGGGATGAAGGGAAGAGGGACGCTGAA <<<<<<<<<<<<<<<<<<<<<<<6<<<<<:<:89< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_63:1:119:446:185 163 chr1 372 99 35M = 562 225 TTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAG <<<<<<<7<<<4<<<<9<<54<:<7<5:<::7-5; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:168:69:605 163 chr1 373 67 36M = 565 228 TACCCGAGGGATGGAGGGTAGAGGGACGCTGAAGTG <<<4(<<<<<<<<<<<<<(1<6<-<2<<7<<6<<++ MF:i:18 Aq:i:26 NM:i:4 UQ:i:59 H0:i:0 H1:i:0
--EAS114_32:6:78:909:394 163 chr1 373 81 35M = 554 216 TACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGA <<<<<<8<<<&<<<-<<<14,4;<<-0<2+<)/82 MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:5:41:118:1246 99 chr1 374 99 35M = 548 209 ACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAA <<<<<<<<<<<<<<<<<<<<<<<</<<<<<<1<<( MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:44:498:945 147 chr1 377 82 35M = 195 -217 ATAGGGATGGAGGGAAGAGGGCCGCTGAAGAACTT <%*50<7<4<<<7<,<<.<8/,9<:</<<<;<;<< MF:i:18 Aq:i:37 NM:i:2 UQ:i:15 H0:i:0 H1:i:1
--EAS114_39:5:50:972:1286 163 chr1 377 99 35M = 559 217 AGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTT <<<<<<<<<<<<<<<<<;<<<<<<<<<6<<7:7:; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:82:164:1924 163 chr1 378 99 35M = 542 199 GAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTT <<<<<<<<<<<<<<<<<<<<8<<<<<<3<<'<7<8 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:14:426:613 147 chr1 379 99 35M = 214 -200 AGGGAGGGAGGGAAGAGGGACGCTGAAGAACTTTG :<<<<&<<<<<<<<<<<<<<6<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_61:4:83:452:970 147 chr1 379 99 35M = 216 -198 AGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTG <<<39<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:157:643:175 83 chr1 380 99 35M = 206 -209 GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA ;<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:61:1797:113 99 chr1 380 99 35M = 551 206 GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA <<<<<<;<<<<;:<3<<<<;;<<<8<<;:<<;3<. MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:90:828:633 163 chr1 381 99 36M = 537 192 GGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATG <<<<<<<<<<<8<;96<;<<<<<99<2<<;<96<8; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:61:433:385 163 chr1 381 99 35M = 579 233 GGATGGAGGGAAGAGGGACGCTGAAGCACTTTGAT <<<<<<<<<<<<<<<<<;<<;<<6<<)91<<;;,; MF:i:18 Aq:i:43 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--EAS1_93:2:173:995:93 83 chr1 382 99 35M = 215 -202 GCTGGAGGGAAGAGGGACGCTGAAGAACTTTGATG <(0<<9<<<7<<<<<<7<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:73 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS54_71:3:254:32:275 99 chr1 382 99 34M = 575 228 GATGGAGGGAAGAGGGACGCTGAAGAACTTTGAT <<<<<<<<<<<<<<<<<<<<<<;;<:<::<:2*< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:282:817:710 147 chr1 384 99 35M = 211 -208 TGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCC 366=6;======8====:========;======== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:75:217:337 163 chr1 386 99 35M = 568 217 GAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT ;;;;;;;;;;;;;;;;;;8;;;;;;;;;;;88787 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:181:191:418 83 chr1 387 99 36M = 221 -202 AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:160:896:275 83 chr1 387 99 35M = 220 -202 AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTC ;;;9;<<<<<<;<;;<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:88:1656:896 99 chr1 387 99 40M = 538 191 AGGGAAGAGGGATGCTGAAGAACTTTGATGCCCTCTTCTT <<<9<<<<<<<9<<<;<<<<<<<<<;6<<;7<<<<::9:; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_597:8:186:850:838 147 chr1 389 99 35M = 205 -219 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <;<;<;<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:64:1318:1711 147 chr1 389 99 35M = 218 -206 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:78:1478:1446 99 chr1 389 99 35M = 560 206 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<:<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:82:879:246 163 chr1 391 99 35M = 576 220 AAGAGGGACGCTGAAGAATTTTGATGCCCTCTTCT <<<<<<<<<<<<<<<<<<&<<<77<<-<<<6<62< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_610:1:139:152:856 147 chr1 392 99 35M = 198 -229 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT <<<<<;<<<<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:162:503:769 99 chr1 392 99 35M = 571 214 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT ========================:========== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:216:988:883 163 chr1 392 99 35M = 584 227 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT <<<<<<<<<<<<8;<;88<;8;;;;828;8;8;;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:118:523:591 163 chr1 393 99 35M = 563 205 GAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTC <<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<;;<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:3:168:741:680 163 chr1 394 99 35M = 562 203 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC <<<<<<<<<<<<<<<<<<<<<<<<<1<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:9:1289:215 147 chr1 394 99 35M = 231 -198 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC 7747*7;;;;+;;:2;7;:1;;9:;:;:;;:;::; MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:84:275:1572 83 chr1 394 99 35M = 230 -199 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC 777777::7:;74;:;:7;:::;;;;:;;8;;;<; MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:77:789 83 chr1 396 99 35M = 223 -208 GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA 9<;<:<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:62:879:264 83 chr1 396 99 35M = 216 -215 GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA ====:=<============================ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:89:525:113 83 chr1 397 78 40M = 227 -210 GACGCTGAAGAACTTTGATTCCCTCTTCTTCCAAAGATGA );:+4-&<<+<<:<+<)<<<7<8<8:<:<<:<82::<<2< MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_39:2:18:967:582 83 chr1 398 99 35M = 200 -233 ACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAG <:<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:140:522:212 163 chr1 399 99 35M = 568 204 CGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA <<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<;95; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:125:628:79 83 chr1 400 99 34M = 229 -205 GCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA 95&<<<<<<<63<<<6<<<<8<;<<8<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:185:312:167 163 chr1 401 99 35M = 562 196 CTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATG ===========================;855;=== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:248:753:731 147 chr1 402 99 35M = 231 -206 TGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGA 7;55;=,=89=====3===9=======9======= MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:299:360:220 147 chr1 403 99 35M = 237 -201 GAAGAACTTAGATGCCCTCTTCTTCCAAAGATGAA 66<;;4;<<()<<4<<<<<<;<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS114_45:6:5:730:1436 83 chr1 403 99 35M = 236 -202 GAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAA 7977979;;;;;;;;;7;3<;2<;26;<;<<;;<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:134:868:252 99 chr1 404 99 36M = 595 227 AAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:165:431:857 99 chr1 406 99 35M = 559 188 GAACTTTGATGCCCTCTTCTTCCAAAGATGAAACG <<<<<<<<<<<<<<<<<<<<<<<6&:<7<:76,;; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:86:823:683 83 chr1 408 99 35M = 240 -203 ACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCG <4<<<<<<<<:<<6<<7<<<8<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:176:168:513 83 chr1 410 99 35M = 210 -235 TTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTA ;0;;;7:<<<<<<<;<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:259:219:114 147 chr1 411 99 35M = 254 -192 TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA 666<:6/:6::6::<:::<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:84:1013:1074 121 chr1 411 71 35M = 411 0 TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA 8;;<;8744<7<<4<<47<<<<<<7<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:84:1013:1074 181 chr1 411 0 * = 411 0 GCAAGGGGGTCTATGTGAACAAAGGCACTAAACAC <7<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS54_81:7:325:150:465 99 chr1 412 99 35M = 598 221 TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<3;;: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:179:13:782 163 chr1 412 99 35M = 568 191 TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC <<<<<<<<<<<<<<<<<:<<:7<<<<::<7<:-:1 MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:113:809:364 147 chr1 413 99 35M = 250 -198 GATGCCCTCTTCTTCCAAAGATGAAACGCGTAACT ;<;;;<<<:<6<<<::<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:188:802:71 83 chr1 415 99 35M = 232 -218 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC ;;;;<:::<<<<<7<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:204:264:413 99 chr1 415 96 34M = 593 213 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTG <<<<<<<<<<<<<;:59<+<<:<<<9<<;:62<) MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:104:350:749 83 chr1 415 99 36M = 247 -204 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCG ;<93;9;<3;<<<;<<<<<;<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:24:1037:84 83 chr1 415 99 35M = 238 -212 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC <;<<;<<<7<<7&<<<<<<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:242:354:637 147 chr1 417 99 36M = 222 -231 CCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT 8<;;;;;<<<8;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:37:761:635 99 chr1 418 99 35M = 581 198 CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT <6<<<<<<6<<<<<<<<<<<<<<<<<8<8<<4<4< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:44:1578:1674 99 chr1 418 99 35M = 573 190 CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT ;<<;<<;<<;;;;;9<;9;;<9:;;<:;9;76669 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:120:63:653 99 chr1 420 99 35M = 598 213 TCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<9<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:264:642:506 147 chr1 420 99 35M = 247 -208 ACTTCATCCAAAGATGAAACGCGTAACTGCGCTCT &;(-/)-1&:<<9<25<<<<2<1<';8<<<:888< MF:i:18 Aq:i:56 NM:i:2 UQ:i:13 H0:i:1 H1:i:0
--EAS188_7:3:101:572:491 99 chr1 425 99 35M = 600 210 TTCCAAAGATGAAACGCGTAACTGCGCTCTCATTC <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<1<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:27:1881:486 163 chr1 427 99 35M = 607 215 CCAAAGATGAAACGCGTAACTGCGCTCTCATTCAC ;;;;;;;;;;;;;;1;;;;;;;;78;8;8;8878/ MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:120:14:944 163 chr1 428 99 35M = 621 228 CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT <<<<<<<<<<<<<<<;<<<<<;<<<<<<<:;8;;7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:46:695:738 83 chr1 428 74 35M = 259 -204 CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT <<<<2<5<<-<<<<<<<4<<<<<<<<<<<<<<3<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:13:1034:1144 147 chr1 429 99 35M = 256 -208 AAAGATGAAACGCGTAACTGCGCTCTCATTCACTC <<:%<9)<<<<<<8<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:91:360:585 99 chr1 430 99 35M = 586 191 AAGATGAAACGCGTAACTGCGCTCTCATTCACTCC <<<<9<<<<<;<<<;<<77<<<;<;;<;;<;<;;< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:73:1208:495 83 chr1 431 99 35M = 246 -220 AGATGAAACGCGTAACTGCGCTCTCATTCACTCCA 8-889<<;<;;:<;<;;;;;;<<;;<;;;;<<;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:16:1081:1894 163 chr1 431 99 35M = 624 228 AGATGAAACGCGTAACTGGGCTCTCATTCACTCCA <<<<<<<<<<<<<<<<<<8<<<<;<<;<<<<<<<+ MF:i:18 Aq:i:45 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS188_4:7:35:408:348 117 chr1 433 0 * = 433 0 GGTTCTCAAGGTTGTTGCAATGGGGTCTATGTGAA .73<;<<:77<<<<<<<<<<-<<;<<<<<<<<<<< MF:i:192
--EAS188_4:7:35:408:348 185 chr1 433 35 35M = 433 0 AAGAAACGCGTAACTGCGCTCTCATACACTCCAGC 4,'3<6;)2);<3<-6<;<;7+7<5+<<<7<<<<< MF:i:64 Aq:i:0 NM:i:2 UQ:i:21 H0:i:0 H1:i:1
--EAS56_53:4:130:568:978 147 chr1 434 88 35M = 246 -223 TGAAACGCGAAACTGCACTCTCATTCACTCCAGCT --;066;;62<<<2&<+<+<2;<<2<<<;<<<7<< MF:i:18 Aq:i:24 NM:i:2 UQ:i:27 H0:i:0 H1:i:0
--EAS139_19:1:87:1222:878 83 chr1 435 34 40M = 272 -203 TCAGCGCGTCACTCCGCTCTCATTCACCCCAGCTCCCTGT !!;*:885<&<<<)8&<:<<<8<8<::*<4<88<<<8<<< MF:i:18 Aq:i:10 NM:i:6 UQ:i:42 H0:i:0 H1:i:0
--EAS51_64:6:143:763:480 117 chr1 436 0 * = 436 0 CTGAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA ;<&-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS51_64:6:143:763:480 185 chr1 436 70 35M = 436 0 AAACGCGTAACTGCGCTCTCATTCACTCCAGCTCC ::3<:6<<<:<<<<7<<<<<<<<)6<<<1<<<<;< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:145:607:216 163 chr1 437 99 35M = 596 194 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC <<<<<<<<8<<<<<<<<<<4<<<7<:<<1<<;;99 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:46:285:790 121 chr1 437 72 35M = 437 0 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ;;<8<;<<<<88<8<<;;<;<<;<<<<<<<<;<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:46:285:790 181 chr1 437 0 * = 437 0 TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG !!<<3<<<;;<<<<<<<<<;<;7<<7<<<<<<;<< MF:i:192
--EAS56_59:4:329:577:757 117 chr1 437 0 * = 437 0 TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG !!<<<<9;<:<<;<<<<<<<<;<<<<<<<<<<<<< MF:i:192
--EAS56_59:4:329:577:757 185 chr1 437 72 35M = 437 0 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ;;;888;<<<<<<6<<<2;<<<<<<;<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:57:722:347 163 chr1 439 99 35M = 599 195 CGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:285:367:932 83 chr1 440 74 35M = 285 -190 GCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGT 9=5==;=;7===;==;=================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:38:842:395 73 chr1 442 77 35M * 0 0 GTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<93<;9 MF:i:32 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:14:601:624 163 chr1 446 99 35M = 622 211 CTGCGCTCTCATTCACTCCAGCTCCCTGTCAACCC <<1<<<<<<<<<<<<<<<<<3<<::<<7<<1,<:( MF:i:18 Aq:i:69 NM:i:2 UQ:i:18 H0:i:1 H1:i:0
--EAS114_45:3:3:1377:1663 99 chr1 446 99 35M = 626 215 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<;;;;<:;;:<;;<;;<;:;;<;9;;::977676 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:26:1221:222 83 chr1 446 99 35M = 261 -220 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<<<<<<:<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:82:566:1096 99 chr1 446 99 35M = 621 210 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:24:1135:563 83 chr1 446 99 40M = 266 -220 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA 6+96:87<&8<<79:<;<<<<:<<;<<<<<<;;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:53:272:944 147 chr1 447 99 35M = 287 -195 TGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAA &94<4&8.6<6&;<:0:8;;:6;<;:<*<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:287:492:169 147 chr1 449 99 36M = 269 -216 CGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG ;/;6<<<<4(<(<<<<6<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:49:163:904 163 chr1 450 99 35M = 616 201 GCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78958 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:200:192:373 83 chr1 451 75 36M = 275 -212 CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC <<<8<<<4<4<<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:253:285:104 163 chr1 451 99 35M = 627 211 CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA ======================:========7==; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:151:159:43 99 chr1 452 99 35M = 645 228 TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC <<<<<<<;<<<8<<<;<;8<<<<7<77;;79<09+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:1:115:868:887 163 chr1 452 99 35M = 650 233 TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC >>>>>>>>>>>>>>;<>>>>><<>>>;<+<</;;1 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:57:786:414 83 chr1 453 99 35M = 296 -192 CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC ;;;8;1;:<<<<;<::;;<<<<;<;;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:197:170:559 121 chr1 453 71 35M = 453 0 CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC <:<;;:<5<5<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:197:170:559 181 chr1 453 0 * = 453 0 TTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAACA :;;;;<<<<<<8<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS1_103:7:313:83:546 83 chr1 454 99 35M = 296 -193 TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT ;)<994<;<<<<<<<;<<<<<<<<<<<<<<5<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:44:280:641 83 chr1 454 99 35M = 288 -201 TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT 9;<<9;9;;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:60:837:923 163 chr1 457 61 36M = 641 220 TTCACGCCAGCTCCCTGTCACCCAATGGACCTCTGA <<<<<4<<+<<*<<<<88<<<<<'*<4-+<<4&<40 MF:i:18 Aq:i:24 NM:i:2 UQ:i:24 H0:i:0 H1:i:1
--EAS114_45:5:85:401:1190 163 chr1 458 99 35M = 652 229 TCACTCCAGCTCCCTGTCACCCAATGGACCTGTGA 4;;;1;;;;;;.6;;;(;;/;/;3;;;7;(3&063 MF:i:18 Aq:i:55 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:314:386:190 147 chr1 459 98 35M = 287 -207 CACTCCAGCTCCCTGTCACCCAATGGACCTGTGAT 76;%;<<3<9;<69<<<7;;;<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:2:831:692 99 chr1 462 99 35M = 634 207 TCCAGCTCCCTGTCACCCAATGGACCTGTGATATC <<<<<<<<;<<<<<<<<<<9<<:9<<<;;96<796 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:163:846:223 83 chr1 463 74 35M = 278 -220 CCAGCTCCCTGTCACCCAATGGACCTGTGATATCT <7<5<*<<<<0<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:48:9:409 147 chr1 464 75 35M = 271 -228 CAGCTCCCTGTCACCCAATGGACCTGTGATATCTG <<<<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:134:751:831 99 chr1 465 99 36M = 651 222 AGCTCCCTGTCACCCAATGGACCTGTGATATCTGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<948 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:326:309:149 83 chr1 467 99 35M = 301 -201 CTCCCTGTCACCCAATGGACCTGTGATATCTGGAT ;;<<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:260:985:520 83 chr1 468 99 35M = 296 -207 TCCCTGTCACCCAATGGACCTGTGATATCTGGATT ;9;7<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:112:203:90 83 chr1 470 99 35M = 305 -200 CCTGTCACCCAATGGACCTGTGATATCTGGATTCT ;<;:;<;;;<<<<<<<<<:<<<7<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:308:400:602 83 chr1 470 71 35M = 285 -220 CCTGTCACCCAATGGACCTGTGATATCTGGATTCT ;77;2<<;<7<<;<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:82:902:868 147 chr1 471 99 35M = 295 -211 CTGTCACCCAATGGACCTGTGATATCTGGATTCTG <<;;<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:153:977:200 163 chr1 472 99 35M = 640 203 TGTCACCCAATGGACCTGTGATATCTGGATTCTGG ;<<;<<<<7<<;;;;;<<6<<<<<86;;8<;8;6; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:319:246:304 147 chr1 472 99 35M = 305 -202 TGTCACCCAATGGACCTGTGATATCTGGATTCTGG ;;<;;;<<<<8;<<<<;<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:37:1004:1136 147 chr1 473 99 35M = 315 -193 GTCACCCAATGGACCTGTGATATCTGGATTCTGGG </8<<<<7<+<<<<<<<,<<<<<<<<<6<<<<1<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:59:396:359 99 chr1 474 99 35M = 670 231 TCACCCAATGGACCTGTGATATCTGGATTCTGGGA <<9;;<;<;;;;<;;9;;;;;<;;;;;<;;77677 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:45:1769:1130 163 chr1 476 99 35M = 635 194 ACCCAATGGACCTGTGATATCTGGATTCTGGGAAA ;;;;;;;;;;;;9;;;;;;19;;;9;;;;176777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:110:355:323 147 chr1 477 99 35M = 303 -209 CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT 6069;1<<;4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:28:708:463 99 chr1 477 99 36M = 672 231 CCCAATGGACCTGTGATATCTGGATTCTGGGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;<:<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:112:51:128 83 chr1 477 99 35M = 287 -225 CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT ;9<;;:<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:303:184:14 83 chr1 479 99 35M = 301 -213 CAATGGACCTGTGATATCTGGATTCTGGGAAATTC :<<.<;;7<:<<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:84:101:328 163 chr1 480 99 35M = 673 228 AATGGACCTGTGATATCTGGATTCTGGGAAATTCT <<<;<<<<<<<<;<<<<<<<<<<:<;;<44;;<;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:228:354:203 99 chr1 480 99 34M = 643 198 AATGGACCTGTGATATCTGGATTCTGGGAAATTC 88<<<8<<<<<<<<<8<<<<<<<<<4<<<4/9/; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:38:856:336 99 chr1 480 99 33M = 656 211 AATGGACCTGTGATATCTGGATTCTGGGAAATT <<<<<<<<<<<;;<;<;<:69<<;<5-500373 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:75:946:1035 147 chr1 480 99 35M = 288 -227 AATGGACCTGTGATATCTGGATTCTGGGAAATTCT <<)4</<5<<<<<<<<<<<<<<<<<<<<<66<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:271:244:568 147 chr1 481 99 35M = 294 -222 ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT ;<<<<<<;<;<<<<<<<<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:129:477:427 99 chr1 481 99 35M = 652 206 ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT <<<<<<<<<<<<<<<<<<;;<<<<::<9<;<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:262:297:601 163 chr1 482 99 35M = 635 188 TGGACCTGTGATATCTGGATTCTGGGAAATTCTTC <<<<;<<9<<57<<7<<<;<<;77-;;53<<;;<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:88:24:744 83 chr1 484 84 35M = 325 -194 GTCCTGTGATATCTGGATTCTGGGAAATTCTTCAT 4%++88;-9<;<<<+8<<<:<;8:<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--B7_610:5:147:68:353 83 chr1 486 99 35M = 299 -222 CCTTTGATATCTGGATTCTGGGAAATTCTTCATCC <<;;<<<<<<<<+;<<;<<0;<<<<;<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS51_78:7:316:961:576 99 chr1 488 65 35M = 666 213 TGTGATATCTGGATTCTGGGAAATTCTTCATCCCG <<<<<<<;<<<<;<<:<<;<;<<:;<9+34;;6%/ MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_61:8:7:171:402 99 chr1 489 99 35M = 682 228 GTGATATCTGGATTCTGGGAAATTCTTCATCCTGG <<<<<<<<<<<<<<<;/<<<<;<<<<<;<<1<<<4 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:277:458:330 83 chr1 490 99 36M = 329 -197 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGAC <<<<<8;<<<1<;7<<<;<<<<<<<<7<<7<<<<;7 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:269:280:716 147 chr1 490 99 35M = 323 -202 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA 6;<;;6:;<<<;64;<<<<<<<<;<<;<<;<<<<< MF:i:18 Aq:i:58 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:72:63:435 147 chr1 490 99 35M = 293 -232 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA ::<;<<<<;;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:46:900:610 99 chr1 491 99 35M = 684 228 GATATCTGGATTCTGGGAAATTCTTCATCCTGGAC <<<<<<<<<<<<;<<<<<<<<<<<<<<<<<;;4;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:467:475 99 chr1 493 99 35M = 683 225 TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC <<<<<<<<<<<<;;;<<<<<<<<<:<<<<:+<<;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:201:959:19 99 chr1 493 99 35M = 681 223 TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC <<<<<<<<<<<<<<;<<<:<;<<;<<;+;+<3494 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:240:593:842 99 chr1 494 99 35M = 660 201 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT ============<================9===:= MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:29:381:169 163 chr1 494 99 35M = 641 182 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT <<<<<<<<<<<2<288;<<;<<:4<:<<;&92929 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:199:327:965 83 chr1 494 91 35M = 297 -232 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT <5<:<<<58<:<<<<<<8<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:87:323:895 99 chr1 494 99 35M = 671 212 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT ;<<;;;;<<;<959;;;<;:<<;9<;;;4377788 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:327:991:508 147 chr1 495 99 35M = 312 -218 TCTGGATTCTGGGAAATTCTTCATCCTGGACCCTG 0:;::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:6:882:784 163 chr1 496 99 35M = 686 225 CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGA <<<<<<<<<<<<<:<<<<<<<<<<<<:6::::<,2 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:175:705:982 99 chr1 496 89 36M = 660 200 CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG <<<<;<<;<<<<<<<<<<<<<;<<+<:;39;+<40< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:30:92:753 99 chr1 497 99 35M = 673 211 TGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:245:323:744 163 chr1 499 99 35M = 679 215 GATTCTGGGAAATTCTTCATCCTGGACCCTGAGAG <;<<<<<<<<<<<<<<<<<<<<<;<+<<<<<<<4< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:76:786:458 83 chr1 502 99 35M = 341 -196 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT ;<;:7<.<<<<<8;<<<<<<<6<;8<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:185:213:330 83 chr1 502 99 35M = 328 -209 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT ;4<<<;<<<<<<<<;<<;;;<<<<9<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:42:1091:1726 147 chr1 502 99 35M = 334 -203 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT 4443838<4<8<87<<3</8<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:12:158:458 99 chr1 503 84 36M = 675 208 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT <77<<<7<<<<<<<<<<<<5<4;<<;5<;;+2<+;; MF:i:18 Aq:i:15 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:277:590:364 163 chr1 503 99 35M = 681 213 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC <<<<<8<<<<<<<<;<<<<<;;<7<<;;7858;;8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:18:1418:237 147 chr1 503 99 35M = 304 -234 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC <<:<<<<<<<<:<<<<<<<<<:<<<<<<<<<<<<: MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:4:262:456:74 147 chr1 504 99 35M = 357 -182 TGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT 862;<<<:;<;<<<;;;<<<<;;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:186:989:869 99 chr1 505 99 34M = 655 185 GGGAAATTCTTCATCCTGGACCCTGAGAGATTCT <<<<<<<<<<<<<<<<<<<<7;:<<<<<<<<<$< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:80:885:513 83 chr1 507 99 35M = 344 -198 GAAATTCTTCATCCTGGACCCTGAGAGATTCTGCA <7<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:311:100:539 83 chr1 508 99 35M = 353 -190 AAATTCTTCATCCTGGACCCTGAGAGATTCTGCAG ;<;<<;;<;<<;<<<<<;9<<<;<<<<<<<<9<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:199:511:426 163 chr1 509 99 35M = 669 195 AATTCTTCATCCTGGACCCTGAGAGATTCTGCAGC <<<<<<<<<<<<<<;<<<<<<:<<<<<<<<<;:<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:26:227:1053 99 chr1 510 99 35M = 663 188 ATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:172:622:707 99 chr1 511 99 35M = 685 209 TTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCC <<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<5:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:157:935:374 147 chr1 512 99 35M = 353 -194 TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCA 94988994.<:<+42::<<<<<:<:<4<<<<;<1< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:103:111:720 147 chr1 512 99 36M = 353 -195 TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG ;4<<<;)<<-<9<;<<7<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:328:669:662 147 chr1 512 99 35M = 337 -210 TCTTCATCCTGTACCCTGAGAGATTCTGCAGCCCA 4<<;<<8<.<88.<<;4<<<<<<<4<.<<<<7<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS51_64:5:202:39:380 147 chr1 513 99 35M = 334 -214 CTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG /92/;2<+2<<<<64<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:66:655:769 147 chr1 515 99 35M = 348 -202 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT 8<<;:69<;:;9<2<*9<;6<<<<<17<;<3+<;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:7:526:343 99 chr1 515 99 35M = 698 218 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT <<<<<<<<<<<<<<<:<<<5<<<<<<5;<<<+8<; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:33:672:473 147 chr1 515 99 35M = 330 -220 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT 5<70<<55<4<24.5<<<<<<<<<6<<<<<<2<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:72:308:839 83 chr1 517 99 40M = 354 -203 ATCGTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT :8:.:<;<<5<<<<<<<<<<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:2 UQ:i:40 H0:i:0 H1:i:1
--EAS56_61:1:210:880:606 83 chr1 518 99 35M = 341 -212 TCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCA .<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:80:760:490 99 chr1 520 99 34M = 686 201 CTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAG <<<<<<<<<<8<;<7<<<<<<;<;;<2<;<<<1, MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:34:970:1374 147 chr1 520 99 35M = 363 -192 CTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGA <6<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:1:200:559:765 147 chr1 521 99 36M = 337 -220 TGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT 8<;;4<3;<;<<<<<<5<<;;<<98;;<<<<;<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_53:8:28:701:724 83 chr1 521 99 35M = 347 -209 TGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGAT .;..3;8.8<8;<<;9<9<<<7;<<<<<<<<7<<7 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:318:345:156 163 chr1 522 99 35M = 695 208 GGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT <<<<<<<<:<<<<<<<<5<:5<<<3:'<72')*;9 MF:i:18 Aq:i:39 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--B7_595:1:81:1000:375 83 chr1 524 90 35M = 329 -230 ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGC ;8<;+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:13:1155:631 163 chr1 524 99 40M = 668 184 ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTG <<<<<<;<<;<<<<<<;<<<<<9<;<;94<<%<<<7:777 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:257:611:440 147 chr1 524 99 35M = 341 -218 ACCCTGAGAGATTCTGCAGCCCAGATCCAGATTGC 2<;;8<;;<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:6:129:694:359 83 chr1 525 88 35M = 350 -210 CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT 7777<7<7;77+<3<<;<<;<<<<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:6:11:285:1567 163 chr1 525 99 35M = 685 195 CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:1:196:533:921 147 chr1 526 99 35M = 361 -200 CCTGAGAGATTCTGCAGCCCAGATCCAGATTGCTT 7<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:2:6:251:1557 163 chr1 526 99 35M = 700 209 CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:20:492:850 99 chr1 526 78 35M = 694 203 CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT <7<<<<<<<<<<<.<54<7&<<<7<74<2<<<2<< MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:231:339:551 83 chr1 527 99 35M = 350 -212 CTGAGAGATTCTGCAGCCCAGATCCAGATTGCTTG <;<<;<<<<<<<<<<;:<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:4:68:1122:79 99 chr1 528 99 40M = 687 199 TGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCT <<<<<<<<<<<<<;<<<<;<<<<<<;<<<4;<<4;99::; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:87:1375:1303 83 chr1 529 99 35M = 340 -224 GAGAGATTCTGCAGCCCAGATCCAGATTGCTTGTG :<;<(<<<<<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS220_1:8:46:485:482 147 chr1 530 94 35M = 371 -194 AGAGATTCTGCAGCCCAGATCCAGATTGCTTGTGG <<<<<::<<<<<<<<6<<<<<<<<<6<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_4:7:90:1873:89 147 chr1 531 99 35M = 344 -222 GAGATTCTGCAGCCCAGATCCAGATTGCTTGTGGT <<<<;49<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:5:238:31:968 99 chr1 534 99 35M = 717 218 ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTG 9======8====*=====,=1=======<=7:::, MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:78:773:660 163 chr1 534 99 36M = 711 213 ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGA <<<<<<<<;<<<<<<<<<8<8<<;<<<;<<;7<<4: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:90:828:633 83 chr1 537 99 36M = 381 -192 CTGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG <<<;<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_30:2:272:750:698 83 chr1 538 80 35M = 365 -208 TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG 0<;8;64;<<<;<;.<+;:<4;4<;<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:3:88:1656:896 147 chr1 538 99 40M = 387 -191 TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCTGC 6/8::*9/*3*'<88<:9*<<<8<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_61:6:126:541:194 163 chr1 540 97 35M = 730 225 CAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGC <<<<<<<<8<<<<<8<<<<<<<<<8<<<428+<80 MF:i:18 Aq:i:43 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS114_28:4:9:55:730 163 chr1 540 99 36M = 722 218 CAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT >>=>>+==>>==<==<=8=><:;8/;7</5724-2; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:278:918:892 99 chr1 541 99 35M = 720 214 AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT =============:====================8 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:243:876:758 99 chr1 541 99 35M = 712 206 AGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;78<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_65:5:121:380:656 147 chr1 542 99 35M = 362 -215 GCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTG :;<<;<<1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:82:164:1924 83 chr1 542 99 35M = 378 -199 GCCCAGCACCAGATTGCTTGTGGTCTGACAGGCTG 6<<<<<<-<<<<<<<<<2<<06<9<<<<<1<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS114_30:6:163:312:891 99 chr1 543 99 35M = 709 201 CCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGC <<<<<<<<<;<<<<<<<<<<<<<<<<:;;<;;<;0 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:124:243:35 147 chr1 544 60 35M = 364 -215 GCATATCCAGATTGCTGGTGGTCTGACAGGCAGCA &+<+;<694;+&99<<2<;423<26<-<<<<,<3< MF:i:130 Aq:i:60 NM:i:2 UQ:i:28 H0:i:0 H1:i:0
--B7_591:1:191:462:705 99 chr1 545 99 36M = 721 212 CAGATCCAGATTGCTTGTGGTCTGACAGGCTGCAAC <<<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<::<6 MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:8:95:426:791 147 chr1 547 99 35M = 359 -223 GNTCCAGATTGCTTGTGGTCTGACAGGCTGCAACT !!!!<<<<<;;<<<<;<<;<;;<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:23 H0:i:1 H1:i:0
--EAS218_4:5:41:118:1246 147 chr1 548 99 35M = 374 -209 CTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTG <<<<<<<<<<<<<<<+<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:27:973:518 99 chr1 549 99 35M = 691 177 TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT <<<<<<<<<<<<<<;<<<<7<<<<<<<<88;0:8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:4:679:110 99 chr1 549 99 35M = 705 191 TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT <<<<<<<<<<<<<<<<<<<;<<<<<<<<::<;;:7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:297:283:948 163 chr1 550 99 35M = 727 212 CCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTG <<<<<<<<<<<<<<<<<<<<<<<:<<9;)+1;19- MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:61:1797:113 147 chr1 551 99 35M = 380 -206 CAGATAGCTTGTGGTCTGACAGGCTGCAACTGTGA <<0<<&<<<<;<<4;;3<;<:<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS188_7:6:205:873:464 99 chr1 552 99 35M = 743 226 AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG <<<<<<<<<7<<<<<<<<<<<<:<<,:<:<<<<:: MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:33:1168:1762 99 chr1 552 99 35M = 728 211 AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG <<<<<<<<<<<<<<<<;<<;<;<<<<<<<<:;2:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:78:909:394 83 chr1 554 81 35M = 373 -216 ATTGCTTGGTGTCTGACAGGCTGCAACTGTGAGCC 6167&+&&/&//734/3<<<9*<;;3<3<;9<<3< MF:i:18 Aq:i:21 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--EAS1_103:2:226:302:758 163 chr1 556 99 35M = 751 230 TGCTTGTGGTCTGACAGGCTGCAACTTTGAGCGNT <<<<<<<;;;,<;<92;66<;))42<&2&(/1!!! MF:i:18 Aq:i:33 NM:i:2 UQ:i:9 H0:i:0 H1:i:1
--EAS114_28:5:206:671:49 163 chr1 557 99 36M = 719 198 GCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCA <<<<<<;<<<<8<<<;;<<<3<<8<8<35+,55;,3 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:165:431:857 147 chr1 559 99 35M = 406 -188 TTGGGGTCTGACAGGCTGCAACTGTGAGCCATCAC ''7'/;'1%0447<<<*<6<<<*<*<<<<6<<<<< MF:i:18 Aq:i:53 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS114_39:5:50:972:1286 83 chr1 559 99 35M = 377 -217 TTGTGGTCTGACAGGCTGCAACTGTGAGCCATCAC :;;7;7;;0<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:288:552:440 163 chr1 560 87 35M = 747 222 TGTGGTCTGACAGGCTGCAACTGTGAGCCTTCCAT <<<<71<77<<<:<<<&<4<<77<16<88&36+%% MF:i:18 Aq:i:26 NM:i:4 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:8:78:1478:1446 147 chr1 560 99 35M = 389 -206 TGTGGTCTGACAGGCTGCAACTGTGAGCCATCACA <8,8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:275:851:240 99 chr1 561 99 35M = 743 217 GTGGTCTGACAGGCTGCAACTGTGAGCCATCACAA <<<<<<<<<<<<<<<<<<<<<<<:<<4<7<<<<<< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:185:312:167 83 chr1 562 99 35M = 401 -196 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<8:<8<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:1:119:446:185 83 chr1 562 99 35M = 372 -225 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +70730;<0<77;;<<<<<9<<<<<<9<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:3:168:741:680 83 chr1 562 99 35M = 394 -203 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<5<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:67:1797:1931 99 chr1 562 99 35M = 750 223 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:228:182:717 99 chr1 563 99 35M = 729 201 GGTCTGACAGGCTGCAACTGTGAGCCATCCCCATG <=9============5==5=<,59<=1=<&;&;;7 MF:i:18 Aq:i:66 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS112_34:7:118:523:591 83 chr1 563 99 35M = 393 -205 GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG 4:--&0:67<<8:<<<<<<<<<<<:4<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:29:1061:574 83 chr1 563 99 35M = 363 -235 GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG <87<5<<9<<<66<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:168:69:605 83 chr1 565 67 36M = 373 -228 TCTGACAGGCGGCAACTGTGAGCCATCACAATGAAC '<'<144<0<&<<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS221_3:4:90:247:212 99 chr1 567 99 35M = 733 201 TGACAGGCTGCAACTGTGAGCCATCACAATGAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<8< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:140:522:212 83 chr1 568 99 35M = 399 -204 GACAGGCTGCAACTGTGAGCCATCACAATGAACAA :;8;:::<<:<<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:179:13:782 83 chr1 568 99 35M = 412 -191 GACAGTCTACAACTGTGAGCCATCACAATGAACAA &37.3&;3'*<3<;9<9<<5<<<<<<<<<9<<<<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS114_45:3:75:217:337 83 chr1 568 99 35M = 386 -217 GACAGGCTGCAACTGTGAGCCATCACAATGAACAA 4779797;;;<;:4;;<<<77<;;;7<<;<;<;<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:168:528:288 163 chr1 570 99 35M = 740 205 CAGGCTGCAACTGTGAGCCATCACAATGAACAACA <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<;<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:162:503:769 147 chr1 571 99 35M = 392 -214 AGGCTGCAACTGTGAGCCATCACAATGAACAACAG ;:;1;=8=;:+=====;&==7============== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:163:618:570 163 chr1 571 99 35M = 751 215 AGGCTGCAACTGTGAGCCATCACAATGAACAACAG <<<<<<<8<<<<<<<<<<<<<+<.7<<..<;&;8; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:251:121:479 163 chr1 572 99 35M = 750 213 GGCTGCAACTGTGAGCCATCACAATGAACAACAGG <<<<<<<<<<<;:<<<<;:;:<:<;:188;7:<+( MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:44:1578:1674 147 chr1 573 99 35M = 418 -190 GCTGCAACTGTGAGCCATCACAATGAACAACAGGA 62631;;4;;;8;;48;;7;8;;;;;;;;;8;;;; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:263:74:407 163 chr1 574 99 35M = 754 215 CTGCAACTGTGAGCCATCACAATGAACAACAGGAA <<<<2<<<<<<:<<<9<<4<<<<:<<<<9<999.7 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:254:32:275 147 chr1 575 99 35M = 382 -228 TGCAACTGTGAGCCATCACAATGAACAACAGGAAG (6+<;+6:9<<:7:<95<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:82:879:246 83 chr1 576 99 35M = 391 -220 ACAACTGTGAGCCATCACAATGAACAACAGGAAGA %+=661;&===:&==1<5======1========== MF:i:18 Aq:i:43 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_71:4:165:397:25 163 chr1 576 99 35M = 759 217 GCAACTGTGAGCCATCACAATGAACAACAGGAAGA <<7<<<<<<)97<6<:3:60:3+37-37+<:33:3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:148:776:486 163 chr1 578 99 35M = 755 212 AACTGTGAGCCATCACAATGAACAACAGGAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:59:1576:946 99 chr1 578 99 35M = 761 218 AACTGTGAGCCATCACAATGAACAACAGGAAGAAA <:<<<<<<<<<<<<:<:<<<<<<<8<<::1<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:61:433:385 83 chr1 579 99 35M = 381 -233 ACTGTGAGCCATCACAATGAACAACAGGAAGAAAA <*97<<<<&9<<;<&<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:37:761:635 147 chr1 581 99 35M = 418 -198 TGTGAGCCATCACAATGAACAACAGGAAGAAAAGG +37:<088<+<<;<<;<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:178:192:499 163 chr1 582 99 35M = 768 221 GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT <<<<<<<;<1<<<<<<;<<;6<<3666;;;;;/6/ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:93:945:176 99 chr1 582 99 35M = 745 198 GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT <<<<<<<<<<<<<<<<<<<<<;<<<<;;<;:7;<3 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:216:988:883 83 chr1 584 99 35M = 392 -227 AAGCCAACACAATGAACAACAGGAAGAAAAGGTCT (=/1+=&:=&======<==<=============== MF:i:18 Aq:i:68 NM:i:2 UQ:i:12 H0:i:1 H1:i:0
--EAS114_39:1:12:884:219 99 chr1 584 99 35M = 756 207 GAGCCATCACAATGAACAACAGGAAGAAAAGGTCT <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<5:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:61:628:681 163 chr1 586 99 36M = 746 196 GCCATCACAATGAACAACAGGAAGAAAAGGTCTTTC <<<<<<<<<<<<<<<<<<<;<<<<<<<:<<;;;;;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:91:360:585 147 chr1 586 99 35M = 430 -191 GACATCACAATGAACAACAGGAAGAAAAGGTCTTT 5&&<<3:;<<<<<<)<<3<<<<<<<;;<<<<;<<< MF:i:18 Aq:i:67 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS139_11:6:89:1151:1878 99 chr1 587 99 35M = 757 205 CCATCACAATGAACAACAGGAAGAAAAGGTCTTTC <;;<<<<<;;;<<<<4;;::;<;8;;<;;8:<8<4 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:40:1596:1433 99 chr1 587 99 40M = 756 209 CCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG <<<<<<<<<<<<<<<<<<<<<<<<;<<<<1<<<<<::;:: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:4:1620:413 99 chr1 588 99 35M = 768 215 CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA <<<<<<<<<<6<<<6<<<;<6<9-1<;<&66<<<2 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:65:1928:1125 99 chr1 588 99 35M = 784 231 CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA <<;<<<7<<7<;<7<<<<<<<7<<<<;<.-;<+88 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:123:998:248 163 chr1 589 99 35M = 776 222 ATCACAATGAACAACAGGAAGAAAAGGTCTTTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;9<<<68< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:240:603:890 163 chr1 590 99 36M = 740 186 TCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA <<<<<<<<<<<<<<<<<<;<:<<:<<;<<<<<8865 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:20:762:748 163 chr1 591 99 35M = 777 221 CACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:246:313:499 99 chr1 592 99 35M = 757 200 ACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG <<<<<<<<<<<<<;<;<<<<<<<<;<<<<<;;<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:6:7:858:437 99 chr1 593 99 35M = 773 215 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG <<<<<<<<<<<<<<<<<<<<<;<3<<<<<<<<<33 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:150:933:810 163 chr1 593 99 35M = 755 197 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG =================================== MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:204:264:413 147 chr1 593 96 35M = 415 -213 CAATGAACAACAGAAAGAAAAGTTCTTTCAAAAGG 1==(4=::;/7::&===;====/=;===;;===== MF:i:18 Aq:i:27 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--EAS139_11:3:65:556:1505 163 chr1 593 99 35M = 790 232 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:62:386:959 99 chr1 594 99 35M = 752 193 AATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGT <<8<<<<;<<<<-<<87;</<;<+<;5<+;;<3;+ MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:134:868:252 147 chr1 595 99 36M = 404 -227 ATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGA <;<<<8<<<<<<<<<<<<<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:252:19:955 99 chr1 596 84 35M = 771 210 TGAACAAAAGGAAGAAAAGGTCTTTCAAAAGGTGA <<<<<<<<<<4<<<<9<<+9)9<<4:9+<<0<909 MF:i:18 Aq:i:41 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_67:4:145:607:216 83 chr1 596 99 35M = 437 -194 TGAAAAACAGGAAGAAAAGGTCTTTCAAAAGGTGA /;<<&<<8<<<<<<<<<<<<<;872<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_65:8:140:924:923 163 chr1 597 99 35M = 767 205 GAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGAT <<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<5;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:120:63:653 147 chr1 598 99 35M = 420 -213 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:204:779:181 163 chr1 598 99 35M = 779 216 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<<<<<5<<:<<<<<8<<,<<<<<<<<<<91<91< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:325:150:465 147 chr1 598 99 35M = 412 -221 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<:<<<<<<<<;<:<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:57:722:347 83 chr1 599 99 35M = 439 -195 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:266:842 163 chr1 599 99 35M = 784 220 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT =====)===========8=====7882855355'5 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:183:852:253 163 chr1 599 99 35M = 773 209 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<;;<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:30:887:404 163 chr1 600 99 35M = 789 224 CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG <<<<<<<<<<;<<<<<<<<<<<<<<<<:(<<<7;7 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:101:572:491 147 chr1 600 99 35M = 425 -210 CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG 8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:73:730:487 99 chr1 604 99 35M = 770 201 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT <<<<<<<<<<<<<<<<<<<9<<<<<<:<<<;<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:172:896:83 99 chr1 604 99 34M = 786 217 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGT <<<<<<<<<<<<<<<<<:;;+;<<<<<<<<9;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:154:762:630 163 chr1 604 99 35M = 792 223 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:99:756:130 163 chr1 606 99 35M = 798 227 GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:11:360:1577 99 chr1 606 99 35M = 781 210 GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT <<<<<<<<<<<<<<<<<4<;;<<;;<;<<<8<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:27:1881:486 83 chr1 607 99 35M = 427 -215 AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC 99797;;9:<:;;;<;;;;<<<;;;;<;<;;<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:5:497:687 99 chr1 607 99 35M = 789 217 AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:142:63:937 163 chr1 609 99 36M = 777 204 GAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC <<<<<<<<<<<<<<<<<:<<<<<<<<<;<<:<<:<: MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:36:485:632 163 chr1 610 99 36M = 784 210 AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<;<18; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:8:36:927:478 99 chr1 610 99 35M = 798 223 AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC <<<<<<<<<<<<<<<<;<<<<<:<:<<<<8<9;<8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:169:862:829 163 chr1 611 99 35M = 772 195 AAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA <<<<<<<<<<<<<<<<<;<<<;<;<<<<:<;;<78 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:63:424:1643 163 chr1 614 99 35M = 798 219 GGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACC ;;<<<<<<;<<<<<<<<<<5;9;<<<<<<<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:20:41:138 99 chr1 615 99 35M = 774 194 GTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCT <<<<<<<<<<<<<<<<<<<<<<<<7<;<<<<<(<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:49:163:904 83 chr1 616 99 35M = 450 -201 TCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTC 79779<<<<<;;;;9;;<<7<;*9<<<7<<;<<;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:135:543:760 99 chr1 619 99 35M = 787 203 TTCAAAAGGTGATGTGTGTTCTCATCAACCTCATA <<<<;;<;<<<<<<<9<<<<<<<<<<<;<<<<5<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:131:742:561 163 chr1 620 99 35M = 790 205 TCAAAAGGTGATGTGTGTTCTCATCAACCTCATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:120:14:944 83 chr1 621 99 35M = 428 -228 CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA :;<<;<;<;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:82:566:1096 147 chr1 621 99 35M = 446 -210 CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA <<<<<<<<<<:<<<<<<<:<<<<<<:<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:14:601:624 83 chr1 622 99 35M = 446 -211 AAAAGGTGATGTGTGTTCTCATCAACCTCATACAC 1;;;;==5===.(=9=5=========8====;=== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:5:538:401 99 chr1 624 99 40M = 788 204 AAGGTGATGTGTGTTCTCATCAACCTCATACACACACATG <<<<;<<<<<<<<<<<<<<<;<::7<<;<53:<98;;;;; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:16:1081:1894 83 chr1 624 99 35M = 431 -228 AAGGTGATGTGTGTTCTCATCAACCTCATACACAC ;5;;&<;<<<<<<<<;<;<<;<<<;<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:3:1377:1663 147 chr1 626 99 35M = 446 -215 GGTGATGTGTGTTCTCATCAACCTCATACACACAC 6-88663;8;81;;66;8;;89939;;;67;2;;; MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:253:285:104 83 chr1 627 99 35M = 451 -211 GTGATGTGTGTTCTCATCAACCTCATACACACACA 2<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:66:1282:1215 99 chr1 627 99 35M = 794 202 GTGATGTGTGTTCTCATCAACCTCATACACACACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:2:1200:1076 163 chr1 629 99 35M = 786 192 GATGTGTGTTCTCATCAACCTCATACACACACATG ;;;;;;;;;;/;;;;;;;;6;;9;489;;;88888 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:194:688:289 99 chr1 631 99 35M = 795 199 TGTGTGTTCTCATCAACCTCATACACACACATGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<:; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:19:855:491 99 chr1 631 99 35M = 783 187 TGTGTGTTCTCATCAACCTCATACACACACATGGT <<<<<<<<<<<;<<.:<<<<;;;<4<:<:<7<;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:215:133:909 99 chr1 631 99 34M = 789 193 TGTGTGTTCTCATCAACCTCATACACACACATGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<996( MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:35:378:681 99 chr1 632 99 35M = 812 215 GTGTGTTCTCATCAACCTCATACACACACATGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:40:758:116 163 chr1 632 99 40M = 814 222 GTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:7262 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:2:831:692 147 chr1 634 99 35M = 462 -207 GTGTTCTCATCAACCTCATACACACACATGGTTTA 2749'979<9<<<6;<<<0<;<<<<<3<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:162:594:858 99 chr1 634 99 35M = 818 219 GTGTTCTCATCAACCTCATACACACACATGGTTTA <<<<<<<<<<<<<<<<<9<;<<<<<<<<<<3<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:233:478:792 99 chr1 634 99 35M = 791 192 GTGTTCTCATCAACCTCATACACACACATGGTTTA <<<<<<<<<<<<<<<<<<<+<<<<<<<9<<<+;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:262:297:601 83 chr1 635 99 35M = 482 -188 TGTTCTCATCAACCTCATACACACACATGGTTTAG ;;<26;;;<;<7;<<<<<99<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:45:1769:1130 83 chr1 635 99 35M = 476 -194 TGTTCTCATCAACCTCATACACACACATGGTTTAG 88989;<;97;9<<;<;;;;9<98<<<<<<<;<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:153:977:200 83 chr1 640 99 35M = 472 -203 TCATCAACCTCATACACACACATGGTTTAGGGGTA 1:<83<<9;;9<<9;;<<;<<;;;;<;;<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:60:837:923 83 chr1 641 61 36M = 457 -220 CATCAACCGCATACACTCACATGGTTTAGGGGTATA 0<4<<<02.<99+<+&!<<<<+<<<<<<<<<<<<3< MF:i:18 Aq:i:24 NM:i:2 UQ:i:13 H0:i:0 H1:i:0
--EAS51_66:3:29:381:169 83 chr1 641 99 35M = 494 -182 CATCAACCTCATACACACACATGGTTTAGGGGTAT 2<82<;66<:<;<:<;<;<8<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:96:836:737 99 chr1 642 99 35M = 841 234 ATCAACCTCATACACACACATGGTTTAGGGGTATA <<<<<<71<<<<<<<<<<899<:5<<<96858<<. MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:228:354:203 147 chr1 643 99 35M = 480 -198 TCAACCTCATACACACACATGGTTTAGGGGTATAA %1<851<5<<<982<<<<<<<<::<<<<7<<<<3< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:151:159:43 147 chr1 645 99 35M = 452 -228 AACCTCATACACACACATGGTTTAGGGGTATAATA ;;4;6<<;<<<<7<77<6;<6<<<<<;;<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:182:404:693 163 chr1 646 99 35M = 812 201 ACCTCATACACACACATGGTTTAGGGGTATAATAC <<<<<<<<<<<<<<<<<<<<<<:::<6<;<94;77 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:4:841:339 163 chr1 646 99 35M = 793 182 ACCTCATACACACACATGGTTTAGGGGTATAATAC <<<<<<<<<<<<<<<<<;<7<<&;;<5<+<;7<<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:156:857:494 163 chr1 648 99 35M = 838 225 CTCATACACACACATGGTTTAGGGGTATAATACCT <<<<<<<<<<<<<<<<<6<<<<<<<<<<<<<<:<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:165:464:123 99 chr1 650 99 35M = 814 199 CATACACACACATGGTTTAGGGGTATAATACCTCT ===============7==============8==== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:1:115:868:887 83 chr1 650 99 35M = 452 -233 CATACACACACATGGTTTAGGGGTATAATACCTCT ==;==8=;=;========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:134:751:831 147 chr1 651 99 36M = 465 -222 ATACACACACATGGTTTAGGGGTATAATACCTCTAC ;:<4<8<<<;<;<<5<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:192:716:235 163 chr1 651 99 35M = 798 182 ATACACACACATGGTTTAGGGGTATAATACCTCTA ======================9==:<==:;;69; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:40:594:752 99 chr1 651 99 35M = 831 215 ATACACACACATGGTTTAGGGGTATAATACCTCTA <<<<<<<<<<;<<<;<<<::;<:;<;:<;;;<;<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:184:17:636 121 chr1 652 76 35M = 652 0 TACACACACATGGTTTAGGGGTATAATACCTCTAC 8<89<<:<<<;;;<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:184:17:636 181 chr1 652 0 * = 652 0 TTTTTTTTTTTTTTTTTTTTTTTTTTTTCACAGGT !!!!!!!!!!!!!!!!!!!!!!!!!!!77777777 MF:i:192
--EAS1_108:8:129:477:427 147 chr1 652 99 35M = 481 -206 TACACACACATGGTTTAGGGGTATAATACCTCTAC <<<9;<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:130:912:658 163 chr1 652 99 35M = 841 224 TACACACACATGGTTTAGGGGTATAATACCTCTAC <<<<<;<<<<<<;<<<<<<<<<<<<<<<<<7<;;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:85:401:1190 83 chr1 652 99 35M = 458 -229 TACACACACATGGTTTAGGGGTATAATACCTCTAC 64778:;69739:;+9::7;;;<;6<;7;;;;;7< MF:i:18 Aq:i:55 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:4:1502:1911 163 chr1 652 99 40M = 802 190 TACACACACATGGTTTAGGGGTATAATACCTCTACATGGC <<<:4<<<<<<;<<<<;9;5<95<;<<;9+;1612:1::: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:198:691:595 163 chr1 655 99 35M = 847 227 ACACACATGGTTTAGGGGTATAATACCTCTACATG ==============&===============;7;=1 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:186:989:869 147 chr1 655 99 35M = 505 -185 ACACACATGGTTTAGGGGTATAATACCTCTACATG ;<<;:<<<7:<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:38:856:336 147 chr1 656 99 35M = 480 -211 CACACATGGTTTAGGGGTATAATACCTCTACATGG 2;4;4<:;6:5:<<;:;<<;<<;<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:49:271:588 163 chr1 658 99 35M = 830 207 CACATGGTTTAGGGGTATAATACCTCTACATGGCT <<<<<<<<<<<<<<5:<<<<<<:<<<<<<<:7%9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:240:593:842 147 chr1 660 99 35M = 494 -201 CATGGTTTAGGGGTATAATACCTCTACATGGCTGA *<<<;<<6<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:175:705:982 147 chr1 660 89 36M = 496 -200 CATGGTTTAGGGGTATAATACCTCTACATGGCTGAT ')'''''')'''''*')*)'*)')))+,'*)+'*,! MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS221_3:6:26:227:1053 147 chr1 663 99 35M = 510 -188 GGTTTAGGGGTATAATACCTCTACATGGCTGATTA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:316:961:576 147 chr1 666 65 35M = 488 -213 TTACGGGTGTAATCTCTCTACATGGCTAATTATGA (++%%+++),+,+*++,+,,-,**+,-&-,+-+-- MF:i:130 Aq:i:65 NM:i:5 UQ:i:36 H0:i:0 H1:i:0
--EAS56_63:5:96:788:614 163 chr1 667 99 35M = 862 230 TAGGGGTATAATACCTCTACATGGCTGATTATGAA <<<<<<<<<<<<<<<<<<<<<<;6;<<;;<;;7;9 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:13:1155:631 83 chr1 668 99 40M = 524 -184 AGGGGTATAATACCTCTACATGGCTGATTATGAAAACAAT ;:398<<;<<<<<;<3<;;<<<<;;<<<<<<<<<<;<<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:199:511:426 83 chr1 669 99 35M = 509 -195 GGGGTATAATACCTCTACATGGCTGATTATGAAAA <:7:<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:124:241:608 99 chr1 670 99 35M = 856 221 GGGTATAATACCTCTACATGGCTGATTATGAAAAC <<<<<<<<<;<<<<<<<<<;;<<<;<<<<;;8;;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:59:396:359 147 chr1 670 99 35M = 474 -231 GGGTATAATACCTCTACATGGCTGATTATGAAAAC 28288;;;;;;;;;::;;;;:;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:87:323:895 147 chr1 671 99 35M = 494 -212 GGTATAATACCTCTACATGGCTGATTATGAAAACA 55777;;;939;9;;9;;;;9;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:28:708:463 147 chr1 672 99 36M = 477 -231 GTATAATACCTCTACATGGCTGATTATGAAAACAAT ;;<;<<====3=====5=================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:84:101:328 83 chr1 673 99 35M = 480 -228 TATAATACCTCTACATGGCTGATTATGAAAACAAT <<<<<<<<:<<<<<<<<<6<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:30:92:753 147 chr1 673 99 35M = 497 -211 TATAATACCTCTACATGGCTGATTATGAAAACAAT <<<<<<;<<<<<<:<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:8:88:90:59 73 chr1 674 37 35M = 674 0 ATAATACCTCTACATGTCTGATTATGAAAACAATG <<<<<<<4;7;<<<;;47;&9..1;6&4<755;1; MF:i:64 Aq:i:0 NM:i:1 UQ:i:19 H0:i:0 H1:i:1
--EAS112_32:8:88:90:59 133 chr1 674 0 * = 674 0 TGCACCTCCCTGTTCACCTAGATGCTAGGAGGACA =7595=92=72.=+5(:4=9092((.2&(&%07%. MF:i:192
--B7_593:1:12:158:458 147 chr1 675 84 36M = 503 -208 TAATAATGCTACATGGATGATTATGAAATCAATGTT ++++++$((+*+++++++++++++&+++++++++++ MF:i:18 Aq:i:15 NM:i:5 UQ:i:40 H0:i:0 H1:i:0
--B7_593:4:28:781:723 99 chr1 676 99 36M = 855 215 AATACCTCTACATGGCTGATTATGAAAACAATGTTC <<<<<<<<<7<<<;;<<;;<<;<5<4<7<;7<+:<9 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:27:856:401 163 chr1 679 99 35M = 871 227 ACCTCTACATGGCTGATTATGAAAACAATGTTCCC ======6===;2==;===;=+=92=;5+=&556:6 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:245:323:744 83 chr1 679 99 35M = 499 -215 ACCTCTACATGGCTGATTATGAAAACAATGTTCCC /.848299;&;9;9;=2.=7========;;===== MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:31:948:254 99 chr1 680 99 35M = 849 204 CCTCTACATGGCTGATTATGAAAACAATGTTCCCC <<<<<<<<<<<<<<<<<<<;<<<<<:<<8<;;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:277:590:364 83 chr1 681 99 35M = 503 -213 CTCTACATGGCTGATTATGAAAACAATGTTCCCCA :::<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:201:959:19 147 chr1 681 99 35M = 493 -223 CTCTACATGGCTGATTATTAAAACAATGTTCCCCA ;4;.9<:0&/<5<::<<9/.<<<<<<<<<<<<;<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS56_61:8:7:171:402 147 chr1 682 99 35M = 489 -228 TCTACATGGCTGATTATGAAAACAATGTTCCCCAG :086::::847:<7<<7<<<<<<;7<<;<<<<7<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:67:317:249 99 chr1 683 26 35M = 840 192 CTACATGGCTGATTATGAAATCTATGTTCCCCATA <<<<<<;<<<<;:;<<7;<<.<&3<;;<<(;;6.< MF:i:18 Aq:i:26 NM:i:3 UQ:i:31 H0:i:0 H1:i:0
--EAS51_64:4:189:467:475 147 chr1 683 99 35M = 493 -225 CTACATGGCTGATTATGAAAACAATGTTCCCCAGA *.;*;7<75<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:46:900:610 147 chr1 684 99 35M = 491 -228 TACATGGCTGATTATGAAAACAATGTTCCCCAGAT <;5<;<<<;<<<<<<;<<<<<<<<<<8<<<<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:232:351:909 99 chr1 685 80 36M = 843 194 ACATGGCTGATTATGAAATCAATGTTCCCCAGATGC <<<<<99<<<<<<99<7<'<9<<<6<<+<;7;<<&; MF:i:18 Aq:i:39 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS139_11:6:11:285:1567 83 chr1 685 99 35M = 525 -195 ACATGGCTGATTATGAAAACAATGTTCCCCAGATA <8<4<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:172:622:707 147 chr1 685 99 35M = 511 -209 ACATGGCTGATTATGAAAACAATGTTCCCCAGATA 92<3996;<<<<<<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:6:882:784 83 chr1 686 99 35M = 496 -225 CATGGCTGATTATGAAAACAATGTTCCCCAGATAC 4;7<;64<<:<<4<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:80:760:490 147 chr1 686 99 35M = 520 -201 CATGGCTGATTATGAAAACAATGTTCCCCAGATAC %::::+<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:68:1122:79 147 chr1 687 99 40M = 528 -199 ATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCC ::77*:1<<<<<<<<<<<<<<<:;<<<;<<<<<<8<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:264:988:663 99 chr1 688 99 35M = 875 222 TGGCTGATTATGAAAACAATGTTCCCCAGATACCA <<<<<<<<<<<1<4<<<4<<0<;<-<74*(<&51- MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:3:233:911 163 chr1 688 99 35M = 868 215 TGGCTGATTATGAAAACAATGTTCCCCAGATACCA <<<<<<<<<<<<<<<<<;<<<<<<<<<<;<;<<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:187:925:547 99 chr1 689 99 35M = 857 203 GGCTGATTATGAAAACAATGTTCCCAAGATACCAT 43<<<:9<;;;:7<<<<6<:<8<-4-/,81<(48: MF:i:18 Aq:i:37 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS56_65:5:75:637:650 163 chr1 691 99 35M = 868 212 CTGATTATGAAAACAATGTTCCCCAGATACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:27:973:518 147 chr1 691 99 35M = 549 -177 CTGATTATGAAAACAATGTTCCCCAGATACCATCC +<<<<<<9<<<<<<<<<<<;<;<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:20:492:850 147 chr1 694 10 35M = 526 -203 AGTATGAAAACAATGTTCCCCAGATGCCGTCCCGG :.5:+.;;&91:;79:766:1:9+6&:1&&:+:)) MF:i:18 Aq:i:10 NM:i:4 UQ:i:31 H0:i:0 H1:i:0
--EAS51_64:4:318:345:156 83 chr1 695 99 35M = 522 -208 TTATGAAAACAATGTTCCCCAGATACCATCCCTGT ;8<8<<<<<;<<:<<;<;77<<<<<;<<;<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:5:863:302 99 chr1 698 99 35M = 866 203 TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:7:526:343 147 chr1 698 99 35M = 515 -218 TGAAAACAGTGTTCCCCAGATACCATCCCTGTCTT (7:;;;<<;;;<1<1<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS114_26:2:73:513:102 99 chr1 698 99 35M = 868 205 TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT ===========================;======= MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:6:251:1557 83 chr1 700 99 35M = 526 -209 AAAACAATGTTCCCCAGATACCATCCCTGTCTTAC <<<<<<<<<<<<6:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:147:64:416 99 chr1 701 99 35M = 870 204 AAACAATGTCCCCCAGATACCATCCCTGTCTTACT <<<<<<<<<<<<<<<;<<<<<;<<<<;;:<;;;;; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_595:3:297:637:86 163 chr1 704 99 35M = 869 200 CAATGTTCCCCAGATACCATCCCTGTCTTACTTCC <<<<<<<<<<<<;+<+;<;<:<<<<<9<<957<;( MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:160:272:398 163 chr1 705 99 35M = 891 221 AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA 9<<<3<<<<<<<<<<<9<<;8<<<<;<+.;;89.. MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:4:679:110 147 chr1 705 99 35M = 549 -191 AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:163:312:891 147 chr1 709 99 35M = 543 -201 TTCCCCAGATACCGTCCCTGTCTTACTTCCAGCTC 0.<;;8<<<0<<<<<<<<<<6<<<<<<8<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_28:3:78:773:660 83 chr1 711 99 36M = 534 -213 CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC 7<;7<<<7;9<<8;<<<<<<;<<<<<<<<<<7<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:5:63:875:1339 163 chr1 711 99 35M = 879 203 CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCC <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:243:876:758 147 chr1 712 99 35M = 541 -206 CCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC 0%3<1;.70;3363;31;<<<<<<6<<<;<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:104:153:698 163 chr1 713 99 36M = 896 219 CCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAG ;<<<<<<;6<<<<<<<<<<;<<<<;<;;;<.<::50 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:86:498:373 163 chr1 716 99 35M = 894 213 GATACCATCCCTGTCTTACTTCCAGCTCACCAGAG <<<<<<<<<<<<<<<<<<<<<<<5:<<<:<;7+67 MF:i:18 Aq:i:69 NM:i:1 UQ:i:25 H0:i:1 H1:i:0
--EAS1_95:6:87:734:888 163 chr1 717 99 35M = 900 218 ATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG ===========;8=========;;=;====;;3(; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:238:31:968 147 chr1 717 99 35M = 534 -218 ACACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG =(.7=5%===9:7==+==77=============== MF:i:18 Aq:i:69 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS54_65:3:290:558:349 99 chr1 719 99 35M = 869 185 ACCATCCCTGTCTTACTTCCAGCTCCCCAGCGGGA <<<;<<;<;<188<<<8::<686+4:<<6:&3)*& MF:i:18 Aq:i:59 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_28:5:206:671:49 83 chr1 719 99 36M = 557 -198 ACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA ;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:278:918:892 147 chr1 720 99 35M = 541 -214 CCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA =6=3=<===&========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:191:462:705 147 chr1 721 99 36M = 545 -212 CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAG <<'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:9:55:730 83 chr1 722 99 36M = 540 -218 ATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGC <:<;;<6<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:45:462:455 163 chr1 723 99 35M = 874 186 TCCCTGTCTTACTTCCAGCTCCCCAGACGGAACGC <<<<<<8<<<;<;<<<;<<<<<<<6;8&:80;733 MF:i:18 Aq:i:43 NM:i:2 UQ:i:27 H0:i:0 H1:i:1
--EAS114_28:2:149:650:44 163 chr1 726 99 36M = 902 212 CTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC <<<<<<<<<<<<<<<<<<<<<<<<<;6<<;<<7<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:297:283:948 83 chr1 727 99 35M = 550 -212 TGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC 6;;3;6<<66<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:33:1168:1762 147 chr1 728 99 35M = 552 -211 GTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCA 79<9;3<<<4<<<97<;;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:228:182:717 147 chr1 729 99 35M = 563 -201 TCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAA 778;8;474<<<;2;;<2<<<<<<<<;<;;9<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:8:1351:1986 163 chr1 729 99 35M = 911 217 TCTTACTTCCAGATCCCCAGAGGGAAAGCTTTCAA <<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS51_64:4:163:31:455 163 chr1 730 99 35M = 886 191 CTTACTTCCAGCTCCCCAGAGGGACAGCTNNCAAC <+<<<<<<<;0+<<<<;06070-9(0(9<!!5)05 MF:i:18 Aq:i:31 NM:i:3 UQ:i:7 H0:i:0 H1:i:1
--EAS54_61:6:126:541:194 83 chr1 730 97 35M = 540 -225 AGTACGACCAGCTCCCCAGAGGGAAAGCTTTCAAC +%&:/+(46=47&71/2==;=;8====28212=== MF:i:18 Aq:i:43 NM:i:4 UQ:i:40 H0:i:1 H1:i:0
--EAS51_62:7:178:286:414 163 chr1 731 99 35M = 907 211 TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG <<<<<<<<<<<<<<<<8<<<<<<<<<1<<<1;998 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:35:361:546 163 chr1 731 99 35M = 892 196 TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG <<<<<<<<<<<<<<<<;<5<<<<<;<2<<<:<8<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:90:247:212 147 chr1 733 99 35M = 567 -201 ACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCT 7655:;87;<;;;8<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:149:354:667 99 chr1 734 99 35M = 888 189 CTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTT <<<<<<<<<<<<<<<<<<<><<<<<<<<;<:<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:240:603:890 83 chr1 740 99 36M = 590 -186 GCTCCCAAGAGGGAAAGCTTTCAACGCTTCTAGCCA ;+&+//&<<<<<<<<<<9<<<8<<<<9<<<<<<<<< MF:i:18 Aq:i:66 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_591:7:129:956:115 163 chr1 740 99 36M = 927 223 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;877- MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:168:528:288 83 chr1 740 99 35M = 570 -205 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCC 8<%<31;<<;<;<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:275:851:240 147 chr1 743 99 35M = 561 -217 CCCCAGAGGGAAAGCTTTCAACGTTTCTAGCCATT 66614/&3616630666&66666&66666868666 MF:i:18 Aq:i:31 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS188_7:6:205:873:464 147 chr1 743 99 35M = 552 -226 CCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATT <-((+:+;289<--;<;-;<:;;<<<;;<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:37:610:260 163 chr1 745 99 35M = 913 203 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC <<<;<;<<7<<<<<<<<<<<<<<;6<963;;;3;1 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:93:945:176 147 chr1 745 99 35M = 582 -198 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC 6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:61:628:681 83 chr1 746 99 36M = 586 -196 CAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTT 95<<<<<<<<;<<<<;<<<:<<;;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:288:552:440 83 chr1 747 87 35M = 560 -222 AGAGGGAACGCTTTCAACTCTTCTAGCCATTTCTT 9<<%'%<<.2<<<<<<<<5:<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:2 UQ:i:33 H0:i:0 H1:i:0
--EAS56_53:2:170:265:818 163 chr1 748 10 35M = 920 207 GAGGGGAAGCTTTCAACGCTTCTAGCACTTTCTTT <<<<<(5/959<8.<9<8<<<2<&59&&:22:8+( MF:i:18 Aq:i:10 NM:i:3 UQ:i:17 H0:i:0 H1:i:0
--B7_595:2:251:121:479 83 chr1 750 99 35M = 572 -213 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<6'..663;&<<;<<9<<<9<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:67:1797:1931 147 chr1 750 99 35M = 562 -223 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:226:302:758 83 chr1 751 99 35M = 556 -230 GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG ;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:163:618:570 83 chr1 751 99 35M = 571 -215 GGAAAGCTGTCAACGCTTCTAGCCATTTCTTTTGG <9774<88&:8<:8<8:8<8<<<<<;88<88<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_97:3:73:292:429 99 chr1 752 99 35M = 920 203 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTTGC <<<<<<<<<<7<<;<<<<<<<2<<<5<<<<<:%)< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_108:3:82:356:253 99 chr1 752 99 35M = 927 210 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC ===================<========;===39= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:62:386:959 147 chr1 752 99 35M = 594 -193 AAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC %;71131((<<6<92(+<1<<;<-3<8<<;<;;<< MF:i:18 Aq:i:57 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_62:3:263:74:407 83 chr1 754 99 35M = 574 -215 AAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCAT ;;88<::+;<)<5<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:67:620:344 99 chr1 755 99 35M = 905 185 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT <<<<2<:2<<<<<<7<<<<:<<*<<<<<<***3<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:148:776:486 83 chr1 755 99 35M = 578 -212 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT ;:<<<;<<;<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:150:933:810 83 chr1 755 99 35M = 593 -197 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT :89===:=:=;;==;==================== MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:102:467:897 99 chr1 756 97 35M = 940 219 GCTTTCAACGCTTCTAGCCATTTCTTTTGTCTTTT <<<<9<<<<9<2<<<&,/</<<<<7<<;&&<$;*< MF:i:18 Aq:i:37 NM:i:2 UQ:i:8 H0:i:1 H1:i:0
--EAS114_39:1:12:884:219 147 chr1 756 99 35M = 584 -207 GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTT 7;::<:<<<7<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:40:1596:1433 147 chr1 756 99 40M = 587 -209 GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT -:8:1841<4;<88<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:7:761:623 99 chr1 757 99 35M = 938 216 CTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTG <<<<<<<<<<<<<8<<<<;;<0<<<<<;;<;<;;& MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:246:313:499 147 chr1 757 99 35M = 592 -200 CTTTAAACGCTTCTAGCCATTTCTTTTGGCATTTG +;77%;;;&:;:7;<<<<<6<:<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS139_11:6:89:1151:1878 147 chr1 757 99 35M = 587 -205 CTTTCAACGATTCTAGCCATTTCTTTTGGCATTTG 8<66,,<<<<<<:<<<<<9<<<:<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_71:4:165:397:25 83 chr1 759 99 34M = 576 -217 TTCAACGCTTCTAGCCATTTCTTTTGGCATTTGC &(33'60;-'+'<7;<<*3-<;;183<<<;<;<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:59:1576:946 147 chr1 761 99 35M = 578 -218 CAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT 9<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:256:407:470 163 chr1 762 99 35M = 939 212 AACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTC <<<<<<<<;<;<<<<<<<<<;;<</<<;;83;7;9 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:148:437:481 163 chr1 764 99 36M = 949 221 CGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGA <<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<;0;8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:140:924:923 83 chr1 767 99 35M = 597 -205 TTTTAGCCATTTCTTTTGGCATTTGCCTTCAGACC <<&<<;;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_103:4:143:560:194 99 chr1 768 99 35M = 946 213 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC <<<<;;<<<<<<<<<<<6<;<<<<;;<<;9<999< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:178:192:499 83 chr1 768 99 35M = 582 -221 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC 86<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:4:1620:413 147 chr1 768 99 35M = 588 -215 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC -<<<7<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:73:730:487 147 chr1 770 99 35M = 604 -201 TAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTA <;;<<2;<;<<<;0<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:179:389:585 163 chr1 770 24 35M = 953 218 TGGCCACTTTTTATCGCATTTCCCTTTAGAACCTA <.4<9.4+.+'&-220<+<4<6<<20*6;<0(9<% MF:i:130 Aq:i:24 NM:i:7 UQ:i:103 H0:i:0 H1:i:0
--B7_595:1:252:19:955 147 chr1 771 84 35M = 596 -210 AGCCAGTTCTTTTGGCATTTGCCTTCAGACCCTCC <8<884<<<<<<68<<<<<<<2<;<<;<+<<<;<< MF:i:18 Aq:i:41 NM:i:2 UQ:i:46 H0:i:0 H1:i:1
--EAS54_71:4:169:862:829 83 chr1 772 99 34M = 611 -195 GCCATTTCTTTTGGCATTTGCCTTCAGACCCTAC ,1<6<<<<<7<<<<<<<<<<<<<<<<<7<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:6:7:858:437 147 chr1 773 99 35M = 593 -215 CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC 7;<4;;:;80<;<;<<<<<<:<<;<<<;;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:183:852:253 83 chr1 773 99 35M = 599 -209 CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC ;<9<;<<<<<<<<;<<<<<;<<<;<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:20:41:138 147 chr1 774 99 35M = 615 -194 CATTTCTTTTGGCATTTGCCTTCAGACCCTACACG ;;;<;<<<::<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:123:998:248 83 chr1 776 99 35M = 589 -222 TTTCTTTTGGCATTTGCCTTCAGACCCTACACGAA ;:;5;<;:<9<<<<<:<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:142:63:937 83 chr1 777 99 36M = 609 -204 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAATG ;;;<;<<<<;<<<<<;:<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:20:762:748 83 chr1 777 99 35M = 591 -221 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT =:747;7=;;==7=;==7===7==7;========= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:149:953:349 99 chr1 777 99 35M = 915 173 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT <<<<<<<<;<<<<<<<<<<<;7:<:<<:<:;;::; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:46:981:766 163 chr1 778 99 35M = 933 190 TCTTTTGGCATTTGCCTTCAGACCCTACACGAATG <<<<<<<<<<<<<;<<<<<-<;<<<<-<-<;-:6; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:204:779:181 83 chr1 779 99 35M = 598 -216 CTTTTGGCATTTGCCTTCAGACCCTACACGAATGC ;:;/*<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:11:360:1577 147 chr1 781 99 35M = 606 -210 TTTGGCATTTGCCTTCAGACCCTACACGAATGCGT 1<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:5:491:391 99 chr1 782 99 35M = 917 170 TTGGCATTTGCCTTCAGACCCTACACGAATGCGTC =========;===;==:4=========;3;==7;= MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:186:199:927 99 chr1 783 99 35M = 802 54 TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT <77<<<<2<;<<<<<06<<<<<<<<60<<684/6& MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:19:855:491 147 chr1 783 99 35M = 631 -187 TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT 8<<<<;:<<<<:<<<<<:<;;<<<<<<<;<<<;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:36:485:632 83 chr1 784 99 36M = 610 -210 GGCATTTGCCTTCAGACCCTACACGAATGCGTCTCT 0;;;<<;<<<;<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:266:842 83 chr1 784 99 35M = 599 -220 GGCATTTGCCTTCAGACCCTACACGAATGCGTCTC <9<<6;9<;9;;<<<<;;;9<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:65:1928:1125 147 chr1 784 99 35M = 588 -231 GGCATTTGCCTTCAGACCCTACACGAATACGTCTC <+<<<2<4<<<0<<4<<<<<6<<<6<<<'<<<<0< MF:i:18 Aq:i:41 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--EAS221_3:4:66:584:407 163 chr1 785 99 35M = 954 204 GCATTTGCCTTCAGACCCTACACGAATGCGTCTCT <<<*9<9<<<1<<<<<<<<*<59<4<)<2<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:172:896:83 147 chr1 786 99 35M = 604 -217 CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA ;<.5.;;<+;<<<<<<<4<<<<<<<;<<<<<;<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:2:1200:1076 83 chr1 786 99 35M = 629 -192 CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA 7779779;9;:;;4;;9;;:7;<<<7;;;:<;<<; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:135:543:760 147 chr1 787 99 35M = 619 -203 ATTTGCCTTCAGACCCTACACGAATGCGTCTCTAC ;;.;;8;<8;<<32;<<<<<7<<<<<9<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:5:538:401 147 chr1 788 99 40M = 624 -204 TTTGCCTTCACACCCTACACGAATGCGTCTCTGCCACAGG 671&7::49:&0<<<(<::<&<<<:<<<<<<<&<<<<1<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:10 H0:i:0 H1:i:1
--EAS54_71:6:215:133:909 147 chr1 789 99 35M = 631 -193 TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA 7758;<;<;8<<<<;<;<<<<<:;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:30:887:404 83 chr1 789 99 35M = 600 -224 TTGCCTTCAGACCCTGCACGAATGCGTCTCTACCA <<<<5<;::<<<;<<.<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS219_1:1:5:497:687 147 chr1 789 99 35M = 607 -217 TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA <8<<8<<<;<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:131:742:561 83 chr1 790 99 35M = 620 -205 TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC <:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:65:556:1505 83 chr1 790 99 35M = 593 -232 TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC <6<8<<4<8;;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:233:478:792 147 chr1 791 99 35M = 634 -192 GCCTTCAGACCCTACACGAATGCGTCTCTACCACA 6<;9:<<9-<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:66:257:524 99 chr1 791 99 35M = 959 203 GCCTTCAGACCCTACACGAATGCGTCTCTACCACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<% MF:i:18 Aq:i:73 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_53:4:154:762:630 83 chr1 792 99 35M = 604 -223 CCTTCAGACCCTACACGAATGCGTCTCTACCACAG <<-::<91<<<<;<;<<<<;<<<<<<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:4:841:339 83 chr1 793 99 35M = 646 -182 CTTCAGACCCTACACGAATGCGTCTCTACCACAGG 77-):22<<<33;<5<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:66:1282:1215 147 chr1 794 99 35M = 627 -202 TTCAGACCCTACACGAATGCGTCTCTACCACAGGG ::;<;<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:194:688:289 147 chr1 795 99 35M = 631 -199 TCAGACCCTACACGAATGCGTCTCTACCACAGGGG ;8;%28<;<<<<<<<<;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:8:36:927:478 147 chr1 798 99 35M = 610 -223 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT ,6;;;3;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:99:756:130 83 chr1 798 99 35M = 606 -227 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT ;;<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:192:716:235 83 chr1 798 99 35M = 651 -182 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT <5<<<8<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:63:424:1643 83 chr1 798 99 35M = 614 -219 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT 9+<<<+7<<<<<<<<<<<<<<<<<8<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:14:360:580 99 chr1 799 99 35M = 963 199 ACCCTACACGAATGCGTCTCTACCACAGGGGGCGG ===========3===;5<==8;====79==.=5'5 MF:i:18 Aq:i:68 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS51_78:7:186:199:927 147 chr1 802 99 35M = 783 -54 CTACGCGAATGCGTCTCTACCACAGGGGGCTGCGC -;++)6<*8+;&<&/<<<<7<<71<<<<<6<<<7< MF:i:18 Aq:i:57 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS139_19:3:4:1502:1911 83 chr1 802 99 40M = 652 -190 CTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTT :+:::5/;99<;<&<*<-9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:187:791:153 99 chr1 803 99 35M = 958 190 TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG <<<<<<<<<<<<<<<<<<<<<:+;;<;<88*6;68 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:63:527:1923 99 chr1 803 99 35M = 981 213 TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG <<<<<<<<<<<<<<<<<:<<<<3<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:31:98:804 99 chr1 805 99 35M = 982 212 CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGC =======9===;============5=;9=;=;==& MF:i:18 Aq:i:74 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS218_4:7:89:1487:520 163 chr1 805 99 35M = 997 227 CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGT 8<<<6/<<<<<<<<<:<<8<:<<3<<:668<86<3 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:69:88:1154 99 chr1 805 99 35M = 992 222 CACGAATGCGTCTCTACCACAGGCGGCTGCGCGGT <<<<<<<<<<<<<<<<<<<<<<<2<<<<:<<<<<7 MF:i:18 Aq:i:47 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS114_26:1:99:212:522 163 chr1 806 99 35M = 1002 231 ACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT ================8==;====;=;===1==:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:35:378:681 147 chr1 812 99 35M = 632 -215 GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT :<5-<);;;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:182:404:693 83 chr1 812 99 35M = 646 -201 GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT <;7;;4<<<<<<<7<<7<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:119:761:239 99 chr1 813 99 35M = 999 221 CGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATC <<<<<<<<<<<<6<<<<<<;<2<<<<;<<<<<;;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:165:464:123 147 chr1 814 99 35M = 650 -199 GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCA 9;<)<<%<<9<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:40:758:116 83 chr1 814 99 40M = 632 -222 GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG 25/8/:<75:2<<<<<<7<<;<<<<<<<88;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:55:506:125 99 chr1 817 99 35M = 982 200 TCTACCACAGGGGGCTGCGCGGTTTCCCATCATGA <<<<<<<<<;<9<;<<;558<<<<5(5*<<<<<51 MF:i:18 Aq:i:35 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:162:594:858 147 chr1 818 99 35M = 634 -219 CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA 90;<99;==99==;4=:========;=====;=== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:55:74:1040 99 chr1 818 99 35M = 975 192 CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:100:708:1984 99 chr1 819 99 35M = 1015 231 TACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<7%: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:92:367:1495 163 chr1 820 99 35M = 987 202 ACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<6<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:49:905:27 163 chr1 821 68 35M = 1000 214 CCACAGGGGGCTGCGCGGTTTCCCATCCTGAAGCA <<;<.89<9.<2<9<:91+447.9,04&000(,+( MF:i:18 Aq:i:31 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS218_4:7:87:964:826 163 chr1 822 99 35M = 999 212 CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<1<<8;4;;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:38:1576:1923 163 chr1 822 99 35M = 987 200 CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;<<;< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:337:968 99 chr1 823 85 35M = 981 193 ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT <<<<<;<<<<<<<<<<<<<<<<<<<;<<;;<;;;; MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:187:294:947 99 chr1 823 99 35M = 1002 214 ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT <<<<<<<<<<<<<<<<:<<<<<&<<%:<)7;7::4 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:49:271:588 83 chr1 830 99 35M = 658 -207 GCTGCGCGGTTTCCCATCATGAAGCACTGAACTTC :0=:===:<===;;===;================= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:40:594:752 147 chr1 831 99 35M = 651 -215 CTGCGCGGTTTCCCATCATGAAGCACTGAACTTCC ;7;9<;;;<;<;:<<;;<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:163:757:432 99 chr1 837 99 35M = 1013 211 GGTTTCCCATCATGAAGCACTGAACTTCCACGTCT <<<<<<<;<<<<<<<<;<;<<<<<<<<<<<<83:< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:156:857:494 83 chr1 838 99 35M = 648 -225 GTTTCCCATCATGAAGCACTGAACTTCCACGTCTC <<<8<:5<<;<<8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:84:91:614 163 chr1 839 99 35M = 1019 215 TTTCCCATCATGAAGCACTGATCTTCCACGTCTCA ;4<<<<<-84<<<;<<<<8<7.<4<<;77&:%<:: MF:i:18 Aq:i:39 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS51_64:7:152:918:824 163 chr1 839 99 35M = 1033 229 TTTCCCATCATGAAGCACTGAACTTCCACGTCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:67:317:249 147 chr1 840 26 35M = 683 -192 TTCCCATCATGACGCACCGAACTTCCACGTCTCAT .5;7;++;<8.;&:7<<.5<<<<7<<7<<<<<<;7 MF:i:130 Aq:i:26 NM:i:2 UQ:i:18 H0:i:0 H1:i:0
--EAS51_62:7:96:836:737 147 chr1 841 99 35M = 642 -234 TCCCATCATGAAGCACTGAACTTCCACGTCTCATC 1<;<7;;1;8;;8:<<1<;<<;<<<<<<<<<<;<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:130:912:658 83 chr1 841 99 35M = 652 -224 TCCCATCATGAAGCACTGAACTTCCACGTCTCATC ;=;;;<<<<<=55=;==<=======<========= MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:75:934:439 163 chr1 842 99 35M = 1001 194 CCCATCATGAAGCACTGAACTTCCACGTCTCATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:212:329:348 163 chr1 842 99 35M = 1020 212 CCCATCATGAAGCACTGAACTTCCACGTCTCATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:49:183:435 163 chr1 843 99 35M = 1005 197 CCATCATGAAGCACTGAACTTCCACGTCTCATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<;;<;:;8;: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:280:133:495 99 chr1 843 99 35M = 1015 207 CCATCATGAAGCACTGAACTTCCACGTCTCATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:232:351:909 147 chr1 843 80 36M = 685 -194 CCATCATGAAGCGCTGAACTTCCACGTCTCATCTAG :8%3<8====130=8==+===;=3=8===48==;3* MF:i:18 Aq:i:39 NM:i:1 UQ:i:15 H0:i:0 H1:i:1
--EAS221_1:8:77:781:676 163 chr1 846 99 35M = 1010 199 TCATGAAGCACTGAACTTCCACGTATCATCTAGGG <<<<<<<5<<5<<<<<<<<<<<<13<<2<<<<<,< MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS1_95:2:198:691:595 83 chr1 847 99 35M = 655 -227 CATGAAGCACTGAACTTCCACGTCTCATCTAGGGG :=:;=;===========;================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:31:948:254 147 chr1 849 99 35M = 680 -204 TGAAGCACTGAACTTCCACGTCTCATCTAGGGGAA 7;;;98<<7<<<<<<<<<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:278:440:902 99 chr1 851 99 35M = 1032 216 AAGCACTGAACTTCCACGTCTCATCTAGGGGAACA =========<==<==============:;;=;=;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:74:674:124 163 chr1 854 99 35M = 1041 222 CACTGAACTTCCACGTCTCATCTAGGGGAACAGGG <<<<<<<<<<<<:<;<<<<;<<<<;9;<<;;.;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:28:781:723 147 chr1 855 99 36M = 676 -215 ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG 8488<::;4;;<:;;;::<;7<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:28:474:566 163 chr1 855 99 36M = 1018 199 ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG <<<<<<<<<<<<<<<<<<<<<<<:<;<;;<<7;8;< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:124:241:608 147 chr1 856 99 35M = 670 -221 CTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG 9;;<<;<<<;<<<;<:<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:187:925:547 147 chr1 857 99 35M = 689 -203 TGAACTTCCACGTCTCATCTAGGGGAACAGGGAGG ((988+&8<<;<09<;<<9<<4<<-<99<<;<9<; MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:9:512:826 99 chr1 859 99 35M = 1021 197 AACTTCCACGTCTCATCTAGGGGAACAGGGAGGTG 67<<<;;;<;;<<;;<;<:;9;;;9;;;;<59777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:194:696:490 99 chr1 862 99 35M = 1026 199 TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC <<<<<<<<<<<<<<<<<<<;5<<<<<:<1<8<<<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:96:788:614 83 chr1 862 99 35M = 667 -230 TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC ;9;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:81:786:340 163 chr1 863 99 35M = 1033 205 TCCACGTCTCATCTAGGGGAACAGAGAGGTGCACT <<<<7<<<<<<<<<<<<<<7<<;<&<<;;7<7;;; MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS192_3:7:298:644:697 163 chr1 863 99 35M = 1035 207 TCCACGTCTCATCTAGGGGAACAGGGAGGTGCACT <<<<<<<<<<<<<<<::;;;6<8:;;9;98;668; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:178:305:843 163 chr1 864 99 35M = 1037 208 CCACGTCTCATCTAGGGGAACAGGGAGGTGCACTA <<<<<<<<<<<<<<<<<<<:<<<<<;<<:<<:<;: MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:5:863:302 147 chr1 866 99 35M = 698 -203 ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT :4:29:<<<9;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:30:788:376 99 chr1 866 99 35M = 1038 207 ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT <<<<<<<<<<<<:<<<<<<<<:<;<<(<7;7;:(; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:143:310:958 163 chr1 868 99 35M = 1048 215 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<<<<<<<<8<8<<<<<;;7<<<;6;<<+4;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:3:233:911 83 chr1 868 99 35M = 688 -215 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:75:637:650 83 chr1 868 99 35M = 691 -212 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:73:513:102 147 chr1 868 99 35M = 698 -205 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC ==::===8=>=====>=>=>>>=>>==>=>>>>>> MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:297:637:86 83 chr1 869 99 35M = 704 -200 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG <:75<;<;;<<<<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS54_65:3:290:558:349 147 chr1 869 99 35M = 719 -185 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG 2;2;;'5&;<<5<<;5/<<<<<7<<;+;<<+1<8< MF:i:18 Aq:i:59 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS1_95:3:308:956:873 99 chr1 870 99 35M = 1068 233 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC <<<<<<<<<<<<<;<;<;1<<<<<.<9<;<<<<+; MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:147:64:416 147 chr1 870 99 35M = 701 -204 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC /;49;:6<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:812:345 163 chr1 871 99 36M = 1036 201 TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTC <<<<<<<7<;<<7<;77;3<&0-;<5<;6<1'13<: MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:134:243:630 163 chr1 871 99 35M = 1052 216 TCATCTAGGGGAACAGGGAGGCGCACTAATGAGCT <<<:<<<<</<<<-<<<<6/<-<:<5+<::-2</2 MF:i:18 Aq:i:39 NM:i:2 UQ:i:29 H0:i:0 H1:i:1
--EAS54_81:2:27:856:401 83 chr1 871 99 35M = 679 -227 TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCT .'=.93======;;====;======;===;=;=== MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:45:462:455 83 chr1 874 99 35M = 723 -186 TCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCA 62*<;;;;<<;<<9;;<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:264:988:663 147 chr1 875 99 35M = 688 -222 CGAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC (%<:4<4<<7<<1-:<1766<66<<<<+<:<;8;< MF:i:18 Aq:i:60 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_63:1:145:71:26 163 chr1 875 99 35M = 1040 200 CTAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC <<<<<<<<<<<<<<<<<;<;;<<;<;<9<9;;99; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:101:825:28 163 chr1 879 99 35M = 1079 235 GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC <<86<<;<78<<<)<;4<67<;<;<74-7;,;8,; MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_4:5:63:875:1339 83 chr1 879 99 35M = 711 -203 GGGAACAGGGAGGTGCACTAATGCGCTCCACGCCC ;;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:290:270:557 99 chr1 880 99 35M = 1052 207 GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA <<<<<<<<<<<<<;<<<<9<:;<<<<<<5<0<<;+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:134:853:558 163 chr1 880 99 35M = 1071 226 GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA ==========================9=9=;<;<5 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:282:567:481 99 chr1 880 88 35M = 1064 219 GGAACAGGGAGGCGCACTAATGCGCTCCACGCCCA <<<<<<<<<<<<3<7<7<<<<;<<0)<<<<<<<<3 MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS114_30:1:154:818:165 163 chr1 881 99 35M = 1041 195 GAACAGGGAGGTGCACTAATGCGCTCCACGCCCAA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<:7;:; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:301:54:240 163 chr1 882 99 35M = 1061 214 AACAGGGAGGTGCACTAATGCGCTCCACGCCCAAG <<<<:<9<<<<:<<<<9<<<<<<690<<6</<(83 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:12:402:843 163 chr1 885 99 35M = 1072 222 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:262:965:756 99 chr1 885 99 35M = 1069 219 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<9;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:30:816:90 163 chr1 885 99 35M = 1057 207 AGGGAGGTGCACTAATGCGCTCCACGCCCCAGCCC <<<<<<<<<<<<<<<<<<<:<<<<<<::1&(1::7 MF:i:18 Aq:i:69 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS188_7:4:171:104:398 163 chr1 885 99 35M = 1066 216 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC =========)===97===3===4===4==,)=/)= MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:163:31:455 83 chr1 886 99 35M = 730 -191 GGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCT 8;<<;<<<78+<=</<<=;23<=<<<<<<<<<<<< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:149:354:667 147 chr1 888 99 35M = 734 -189 GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC ;<;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:18:571:1110 99 chr1 888 99 35M = 1070 217 GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC 7<<<<<<<<<<<<;<<<<<<<<<<<<788<<<;6< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:312:837:406 163 chr1 889 99 35M = 1048 194 AGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:160:272:398 83 chr1 891 99 35M = 705 -221 GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA 3:,<,;;<<;<<1<<<<<<<;<;<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:228:587:504 99 chr1 891 65 35M = 1050 194 GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA <<<<7<<7;7<<3<<<<7<<<<<*3<<<<74<:<* MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:35:361:546 83 chr1 892 99 35M = 731 -196 TGCACTAATGCGCTCCACGCCCAAGCCCTTCTCAC :4;4;;<<;4<8<;;<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:84:438:1505 99 chr1 893 99 40M = 1068 215 GCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTC 35<<:;9<;<;5<<<:<3<<7:<9/<)<<:::9<&5;;+1 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:277:482:316 163 chr1 894 99 35M = 1098 239 CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG <<<<<<<<<<<<<<;<;<<<:<;<<<<;<<<1<1; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:86:498:373 83 chr1 894 99 35M = 716 -213 CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG ):)4:<5<<<<;89<<<969<<<:<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:236:498:526 163 chr1 895 99 35M = 1048 188 ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:43:1120:878 99 chr1 895 99 35M = 1075 215 ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT <<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<=7;7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:104:153:698 83 chr1 896 99 36M = 713 -219 CTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTT 69<<)9<<:5:6<<<16:<6/<6<1<<<<<:<:<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:166:42:147 99 chr1 898 99 35M = 1048 185 AATGCGCTCCACGCCCAAGCCCTTCTAACAGTTTC <<;<<<<<<<<<<<<<<<<;6<<64;)<<7;7;;; MF:i:18 Aq:i:43 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--B7_595:2:178:77:424 99 chr1 900 99 35M = 1058 193 TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG <<<<<<<<<<<<<<<6<<;<<<<<<<<6<;<<<<6 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:87:734:888 83 chr1 900 99 35M = 717 -218 TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG 56<<86;:<<<4;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:149:650:44 83 chr1 902 99 36M = 726 -212 CGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC ;8<<</<<:<<595<<9<<<<<<<<<<<<<<3<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:552:234 99 chr1 903 99 35M = 1094 226 GCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC <<<<<<<<<<<<<;<<<<<<<<9<969<<<<3<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:58:703:72 163 chr1 905 99 35M = 1088 218 TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC 2<7<<<<<<<<<<<8:<<<<8<(<8<:::8.::<3 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:242:4:593 99 chr1 905 99 35M = 1086 216 TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC <<<<<<<<<<<8<<<<-<<<<<88;<;<<8<;88< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:67:620:344 147 chr1 905 99 35M = 755 -185 CCCCCGCCCAAGCCCTTCTCACAGTTTCTGCCCCC +++*+++#++++++,++++++++,,+,&+,,,,+, MF:i:18 Aq:i:33 NM:i:2 UQ:i:19 H0:i:1 H1:i:0
--EAS51_62:7:178:286:414 83 chr1 907 99 35M = 731 -211 CACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAG 68;38::<<;<<8;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:174:987:334 163 chr1 908 99 35M = 1082 209 ACACCCAAGCCCTTCTCACAGTTTCTGCCCCCAGC <<;4<<<<;;</4<4<+<<<<<;<<<<<</<93+2 MF:i:18 Aq:i:41 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS219_FC30151:1:55:8:1412 163 chr1 910 99 35M = 1072 197 GCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:8:1351:1986 83 chr1 911 99 35M = 729 -217 CCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATG <8;<<<<<<<<<<<;<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:37:610:260 83 chr1 913 99 35M = 745 -203 CAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGT /74<.<4.&<<<:<<<<::<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:228:189:826 99 chr1 914 99 35M = 1112 233 AAGCCCTTCTCACAGTTTCTGCCCCCCGCATGGTT ;9=========;=1======9=====1;=<3=:6; MF:i:18 Aq:i:45 NM:i:1 UQ:i:16 H0:i:0 H1:i:1
--EAS56_59:3:149:953:349 147 chr1 915 99 35M = 777 -173 AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG 2;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:24:1374:211 99 chr1 915 99 35M = 1064 184 AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG ;;:<<;<;:;;;;;;;;;;<::;;;6;;2+74917 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:5:491:391 147 chr1 917 99 35M = 782 -170 CCCTGCTCACAGTTTCTGCCCCCAGCATGGTTGTA -/+5-.&&:5+:92=6===========9======= MF:i:18 Aq:i:62 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS114_32:2:306:119:56 99 chr1 919 99 35M = 1083 199 CTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:216:381:608 163 chr1 920 99 35M = 1075 190 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<;;+<6:<;26; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:73:292:429 147 chr1 920 99 35M = 752 -203 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG ;6;6;<<<<<;<<<<;<<<<<<<<7<<<<<<5<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:170:265:818 83 chr1 920 73 35M = 748 -207 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG 3+;%;.;;<<9+;3;;;<<<;57<1<;<<<<<<<; MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:278:906:933 99 chr1 920 99 35M = 1071 186 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<. MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:190:95:706 99 chr1 920 99 35M = 1078 193 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<9<<<<<;;<;<;;<<;<;;<, MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:278:848:765 99 chr1 920 99 35M = 1088 203 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:29:249:878 163 chr1 921 99 35M = 1077 191 TCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGG <<<<<<<<<<<<<<<<<<<<<<:<:<<=<<:<<6& MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:259:467:737 163 chr1 923 99 36M = 1102 215 TCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCA <<<<<<<<<<<<7<<<<<<<'<<.<<<<<<;;;<67 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:24:195:604 163 chr1 923 99 35M = 1098 210 TCACAGTTTCTGCCCCCAGCATGGTTGTACTGTGC <;<<<<<<<<<89<<<<<868<8;6<8;3(38&<8 MF:i:18 Aq:i:65 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_32:4:42:923:169 163 chr1 925 99 35M = 1099 209 ACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAA 9<<<;9<<<<<;<;<<.<<;<;6<<<<1;8<<-0; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:29:529:379 163 chr1 926 99 35M = 1117 226 CAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT <<<<<<<<8<<<<<<<<<<<<<<<<<;<672;<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:26:785:882 163 chr1 926 99 35M = 1107 216 CAGTTTCTGCCCCAAGCATGGTTGTACTGGGCAAT <<<0<<<<<<<<<6,<<)<<<<<<<&<<0<<,<'< MF:i:18 Aq:i:39 NM:i:1 UQ:i:21 H0:i:0 H1:i:1
--B7_591:7:129:956:115 83 chr1 927 99 36M = 740 -223 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC <<:<9<4<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:82:356:253 147 chr1 927 99 35M = 752 -210 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA 97;7<<;;<<<<<7;<<:<<<9<<;<<<9<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:134:379:893 99 chr1 927 99 35M = 1095 203 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA <<<<<<<<<<<<<5<<<<;<<<<<;<:5;<<4+<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:256:404:584 99 chr1 928 99 35M = 1096 203 GTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC <<<<<<<<<<<<<<<<<<<<<7<3;<:;;3:3:</ MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:76:333:905 163 chr1 929 99 35M = 1076 182 TTTCTGCCCCCAGCATGGTTGTACTGGGCAATACA <<<<<7;<;<<6<<6<<7<<7<)&<4+6)0+<;(0 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:11:646:628 99 chr1 930 99 36M = 1106 212 TTCTGCCCCCAGCATGGTTGTACTGGGCAATACATG <<<<<<<<<<6<<<<<<<<<<<<</<;<<<<<<6<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:136:389:320 99 chr1 930 99 35M = 1100 205 TTCTGCCCCCAGCATGGTTGTACTGGGCAATACAT 7<<<<<;<<7<6<<;;<;<;;677<6;(27;<(97 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:93:334:858 99 chr1 932 99 35M = 1106 209 CTGCCCCCAGCATGGTTGTACTTGGCAATACATGA <<<<<<<<;<<<<;;<<9<<<<&;&<<9<9;/;&; MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:3:46:981:766 83 chr1 933 99 35M = 778 -190 TGCCCCCAGCATGGTTGTACTGGGCAATACATGAG /<<<;/;<<316<<<3<<<<7<<<7<<<;<<<<<7 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:209:159:130 99 chr1 934 99 34M = 1109 210 GCCCCCAGCATGGTTGTACTGGGCAATACATGAG <<<<<<8<<<<<<&<<+7<<4<<<22<;<<<<3< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:111:796:737 99 chr1 936 99 35M = 1112 211 CCCCAGCATGGTTGTACTGGGCAATACATGTGATT <<<<<<<<<<<<<<<:<<;7;<<<<993<4%:%<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:4:15:856:340 99 chr1 936 99 35M = 1093 192 CCCCAGCATGGTTGCACTGGGCAATACATGAGATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<77<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:5:7:761:623 147 chr1 938 99 35M = 757 -216 CCGGCATGGTTGTACTGGGCAATACATGAGATTAT ::';-8);<<<<;<1<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS1_97:5:84:927:843 99 chr1 938 99 35M = 1138 235 CCAGCATGGTTGTACTGGGCAATACATGAGATTAT <<<<<<<<<<<<<;9;;4;<<0<<7<<9<;<:<5< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:273:901:459 99 chr1 938 99 35M = 1098 195 CCAGCATGGTTGTACTGGGCAATACATGAGATTAT <<8<<<;<;8<;<;<;7+8<788<;;22<27;77; MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:256:407:470 83 chr1 939 99 35M = 762 -212 CAGCATGGTTGTACTGGGCAATACATGAGATTATT 7.47;0;;5<4033*<<<<<9,<<<<<;<<<<<3< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:77:251:446 163 chr1 939 99 35M = 1110 206 CAGCATGGTTGTACTGGGCAATACATGAGATTATT <<9<<<<<<<<<<<<<97<<<<<<<<<96<<<+<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:102:467:897 147 chr1 940 97 35M = 756 -219 AGCATGGTTGTACAGGGCAATACATGAGATTATTA 83333<+02<:<.&<+<.<::7<<::<<<<:<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS221_1:6:92:1807:1185 99 chr1 940 99 35M = 1119 214 AGCATGGTTGTACTGGGCAATACATGAGATTATTA <<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:142:858:903 99 chr1 943 99 35M = 1121 213 ATGGTTGTACTGGGCAATACATGAGATTATTAGGA ======;====5=======9======;===3=5=; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:143:560:194 147 chr1 946 99 35M = 768 -213 GTTGTACTGGGCAATACATGAGATTATTAGGAAAT 9:<;7<:::<:<;<<<<<<<<<<:<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:148:437:481 83 chr1 949 99 36M = 764 -221 GTACTGGGCAATACATGAGATTATTAGGAAATGCTT <<<;<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:75:917:886 163 chr1 951 99 35M = 1110 194 ACTGGGCAATACATGAGATTATTAGGAAATGCTTT <<<<<<<<<<<<<<:<<<<<<<<<71<<<:6<:8< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:118:851:285 163 chr1 953 99 35M = 1133 215 TGGGCAATACATGAGATTATTAGGAAATGCTTTAC <<<<<<<<<<<<<<<<<<<<<<<;;<;<:<<<<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:179:389:585 83 chr1 953 24 35M = 770 -218 TGTGAAATGAATGAGATTATTAGGAAATGCTTTAC ;<)<;*;9*+<;<<,,<,<4<4<<<<<;<4<9494 MF:i:18 Aq:i:24 NM:i:4 UQ:i:53 H0:i:0 H1:i:0
--EAS114_30:7:269:944:220 163 chr1 953 99 35M = 1147 229 TGGGCAATACATGAGATTATTAGGAAATGCTTTAC <<<<<<<8<<<<<<<<<<<<<<<;<<<<<;<<;81 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:93:1002:845 163 chr1 954 99 35M = 1129 210 GGGCAATACATGAGATTATTAGGAAATGCTTTACT <<<<<<<<<<<<<<<<<<<<<:<<;<<<;<<<</< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:66:584:407 83 chr1 954 99 35M = 785 -204 GGGCAATACATGAGATTATTAGGAAATGCTTTACT <<84<<<766<<<.6<<<<<<4<<7<<<<<<<7<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:63:48:631 163 chr1 957 99 35M = 1143 221 CAATACATGAGATTATTAGGAAATGCTTTACTGTC <<<<<<;<<7</<<<<<<;;;<<<;<;<<7;;);< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:187:791:153 147 chr1 958 99 35M = 803 -190 AATACATGAGATTATTAGGAAATGCTTTACTGTCA :;55&<99<<1<;<<8<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:72:1809:1398 99 chr1 958 99 35M = 1145 222 AATACATGAGATTATTAGGAAATGCTTTACTGTCA <<<<<<<<<<<<<<<<<<::<9<<<<<<<<<6<<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:66:257:524 147 chr1 959 99 35M = 791 -203 ATACATGAGATTATTAGGAAATGCTTTACTGTCAT <;<<<<<<<<3<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:247:522:670 163 chr1 960 99 35M = 1121 196 TACATGAGATTATTAGGAAATGCTTTACTGTCATA <<<<<<<<<<<<<<<;<<<<<<<<<<<<<5;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:37:400:627 163 chr1 961 99 35M = 1154 228 ACATGAGATTATTAGGAAATGCTTTACTGTCATAA <<<<<<7+<<<<<<2615<<6<<<<5<<1<<;:74 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:329:177:267 163 chr1 962 99 35M = 1139 212 CATGAGATTATTAGGAAATGCTTTACTGTCATAAC <<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<9; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:166:203:416 163 chr1 963 99 35M = 1136 208 ATGAGATTATTAGGAAATGCTTTACTGTCATAACT <<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<<97< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:14:360:580 147 chr1 963 99 35M = 799 -199 ATGAGATTATTAGGAAATGCTTTACTGTCATAACT <,1<;<;;<<<<<1<<<;<7<<6<:;;<<<<<<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:193:38:987 163 chr1 964 99 35M = 1158 229 TGAGATTATTAGGAAATGCTTTACTGTCATAACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;:;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:39:59:738 163 chr1 965 99 35M = 1142 212 GAGATTATTAGGAAATGCTTTACTGTCATAATTAT 3<8.<<<<<<<-<<<<3<388;;880<0<0)-722 MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS51_66:4:209:92:210 163 chr1 965 99 35M = 1156 226 GAGATTATTAGGAAATGCTTTACTGTCATAACTAT <<<<<<<<<<<<<<<<;<<<<<<<5<7<<;;;<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:86:308:648 99 chr1 970 99 35M = 1161 226 TATTAGGAAATGCTTTACTGTCATAACTATGAAGA =8=====;=8======;=======35==;=;.;25 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:206:563:262 163 chr1 971 99 35M = 1137 201 ATTAGGAAATGCTTTACTGTCATAACTATGAAGAG <<<<<<<<<;<<<<<<<<<<<<;<<<<<<<-;<4; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:82:822:767 99 chr1 972 99 35M = 1165 228 TTAGGAAATGCTTTACTGTCATAACTATGAAGAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<.<,< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:207:926:427 163 chr1 973 99 35M = 1159 221 TAGGAAATGCTTTACTGTCATAACTATGAAGAGAC <<<<<<7<<<<<;<<<<<6:<;<6<&<58<<6::: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:144:28:475 99 chr1 974 99 35M = 1167 228 AGGAAATGCTTTACTGTCATAACTATGAAGAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<::8< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:55:74:1040 147 chr1 975 99 35M = 818 -192 GGAAATGCTTTACTGTCATAACTATGAAGAGACTA ;;;;;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:274:176:479 99 chr1 976 99 35M = 1144 203 GAAATGCTTTACTGTCATAACTATGAAGAGACTAT <<<<<<<<<<<<<;<<<<<<<<<<;<<9<59<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:337:968 147 chr1 981 10 35M = 823 -193 GCTTTACTGTCTAAACTATGAAGAGACTATTGCCA %454<75!7<+!990<9<6<<<<6<</<<<<<<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:24 H0:i:0 H1:i:0
--EAS114_28:7:157:786:424 99 chr1 981 99 36M = 1171 226 GCTTTACTGTCATAACTATGAAGAGACTATTGCCAG <<<<<<<<<<<<<;<<<<<<;<<;<<;<<<<+4:70 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:63:527:1923 147 chr1 981 99 35M = 803 -213 GCTTTACTGTCATAACCATGAAGAGACTATTGCCA 9<<<8<-8;;8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:7:55:506:125 147 chr1 982 99 35M = 817 -200 CTTTACTGTCATAACTATGAAGAGACTACTGCCAG 118%67;1;8,4:187<4>::1:818;;&::<>.; MF:i:18 Aq:i:35 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_81:2:31:98:804 147 chr1 982 99 35M = 805 -212 CTTTACTGTCATAACTATGAAGAGACTATTGCCAG ====;========7===================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:235:805:373 163 chr1 983 99 35M = 1146 198 TTTACTGTCATAACTATGAAGAGACTATTTCCAGA <<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99; MF:i:18 Aq:i:74 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS114_28:5:11:868:62 99 chr1 983 99 36M = 1154 207 TTTACTGTCATAACTATGAAGAGACTATTGCCAGAT <<<<<<<<<<<<<<<<<<<<:<<<;<<<<(7:7039 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:280:512:316 163 chr1 984 99 35M = 1159 210 TTACTGTCATAACTATGAAGAGACTATTGCCAGCT ==<========6==4==6;;==:===;=2/:+8%6 MF:i:18 Aq:i:68 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:5:292:122:666 99 chr1 985 99 35M = 1159 209 TACTGTCATAACTATGAAGAGACTATTGTCAGATG <<<<<<6<<<<<<<<8;<<<<<<<<<<3&9+;;(; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_53:1:23:403:981 99 chr1 985 99 35M = 1151 201 TACTGTCATAACTATGAAGAGACTATTGCCAGATG <8<<<;<<<<<<;<<<<<<8;<<<9<9,3;,6(91 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:33:1566:588 99 chr1 985 76 35M = 1166 216 TACTGTCATAACTATGAAGAGCCTATTGCCAGATG <;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797 MF:i:18 Aq:i:37 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS139_11:7:92:367:1495 83 chr1 987 99 35M = 820 -202 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA <8<88<<<<7<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:38:1576:1923 83 chr1 987 99 35M = 822 -200 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA 8;<98<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:190:481:295 163 chr1 990 99 35M = 1161 206 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<<<<<<<<<<<<<<<<<<<<<9<<<<<9<7<2:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:168:117:441 99 chr1 990 99 35M = 1151 196 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<3<<<<<<<<<<<<<<<<<<<+<<17;<;:<995 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:239:796:221 163 chr1 992 99 35M = 1160 203 ATAACTATGAAGAGACTATTGCCAGCTGACCCCCC <<<7<<7<<7<<7<;<<<<<,;;,+'<+/+99%:' MF:i:18 Aq:i:37 NM:i:4 UQ:i:26 H0:i:0 H1:i:1
--EAS220_1:4:69:88:1154 147 chr1 992 99 35M = 805 -222 ATAACTATGAAGAGACTATTGCCAGATGAACCACA <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:34:956:1309 99 chr1 994 99 35M = 1168 209 AACTATGAAGAGACTATTGCCAGATGAACCACACA <<<<<<7<<<<<<<<<<<6<<<<<<<<<<<:<8<8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:229:717:121 99 chr1 995 99 35M = 1150 190 ACTATGAAGAGACTATTGCCAGATGAACCACACAC =================<)=<4<0=.<<<71;41& MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS219_1:1:67:191:668 99 chr1 995 99 35M = 1134 174 ACTATGAAGAGACTATTGCCAGATGAACCACACCT <<<<<<<<<<<<<<<<<6<<;<;<;<<<<<<6;%2 MF:i:18 Aq:i:74 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_64:3:309:303:278 163 chr1 996 99 35M = 1178 217 CTATGAAGAGACTATTGCCAGATGAACCACACATT <<<<<<<<<<<<<<<<+<<+<<7<<<<<5<<<;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:60:1020:1259 99 chr1 996 99 35M = 1157 196 CTATGAAGAGACTATTGCCAGATGAACCACACATT <;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:89:1487:520 83 chr1 997 99 35M = 805 -227 TATGAAGAGACTATTGCCAGATGAACCACACATTA 4;;/<<<<<:<;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:15:805:420 163 chr1 998 35 35M = 1164 201 ATGAAGAGACTATTCACATGTGAACCACACATTTA ;73;;;;67.;1<<+*.;*&<4947<&474&*9*( MF:i:130 Aq:i:35 NM:i:4 UQ:i:33 H0:i:0 H1:i:0
--EAS56_57:3:119:761:239 147 chr1 999 99 35M = 813 -221 TGAAGAGACTATTGCCAGATGAACCACACATTAAT ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:142:457:584 99 chr1 999 99 35M = 1160 196 TGAAGAGACTATTTCCAGATGAACCACACATTAAT <<<<<<<<<<<<</<<,6<66<<<;<;;<*4744. MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS218_4:7:87:964:826 83 chr1 999 99 35M = 822 -212 TGAAGAGACTATTGCCAGATGAACCACACATTAAT )6<<<<<<:;<6<<::<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:49:905:27 83 chr1 1000 68 35M = 821 -214 GAAGAGACTATTGCCAGTTGAACCACACATTAATA 99515<<&<<6595-56%;86&<;<<<6<<<<6;< MF:i:18 Aq:i:31 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS1_108:3:75:934:439 83 chr1 1001 99 35M = 842 -194 AAGAGACTATTGCCAGATGAACCACACATTAATAC ==7=:=========================<==== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:99:212:522 83 chr1 1002 99 35M = 806 -231 AGAGACTATTGCCAGATGAACCACACATTAATACT <1<16<7<3<<;;<8<<<<<<<<<<<<;<<<<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:187:294:947 147 chr1 1002 99 35M = 823 -214 AGAGACTATTGCCAGATGAACCACACATTAATACT <<:<<8181;<8<<<<<<<<8<<<<<<<<<<<<<: MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:2:152:860:286 163 chr1 1004 99 35M = 1171 202 AGACTATTGCCAGATGAACCACACATTAATACTAT <;<<<;<<0:<3<:<<2<<<<<7+<7+47<9(999 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:49:183:435 83 chr1 1005 99 35M = 843 -197 GACTATTGCCAGATGAACCACACATTAATACTATG 1<7<<<<;:<<<<<;<<<;<<<;<;<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:63:854:610 163 chr1 1005 99 35M = 1180 210 GACTATTGCCAGATGAACCACACATTAATACTATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:12:276:1797 99 chr1 1006 99 35M = 1190 219 ACTATTGCCAGATGAACCACACATTAATACTATGT <<<<<<<<<<<<:</<<9<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:190:42:671 163 chr1 1008 99 36M = 1192 220 TATTGCCAGATGAACCACACATTAATACTATGTTTC <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:67:692:110 99 chr1 1009 99 35M = 1175 201 ATTGCCAGATGAACCACACATTAATACTATGTTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:61:183:767 99 chr1 1010 99 35M = 1195 220 TTGCCAGATGAACCACACCTTAATACTATGTTTCT <<<<<<<<<<;<<<9<9<+<<<8<<<<<<;8<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS221_1:8:77:781:676 83 chr1 1010 99 35M = 846 -199 TTGCCAGATGAACCACACATTAATACTATGTTTCT :<;<2<<<<<<26<<<<6<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:21:132:1423 99 chr1 1012 99 35M = 1178 201 GCCAGATGAACCACACATTAATACTATGTTTCTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:163:757:432 147 chr1 1013 99 35M = 837 -211 CCAGATGAACCACACATTAATACTATGTTTCTCAT 1+<8<<<<<<;<5<;<<<<<;5<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_30:3:302:288:657 99 chr1 1013 99 35M = 1173 195 CCAGATGAACCACACATTAATACTATGTTTCTTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:97:1584:777 99 chr1 1013 99 35M = 1200 222 CCAGATGAACCACACATTAATACTATGTTTCTTAT <<;<;;;;<;<;<<;;;;;;;;;;;;;;:;79979 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:280:133:495 147 chr1 1015 99 35M = 843 -207 AGATGAACCACACATTAATACTATGTTTCTTATCT <:<9:<<7:<6<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:100:708:1984 147 chr1 1015 99 35M = 819 -231 AGATGAACCACACATTAATACTATGTTTCTTATCT :8<(8<)9<;<<<<+<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:182:313:319 99 chr1 1016 99 35M = 1180 199 GATGAACCACACATTAATACTATGTTTCTTATCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<;<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:41:474:283 99 chr1 1018 99 35M = 1182 199 TGAACCACACATTAATACTATGTTTCTTATCTGCA <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<+<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:28:474:566 83 chr1 1018 99 36M = 855 -199 TGAACCACACATTAATACTATGTTTCTTATCTGCAC ;<<<+<<<<5<<<<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:84:91:614 83 chr1 1019 99 35M = 839 -215 GAACCACACATTAATACTATGTTTCTTATCTGCAC <<;;<<<7<<<<<<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:159:222:274 99 chr1 1019 99 35M = 1189 205 GAACCACACATTAATACTATGTTTCTTATCTGCAC =;9====;=9==59=+==9========9===5;7= MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:62:603:1552 163 chr1 1019 99 35M = 1180 196 GAACCACACATTAATACTATGTTTCTTATCTGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:212:329:348 83 chr1 1020 99 34M = 842 -212 AACCACACATTAATACTATGTTTCTTATCTGCAC 8<6:<:<<<;<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:233:97:262 99 chr1 1021 99 34M = 1175 189 ACCACACATTAATACTATGTTTCTTATCTGCCCA <<<<<<<<<<<;<;<<:<<<<<<<<<<<<.<&77 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_45:7:9:512:826 147 chr1 1021 99 35M = 859 -197 ACCACACATTAATACTATGTTTCTTATCTGCACAT 76777:;;;;;;;;;;;;;;;;;;;;;;;;;:;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:29:794:282 163 chr1 1025 99 36M = 1196 207 CACATTAATACTATGTTTCTTATCTGCACATTACTA <<<<<<<<<<<<<<<<<<<<<;<<<&<<;:<<8<<8 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:278:524:521 163 chr1 1025 99 35M = 1224 234 CACATTAATACTATGTTTCTTATCTGCACATTACT <<<;<<;<<<<<<<;<<<<<<<<<<7;5;<<<;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:39:966:551 99 chr1 1026 99 35M = 1205 214 ACATTAATACTATGTTTCTTATCTGCACATTACTA <<<<<<<<<<<<<<<<<<<<<<<<:<;<&<<&<<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:194:696:490 147 chr1 1026 99 35M = 862 -199 ACATTAATACTATGTTTCTTATCTGCACATTACTA ========;======;==========8==:===== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:305:565:952 99 chr1 1030 99 36M = 1213 219 TAATACTATGTTTCTTATCTGCACATTACTACCCTG 7<<<<<<<<<7<<<<<<<<<7<<<;;<;<;<<<<<+ MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:287:258:321 99 chr1 1030 99 35M = 1194 199 TAATACTATGTTTCTTATCTGCACATTACTACCCT <<<<<<<<<<<;<<<<<<<<42:<+<<<;<<;;;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:278:440:902 147 chr1 1032 99 35M = 851 -216 ATACTATGTTTCTTATCTGCACATTACTACCCTGC <;7;4<;<;;;<<;<;;;<<<<<9<<<;<<<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:180:905:36 99 chr1 1033 99 35M = 1212 214 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ==========8===;;=========;==77%41=; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:152:918:824 83 chr1 1033 99 35M = 839 -229 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:81:786:340 83 chr1 1033 99 35M = 863 -205 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ;<;<<<;<<;<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:196:11:27 163 chr1 1035 65 36M = 1198 199 CTATGTTTCTTATCTGCNCATTACTACCCTGCAATT <<<<<<<<;<<<<<<<8!4<<<;+<88;8<+2,8<; MF:i:18 Aq:i:24 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS192_3:7:298:644:697 83 chr1 1035 99 35M = 863 -207 CTATGTTTCTTATCTGCACATTACTACCCTGCAAT 8:<8;<;:7;<<;4;:+<7<<<<;<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:812:345 83 chr1 1036 99 36M = 871 -201 TATGTTTCTTATCTGCACATTACTACCCTGCAATTA ;<;<<<<5<<<:<;<:<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:178:305:843 83 chr1 1037 99 35M = 864 -208 ATGTTTCTTATCTGCACATTACTACCCTGCAATTA <<<<<<<4<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:30:788:376 147 chr1 1038 99 35M = 866 -207 TGTTTCTTATCTGCACATTACTACCCTGCAATTAA :5<<4:88;9<<<<<;<<<<;<8<;<<<<1<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:1:145:71:26 83 chr1 1040 99 35M = 875 -200 TTTCTTATCTGCACATTACTACCCTGCAATTAATA 882;8;<;;887<<<;;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:157:42:763 163 chr1 1040 99 35M = 1203 198 TTTCTTATCTGCACATTACTACCCTGCAATTATTA <<;<;<<<<<;<:4<<<<<<<<<;;4<<<:;;+;+ MF:i:18 Aq:i:61 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--B7_589:8:74:674:124 83 chr1 1041 99 35M = 854 -222 TTCTTATCTGCACATTACTACCCTGCAATTAATAT ;;;;;<<:<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:154:818:165 83 chr1 1041 99 35M = 881 -195 TTCTTATCTGCACATTACTACCCTGCAATTAATAT ;;;;<<<;<;;<;<<<<;<<;;;<<;<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:319:174:811 99 chr1 1044 99 35M = 1242 233 TTATCTGCACATTTCTACCCTGCAATTAATATAAT <<<<<<<<<;<<<<<<<<<;;<<<<<<<8<<;9<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:3:87:133:930 163 chr1 1044 99 40M = 1198 194 TTATCTGCACATTACTACCCTGCAATTAATATAATTGTGT <<<7<<<<;<<;7<<7<<;;<<<;<5;<;;;5;;<:/48: MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:44:1466:425 163 chr1 1044 99 35M = 1213 204 TTATCTGCACATTACTACCCTGCAATTAATATAAT <<<<<<<<<<<<<<<<<<<<<;<<<<<<;<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:236:498:526 83 chr1 1048 99 35M = 895 -188 CAGCACATTACTACCCTGCAATTAATATAATTGTG <%88<;<:8<<<<:<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_64:3:143:310:958 83 chr1 1048 99 35M = 868 -215 CTGCACATTACTACCCTGCAATTAATATAATTGTG 84<;<6<<<<;<<<;;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:312:837:406 83 chr1 1048 99 35M = 889 -194 CTGCACATTACTACCCTGCAATTAATATAATTGTG ;<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:166:42:147 147 chr1 1048 99 35M = 898 -185 CTGCACATTACTACCCTGCAATTAATATAATTGTG 3.7;;;;:<<<77<<3<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:279:763:945 99 chr1 1048 99 36M = 1210 198 CTGCACATTACTACCCTGCAATTAATATAATTGTGT <<<<<<<<<<<<<<<<<<<4:<<47<:<;<<</<9< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:82:998:566 163 chr1 1050 99 35M = 1227 212 GCACATTACTACCCTGCAATTAATATAATTGTGTC <<<<<<<:<<0<<<<:<82<<::<4<<;<<4<4<; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:228:587:504 147 chr1 1050 65 35M = 891 -194 GCACATTACGACCCGGCAAGGTGTATAATTGTGTC ;4;4;&&82&04+&&48;3&3&*<7<47<<;-<-8 MF:i:130 Aq:i:65 NM:i:6 UQ:i:47 H0:i:0 H1:i:0
--B7_595:6:290:270:557 147 chr1 1052 99 35M = 880 -207 ACATTACTACCCTGCAATTAATATAATTGTGTCCA 87:9;;;<851+:5.<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:134:243:630 83 chr1 1052 99 35M = 871 -216 ACATTACTACCCTGCAATTAATATAATTGTGTCCA 63<;37:<*&:<<<,,*<<:7<<7<<<<<<<::<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:47:303:887 163 chr1 1052 96 35M = 1240 223 ACATTACTACCCTGCCATTAATATACTTGTGTCCA <<;;<+<9<<<<<9<(6<;//</<8(<<89;6084 MF:i:18 Aq:i:25 NM:i:2 UQ:i:14 H0:i:0 H1:i:0
--EAS221_3:8:74:770:1712 163 chr1 1052 99 35M = 1208 191 ACATTACTACCCTGCAATTAATATAATTGTGTCCA <<<<<<<<<<<<<<<<<<<5<<<<<<<<<<<<7<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:29:575:453 163 chr1 1056 99 36M = 1228 208 TACTACCCTGCAATTAATATAATTGTGTCCATTTAC <<<<<<<<<<<<<<<<<<<<<<<<7<1<:<9<&<98 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:5:318:177:383 163 chr1 1056 99 35M = 1251 230 TACTACCCTGCAATTAATATAATTGTGTCCATGTA ;<<<<<<<<;<<<<<<<<<<<<<<<<<<7<;1'<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:179:549:753 99 chr1 1056 99 35M = 1218 197 TACTACCCTGCAATTAATATAATTGTGTCCATGTA <<<<<<<<<<<<<<<<<<<<<<<<8<7<<<:<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:30:816:90 83 chr1 1057 99 35M = 885 -207 ACTACCCTGCAATTAATATAATTGTGTCCATGTAC :<3:%9299<<<<<<<<<5<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:178:77:424 147 chr1 1058 99 35M = 900 -193 CTACCCTGCAATTAATATAATTGTGTCCATGTACA :5:8<;<;:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:301:54:240 83 chr1 1061 99 35M = 882 -214 CCCTGCAATTAATATAATTGTGTCCATGTACACAC &..*3===1=========5.5==5===4====:5= MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:91:521:517 99 chr1 1061 99 35M = 1239 213 CCCTGCAATTAATATAATTGTGTCCATGTACACAC <<<<<<<<<<<<<<<<9<<<<<<<<<<8<<;;;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:24:1374:211 147 chr1 1064 99 35M = 915 -184 TGCAATTAATATAATTGTGTCCATGTACACACGCT 77661;;;5;;:;;:;:;;;;;;8:;;;:;;;;;: MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:282:567:481 147 chr1 1064 88 35M = 880 -219 TGCAATTAATATAATTGTGTCCACGTACACACGCT <9<6<;<9<<<;<<<;<5<7<5</7<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS188_7:4:171:104:398 83 chr1 1066 99 35M = 885 -216 CAATTAATATAATTGTGTCCATGTACACACGCTGT 79<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:9:80:353 163 chr1 1067 99 35M = 1233 201 AATTAATATAATTGTGTCCATGTACACACGCTGTC <<<<<<<<<<<<<<<<<<<<<6<<<;;<<5<<2;2 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:42:920:522 163 chr1 1067 99 35M = 1244 212 AATTAATATAATTGTGTCCATGTACACACGCTGTT <<<<<<<<<<<<<:<<<<<<<:<<<<<<<:;;::& MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_95:3:308:956:873 147 chr1 1068 99 35M = 870 -233 ATAAAAATAAGTGTGTCCATGTACACACGCTGTCC 91.97&9499&-1*98*19999839999.9&9799 MF:i:18 Aq:i:31 NM:i:3 UQ:i:23 H0:i:0 H1:i:1
--EAS139_19:6:84:438:1505 147 chr1 1068 99 40M = 893 -215 ATTAATATAATTGTGTCCATGTACACACTCTGTCCTATGT :0::413::;:::0:179::3<;<:<9<&6<<<;<019<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS51_62:3:55:340:837 163 chr1 1069 99 35M = 1238 204 TTAATATAATTGTGTCCATGTACACACGCTGTCCT <<;<<;<<<<<8<;<<<;<7<<<;<<<<<93+79( MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:262:965:756 147 chr1 1069 99 35M = 885 -219 TTAATATAATTGTGTCCATGTACACACGCTGTCCT <<:<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:18:571:1110 147 chr1 1070 99 35M = 888 -217 TAATATAATTGTGTCCATGTACACACGCTGTCCTA 9<<;<;==;;=;=<;<=================== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:40:918:950 163 chr1 1071 99 35M = 1247 211 AATATAATTGTGTCCATGTACACACGCTTTCCTTT =========,=9=====2=7===7=0==&=+3=-= MF:i:18 Aq:i:65 NM:i:2 UQ:i:17 H0:i:1 H1:i:0
--EAS1_97:2:59:882:980 163 chr1 1071 99 35M = 1263 227 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <<<<<<<<<8<<<<<9<+<<<9<<<1<<77889+6 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:134:853:558 83 chr1 1071 99 35M = 880 -226 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <<<<8<<<7<<<<;;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:278:906:933 147 chr1 1071 99 35M = 920 -186 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <88::<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:12:402:843 83 chr1 1072 99 35M = 885 -222 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <7<+<<11<9<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:160:434:853 163 chr1 1072 99 35M = 1259 222 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <<<<<<<<<<<<<<<<<<<<<<,<<<<:<<<<,<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:55:8:1412 83 chr1 1072 99 35M = 910 -197 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:219:294:861 163 chr1 1073 99 35M = 1244 206 TATAATTGTGTCCATGTACACACGCTGTCCTCTGT <<<<<<<<<<<<<9<<<5<9<<<9<<544<<'<+: MF:i:18 Aq:i:69 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS220_1:4:14:1665:1772 163 chr1 1073 84 35M = 1263 225 TATAATGGTGTCCATGTACACACGCTGTCCTATGT <<<<<7*<<<<<<<<<78<5<<7<<5<556<(73( MF:i:18 Aq:i:39 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--B7_591:3:45:294:380 163 chr1 1074 80 36M = 1233 195 ATAATTGTGTCCATGTACACACGATGTCATATGTAC <<<<<<<<9<<<<<<<<<70<<7<6272&:3<+</% MF:i:18 Aq:i:39 NM:i:2 UQ:i:32 H0:i:0 H1:i:1
--EAS1_108:7:222:538:267 99 chr1 1074 99 35M = 1228 189 ATAATTGTGTCCATGTACACACGCTGTCCTATTTA <<<<<<<<<<<<<<<<<<<<<;<<<<74;;39%6+ MF:i:18 Aq:i:67 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:216:381:608 83 chr1 1075 99 35M = 920 -190 TAATTGTGTCCATGTACACTCGCTGTCCTATGTAC 55<99<<<99;<;<<(<39&7<<<<<<<<<<<<<9 MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_67:1:138:186:274 99 chr1 1075 99 35M = 1231 191 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC =39====9===;=;=;=9=;=====;===-=+=-7 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:43:1120:878 147 chr1 1075 99 35M = 895 -215 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC <<<;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:166:776:590 163 chr1 1075 99 35M = 1252 212 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC <<<<<</<<<<<<<<<<<<<'<=<:26.</79<:: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:76:333:905 83 chr1 1076 99 35M = 929 -182 AATTGTGTCCATGTACACACGCTGTCCTATGTACT <<;<<<<;7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:29:249:878 83 chr1 1077 99 35M = 921 -191 ATTGTGTCCATGTACACACGCTGTCCTATGTACTT <,;<9<;<:<<<<<<<<<<<<<<<<<<<<<<><<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:190:95:706 147 chr1 1078 99 35M = 920 -193 TTGTGTCCATGTACACACGCTGTCCTATGTACTTA 9;97437;<;;<<;<;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:101:825:28 83 chr1 1079 99 35M = 879 -235 TGTGTCCATGTACACACGCTGTCCTATGTACTTAT 0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:188:460:1000 99 chr1 1080 99 35M = 1251 206 GTGTCCATGTACACACGCTGTCCTATGTACTTATC <<<<<<<<<<<<<<<<7<<;:4;44<;;:8;;9;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:268:523:511 99 chr1 1081 99 35M = 1241 195 TGTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<;<<<<6<:9<<3<44 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:54:263:585 99 chr1 1081 99 36M = 1254 209 TGTCCATGTACACACGCTGTCCTATGTACTTATCAT <<<<<<<<<<<<<<<<<<<:;<<;<:;::<<;;:;4 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:174:987:334 83 chr1 1082 99 35M = 908 -209 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ,;<;;<<<&<<<1<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:224:932:942 99 chr1 1082 99 34M = 1250 203 GTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3, MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:12:1296:358 99 chr1 1082 96 35M = 1252 205 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ;;;6;7;7;;;;;7;9;;-*1;9;699/99/7477 MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:306:119:56 147 chr1 1083 99 35M = 919 -199 TCCATGTACACACGCTGTCCTATGTACTTATCATG ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:66:179:118 163 chr1 1084 99 35M = 1262 213 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;<<6<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:110:584:649 99 chr1 1084 99 35M = 1266 217 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<::<38 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:28:315:310 163 chr1 1085 99 35M = 1242 192 CATGTACACACGCTGTCCTATGTACTTATCATGAC <<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:242:4:593 147 chr1 1086 99 35M = 905 -216 ATATACACACGCTGTCCTATGTACTTATCATGACT 1.%55877+8+88808887+7;7;18:8;;;.&;8 MF:i:18 Aq:i:53 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:131:946:353 163 chr1 1087 99 35M = 1249 197 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<;<<<<;;<<<<<<<;<:52;<2 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:4:1732:88 99 chr1 1087 99 35M = 1265 213 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<<<<<2<8;8<;<8;<2;2:<:< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:58:703:72 83 chr1 1088 99 35M = 905 -218 GTACACACGCTGTCCTATGTACTTATCATGACTCT 5&<<7;+95;7'6<<<<<.<<<<<;<<9<7<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:113:694:725 163 chr1 1088 99 35M = 1266 213 GTACACACGCTGTCCTATGTACTTATCATGACTCT <<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:278:848:765 147 chr1 1088 99 35M = 920 -203 GTACACACGCTGTCCTATGTACTTATCATGACTCT 7;;<;5<55<<;;<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:234:787:12 163 chr1 1092 97 35M = 1257 200 ACACGCTGGCCTATGTACTTATAATGACTCTATCC <;<<<9<<&+9;3;<993;<9<+94;9&41;08%9 MF:i:18 Aq:i:24 NM:i:2 UQ:i:15 H0:i:0 H1:i:0
--EAS218_1:4:15:856:340 147 chr1 1093 99 35M = 936 -192 CACGCTGTCCTATGTACTTATCATGACTCTATCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:258:266:101 163 chr1 1094 99 35M = 1285 226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA <<<<<<<<<<<<<<<<<<5<;,<-2<<<<;68<<6 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:552:234 147 chr1 1094 99 35M = 903 -226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA ::;:=;=99=====;;====;==========<=== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:134:379:893 147 chr1 1095 99 35M = 927 -203 CGCTGTCCTATGTACTTATCATGACTCTATCCCAA 7137::;<<<<<<<;<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:256:404:584 147 chr1 1096 99 35M = 928 -203 ACTGTCCTATGTACTTATCATGACTCTATCCCAAA &&326+23<3<<<+:<</<<8<<<:7:<<<<<<<< MF:i:18 Aq:i:60 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_30:4:317:378:535 163 chr1 1096 99 35M = 1258 197 GCTGTCCTATGTACTTATCATGACTCTATCCCAAA <<<<<<<<<<<<:<<<<<<<<<;<<;<8<;:7:1( MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:277:482:316 83 chr1 1098 99 35M = 894 -239 TGTCCTATGTACTTATCATGACTCTATCCCAAATT 9998;<<<<<;;<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:273:901:459 147 chr1 1098 99 35M = 938 -195 TGTCCTATGTACTTATCATGACTCTATCCCAAATT 4;+/+7,;<8+&<;;82;;<8<8<2<;<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:316:25:230 163 chr1 1098 99 35M = 1273 210 TGTCCTATGTACTTATCATGACTCTATCCCAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<);2;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:24:195:604 83 chr1 1098 99 35M = 923 -210 TGTCCTATGTACTTATCATGACTCTATCCCAAATT ;6<02;<<<<59<<;<;<<<<9<3<<<<<<<<<;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:42:923:169 83 chr1 1099 99 35M = 925 -209 TTCCTATGTACTTATCATGAATCTATCCCAAATTC &;972<;&<9<,;;;<<<;<&99<<;<;;3<<3<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:10 H0:i:0 H1:i:1
--EAS114_45:6:59:1548:1096 163 chr1 1099 99 35M = 1297 233 GTCCTATGTACTTATCATGACTCTATCCCAAATTC ;.;;;;;;;;6;;;;;;;;;;;;;;;73;;77777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:136:389:320 147 chr1 1100 99 35M = 930 -205 TCCTATGTACTTATCATGACTCTATCCCAAATTCC .5:,666<)<8<:<<:66<<<<<<<<<<5<<7<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:122:342:296 99 chr1 1100 99 35M = 1256 191 TCCTATGTACTTATCATGACTCTATCCCAAATTCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<*<<<<9< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:259:467:737 83 chr1 1102 99 36M = 923 -215 CTATGTACTTATCATGACTCTATCCCAAATTCCCAA 8<<<<<<<:<<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:71:832:743 163 chr1 1102 99 35M = 1290 223 CTATGTACTTATCATGACTCTATCCCAAATTCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<*<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:105:521:563 163 chr1 1103 72 35M = 1267 199 TATGTACTTATCATGACTCTATCCCAAATTCCCAA ;<)<9995<9<<59<7<<<<7<7<35,0,544<3( MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:201:195:757 163 chr1 1103 99 35M = 1298 230 TATGTACTTATCATGACTCTATCCCAAATTCCCAA <<<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;;8 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:6:585:132 163 chr1 1105 23 36M = 1276 207 TGTACTTATCATGTTTCTTTCCTAATTTTTCAATTA 6666166&6)+61))646+6&)&%&-44))1'144' MF:i:130 Aq:i:23 NM:i:7 UQ:i:59 H0:i:0 H1:i:0
--EAS1_105:2:179:532:82 99 chr1 1105 99 35M = 1285 215 TGTACTTATCATGACTCTATCCCAAATTCCCAATT <<<<<<<<<<<<<<<<<<<<3<;<;<<<<:<8<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:11:646:628 147 chr1 1106 99 36M = 930 -212 GTACTTATCATGACTCTATCCCAAATTCCCAATTAC <<<3<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:93:334:858 147 chr1 1106 99 35M = 932 -209 GTACTTATCATGACTCTATCCCAAATTCCCAATTA ;<;+;;<<;<<<<<;<<<<;;8<<<<8<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:26:785:882 83 chr1 1107 99 35M = 926 -216 TACTTATCATGACTCTATCCCAAATTCCCAATTAC <<&5&<<<<5.;5<'<<;.76<<<<<7<7<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:4:54:989:654 99 chr1 1108 99 35M = 1296 223 ACTTATCATGACTCTATCCCAAATTCCCAATTACG <<<<<<<<<<<<<<<9<<<<<<9<<<<<1<<<88; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:202:326:680 163 chr1 1108 78 35M = 1268 195 ACTTATCATGACTCTATCCCAAATTCTCAATTACG <<<<<<<4<<<*<<<*<<<7..:7<3*:7.7<+.; MF:i:18 Aq:i:37 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--B7_597:3:53:616:842 163 chr1 1109 99 35M = 1288 214 CTTATCATGACTCTATCCCAAATTCCCACTTACGT <<<<<<<<<<<<<<<<<<<;07<<<<<-&<<-<4; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_71:4:209:159:130 147 chr1 1109 99 35M = 934 -210 CTTATCATGACTCTATCCCAAATTCCCAATTACGT ;:6<:<8::;<<<;<-<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:75:917:886 83 chr1 1110 99 35M = 951 -194 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<8<<<<<<8<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:286:753:854 163 chr1 1110 99 35M = 1288 213 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<<<<<<<<<<<<<<<3<<<<<<9999<;<<9; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:290:146:36 99 chr1 1110 99 35M = 1280 205 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<<<<<<<<<<<<<<<<<<<<8<<<<<;;<;;< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:93:1475:542 163 chr1 1110 99 35M = 1254 179 TTATCATGACTCTATCCCAAATTCCCAATTACGTC ;;;;;;;;;;;;;;;;;;;;;;9;;;9;;;77777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:77:251:446 83 chr1 1110 99 35M = 939 -206 TTATCATGACTCTATCCCAAATGCCCAATTACGTC <<24,:8<<<:1<<<:35<:<:,<<<<<<:5:<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS1_105:3:176:431:647 163 chr1 1112 99 35M = 1285 208 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <<<<<<<<<<<<<<<<2<<<<<<<<6<<<<9<<6< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:111:796:737 147 chr1 1112 99 35M = 936 -211 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <3<<<<<<<<<<<7<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:228:189:826 147 chr1 1112 99 35M = 914 -233 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT :74=:.==1========================== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:35:631:594 163 chr1 1112 99 35M = 1271 194 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:29:529:379 83 chr1 1117 99 35M = 926 -226 GACTCTATCCCAAATTCCCAATTACGTCCTATCTT ;<<<:<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:74:596:137 99 chr1 1119 91 35M = 1294 210 CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT <<<<<<<<<</4<<<<<<*<:6<<<<<<<<;/3<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:92:1807:1185 147 chr1 1119 99 35M = 940 -214 CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT <<<<<<9<<<<<<<<<<<<<<<<<<<<<<><<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:57:735:151 99 chr1 1121 94 35M = 1314 228 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<<<<8<<8<:<<*<:<<<4<<<;,<<<<:<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:142:858:903 147 chr1 1121 99 35M = 943 -213 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:247:522:670 83 chr1 1121 99 35M = 960 -196 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC ;;;9;:<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:75:732:442 99 chr1 1121 99 40M = 1293 212 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<;<<<<<9<<<;<<;<<<5<<;8<<<<<<<<;:9%% MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:183:645:699 99 chr1 1122 86 35M = 1281 194 TATCCCAAATTCCCAATTACGTCCTATCTTCTTCT <<9<9<<<<<<<<<;<<;<<*175;173<;;;<-/ MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:175:437:950 163 chr1 1126 99 35M = 1298 207 CCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:59 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:93:1002:845 83 chr1 1129 99 35M = 954 -210 AATTCCCAATTACGTCCTATCTTCTTCTTAGGGAA <<::;;;<<<<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:50:542:881 163 chr1 1132 99 35M = 1324 227 TCCCAATTACGTCCTATCTTCTTCTTAGGTAAGAA <<<<<4<09<<9<<2<<<<<<<<<<<2/.&2<%<7 MF:i:18 Aq:i:63 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_99:3:118:851:285 83 chr1 1133 99 35M = 953 -215 CCCAATTACGTCCTATCTTCTTCTTAGGGAAGAAC 3+7<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:67:191:668 147 chr1 1134 99 35M = 995 -174 CCAATTACGTCCTATCTTCTTCTTAGGGAAGAACA <<<<<7<<7<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:166:203:416 83 chr1 1136 99 35M = 963 -208 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC <<<<<<<<::<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:15:1497:1530 99 chr1 1136 99 35M = 1314 213 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC 0<;;;9;;86<;;;<<&<<.<<;)3;7;654-471 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:206:563:262 83 chr1 1137 99 35M = 971 -201 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:40:352:151 99 chr1 1137 99 35M = 1327 225 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:67:302:762 99 chr1 1138 99 36M = 1313 211 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<;;65;<-<;<:8<<<3 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:84:927:843 147 chr1 1138 99 35M = 938 -235 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTT 588;<:<<<<<<<6<<<<;<<<:/<<3<:;<*<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:147:479:41 163 chr1 1139 99 35M = 1322 218 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<::6<<;<<<;;9;;6 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:329:177:267 83 chr1 1139 99 35M = 962 -212 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:72:916:763 163 chr1 1142 99 35M = 1340 233 GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT </:8<8)<<<<:<<<<<;.89<:67<.;<<7+336 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:124:128:489 99 chr1 1142 99 35M = 1348 241 GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT <<<<<<<<<<<<<<<<<6:6<<-4<::;;<<:48< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:39:59:738 83 chr1 1142 99 35M = 965 -212 GTCCTATGTTCTTCTTAGGGAAGAACAGCTTAGGT ;.;4;<;3<<9<<9<&<<9<<<<<;<9<;<<;9<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS1_99:6:63:48:631 83 chr1 1143 99 35M = 957 -221 TCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTA ;*:;;<2<<2779;:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:274:176:479 147 chr1 1144 99 35M = 976 -203 CCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTAT 7)<<7<626<<7<<<<<<<<<<<<<<<<<<<3<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:72:1809:1398 147 chr1 1145 99 35M = 958 -222 CTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATC ;:;;:<7:7<:<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:235:805:373 83 chr1 1146 99 35M = 983 -198 TATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCA <<;<<<<<<9<9<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:269:944:220 83 chr1 1147 99 35M = 953 -229 ATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAA <;<;8<<;7<<<<<;<<-<<<<<<;<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:174:597:66 163 chr1 1148 99 35M = 1307 194 TCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAAT <<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;6;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:229:717:121 147 chr1 1150 99 35M = 995 -190 TTCTTCTGAGGGAAGAACAGCTTAGGTATCAATTT 6;-;7<<(<<<<<8<18<7<<<<<<<<<;<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS56_53:1:23:403:981 147 chr1 1151 99 35M = 985 -201 TCTTCATAGGGAAGAACAGCTTAGGTATCAATTTG (;3+<&3<</7<<<<<<;<<<<<<<<<<<<</<2< MF:i:18 Aq:i:65 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS112_32:7:168:117:441 147 chr1 1151 99 35M = 990 -196 TCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTG ;;;;3;<<<<<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:52:1455:1212 99 chr1 1153 99 40M = 1304 191 TTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCT <9<<<99<;<<9<;<-<<<6<<75;;<*%<5<3+.8:*5; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:37:400:627 83 chr1 1154 99 35M = 961 -228 TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTG 474*;<<9<;<<<;<<:<<<<<<;<<<<<<;<<;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:11:868:62 147 chr1 1154 99 36M = 983 -207 TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGT ;;77;;7<<<<<<<<7<<<;<7<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:209:92:210 83 chr1 1156 99 35M = 965 -226 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT ;9;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:128:394:455 163 chr1 1156 99 35M = 1313 192 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT ======6==========;===9==;5===;==;== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:316:949:122 99 chr1 1156 99 35M = 1321 200 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<0<:<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:60:1020:1259 147 chr1 1157 99 35M = 996 -196 TAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:193:38:987 83 chr1 1158 99 35M = 964 -229 AGGGAAGAACAGCTTAGGTATCAATTTTGTGTTCT <<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_93:5:292:122:666 147 chr1 1159 99 35M = 985 -209 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG <;<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:280:512:316 83 chr1 1159 99 35M = 984 -210 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG ;9===;======;7==;;======;=====;==== MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:207:926:427 83 chr1 1159 99 35M = 973 -221 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG ;;7<<;4<<<2<<;<<<<<<<<<<7<;<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:239:796:221 83 chr1 1160 99 35M = 992 -203 GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT ;;<<;<<;<<<+:<<<4<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:142:457:584 147 chr1 1160 99 35M = 999 -196 GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT 8::<:<<9<<.<:<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:190:481:295 83 chr1 1161 99 35M = 990 -206 GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG ;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:86:308:648 147 chr1 1161 99 35M = 970 -226 GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG <7<<<;<<<<+;<<<2<5<<<77;<<2<;;<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:182:23:585 99 chr1 1163 99 35M = 1336 208 AGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:216:650:516 99 chr1 1164 99 36M = 1326 198 GAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:15:805:420 83 chr1 1164 35 35M = 998 -201 GAACAGTTTAGGTATCAATTTGGTGTTCTTTGTAA <64<59&996<(64<)7).68<0<0<<7741<1:< MF:i:18 Aq:i:35 NM:i:2 UQ:i:24 H0:i:0 H1:i:1
--EAS56_65:6:82:822:767 147 chr1 1165 99 35M = 972 -228 AACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA <<9<<<<<<<<<<;;<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:33:1566:588 147 chr1 1166 76 35M = 985 -216 ACAGCTTAGGCATCAATTTGGTGTTCTGTGTAAAG -6246;;97;77;;97;;;;;;9;7;79;)&;37; MF:i:18 Aq:i:37 NM:i:1 UQ:i:22 H0:i:0 H1:i:1
--EAS1_93:1:20:635:509 163 chr1 1167 99 35M = 1333 201 CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT <<<<<<<<<;<<<<;<<<;<;;;<<<;<<<<<<(8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:144:28:475 147 chr1 1167 99 35M = 974 -228 CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT ;;;9;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:36:1402:1709 163 chr1 1168 99 35M = 1326 193 AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC <<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<:9<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:34:956:1309 147 chr1 1168 99 35M = 994 -209 AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC 9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:157:784:936 163 chr1 1169 99 35M = 1356 222 GCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCT <<<<<<<<<<<<<<<<<:<<<<<<;<<<<814<4< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:2:152:860:286 83 chr1 1171 99 35M = 1004 -202 TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCA 2;5;8<<;5<<<;<2<8<<<<<<;8<;<<<<;<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:157:786:424 147 chr1 1171 99 36M = 981 -226 TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG ;<;2;;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:33:1407:94 163 chr1 1172 99 35M = 1360 223 TAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG ;;;;;;;6:;;:::7;:;;;;:::;;;;:;47771 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:302:288:657 147 chr1 1173 99 35M = 1013 -195 AGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGG <:5<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:233:97:262 147 chr1 1175 99 35M = 1021 -189 GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA --;;7<;<;;:;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:67:692:110 147 chr1 1175 99 35M = 1009 -201 GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA ;;<<8<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:68:692:347 163 chr1 1176 99 36M = 1351 211 TATCAATTTGGTGTTCTGTGTAAAGTCTCATGGAGC <<<<<<<<<+6<;<<<<3<:<<<<6<8<<<&*/;*0 MF:i:18 Aq:i:64 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS51_64:3:309:303:278 83 chr1 1178 99 35M = 996 -217 TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC <:<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:21:132:1423 147 chr1 1178 99 35M = 1012 -201 TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC :<<<<<6<<;<<;<5<;<<<<<<;<6<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:63:854:610 83 chr1 1180 99 35M = 1005 -210 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT :.5;2<:88<<72:<<;<<7<8;<;/<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:182:313:319 147 chr1 1180 99 35M = 1016 -199 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT </<;185;8<;;87<;8<<<<8<;83<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:62:603:1552 83 chr1 1180 99 35M = 1019 -196 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT 8::;:<<6<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:145:144:796 99 chr1 1181 99 35M = 1372 226 ATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTC <<<<<<<<<<<<<<;<<<<<<;<<<<<<4;4;<;/ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:41:474:283 147 chr1 1182 99 35M = 1018 -199 TTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCC 6/;;;88;;<:;48<<<<<;<;<<<<<<<<<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:329:458:365 99 chr1 1186 99 35M = 1364 213 GTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGT ==========================9======== MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:159:222:274 147 chr1 1189 99 35M = 1019 -205 GTCTGGGGAAAGTCTCAGGGAGCCGTCCGTGTCCT ''7*<&<'<<<<.<2<<<<<<<<<<+<<<8<8<<; MF:i:18 Aq:i:37 NM:i:3 UQ:i:17 H0:i:0 H1:i:1
--EAS114_32:6:88:162:587 99 chr1 1189 99 35M = 1372 218 TTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCT <;<<<<<<<<<;<5<;<;<<7<++<<2&*:322+7 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:148:340:479 99 chr1 1190 99 35M = 1364 209 TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC <<<<<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:12:276:1797 147 chr1 1190 99 35M = 1006 -219 TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC )9<02)<<<<<<<<<<<<<1<<<<&<<<<9<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:190:42:671 83 chr1 1192 99 36M = 1008 -220 TGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA <<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:321:271:138 99 chr1 1193 99 35M = 1394 236 GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA <<<<<<<<<<<<<<<<<<<<<;9<<;<<;;<88;& MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:154:669:853 163 chr1 1193 99 35M = 1371 213 GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA ============<===.====<:=<9=<<<9;:;2 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:287:258:321 147 chr1 1194 99 35M = 1030 -199 TGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCAT :.<9<)<;<9<.<<:<:+5:<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:61:183:767 147 chr1 1195 99 35M = 1010 -220 GTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATC 6&.;;<3<363<<<<<<<<8<<<6<<<<3<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:29:794:282 83 chr1 1196 99 36M = 1025 -207 TAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG 7<<<<45::-<<<<<;<<-;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:313:827:992 99 chr1 1197 99 35M = 1379 217 AAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG <<<<6<<<<:<<<<<66<<<:33:<<<80<;6<8+ MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:196:11:27 83 chr1 1198 65 36M = 1035 -199 AAGACCCAGTTAGCCGTCCGTGTCCTCCCATCTGGC 96&6<'<7:!!<,:;+7<<6:<<<<<<<<<7<7;:< MF:i:18 Aq:i:24 NM:i:4 UQ:i:27 H0:i:0 H1:i:0
--EAS139_19:3:87:133:930 83 chr1 1198 99 40M = 1044 -194 CAGTCTCAGGGCGCCGTCCGTTTCCTCCCATCTGGCCTCG )8&)907)-;9&,<<9)<;<<0<;<<99<<<<<<;<<9<< MF:i:18 Aq:i:39 NM:i:3 UQ:i:28 H0:i:0 H1:i:1
--EAS114_45:7:97:1584:777 147 chr1 1200 99 35M = 1013 -222 GTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCC 66746,9::9;;;;:;;;;;;;;;;;;;;;:;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:127:153:861 99 chr1 1202 99 35M = 1374 207 CTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTC <<<<<<<<<<<<<<<<<<<<<<<=<*<<<24;;:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:157:42:763 83 chr1 1203 99 35M = 1040 -198 TCTGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCG 4++;((2(5;24<./<:<<<<<<<<;<<88<<<<9 MF:i:18 Aq:i:61 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:4:91:267:655 99 chr1 1204 99 35M = 1365 196 CAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGT <<<<<<<<<<<<<<<<<<<<<;:;;7<9477<74; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:39:966:551 147 chr1 1205 99 35M = 1026 -214 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC 8;;;;;<<6'<<<+8<<<1<<<<4<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:61:38:1182 163 chr1 1205 99 35M = 1388 218 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:47:352:1492 99 chr1 1205 99 40M = 1385 220 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGCCCACTA :<<<::<24<04-&<;<<2<<<&<60)&<5<<6*8:)9+* MF:i:18 Aq:i:53 NM:i:3 UQ:i:28 H0:i:1 H1:i:0
--EAS221_3:8:74:770:1712 83 chr1 1208 99 35M = 1052 -191 GAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCAC 3.&::6<<<9<6:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:279:763:945 147 chr1 1210 99 36M = 1048 -198 GCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT +9:-+<:1-44<<':<;<+<-<<<;:<<;;<<<<<0 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:306:388:342 163 chr1 1211 99 35M = 1398 222 CCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT ================5====:=====;==1=4== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:180:905:36 147 chr1 1212 99 35M = 1033 -214 CCTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG 6%%<;<662<<*;<<<8<<:<<<<<<<<<<<<<<; MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:2:19:752:816 99 chr1 1212 99 35M = 1394 217 CGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG <<<<<<<<<<<<<<<<<<<8<7;<;<<767277;6 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:305:565:952 147 chr1 1213 99 36M = 1030 -219 GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT 5(<1<147<81<*8--8<<<7<91<<<;+<+<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:44:1466:425 83 chr1 1213 99 35M = 1044 -204 GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGG 6-<<9<<:<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:68:64:783 163 chr1 1214 99 35M = 1402 223 TCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT <<<<<<<<<<<<<<<<<;;<<<<<<;<<<9:<<:9 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:64:37:257 163 chr1 1215 99 35M = 1389 209 CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT ================<=====;===8;4====== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:20:413:1334 99 chr1 1215 99 35M = 1370 190 CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT 7<<;<<<.;<;67;7;;;:;;3;<59+...77677 MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:179:549:753 147 chr1 1218 99 35M = 1056 -197 TGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTC :77<</<<<::<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:16:823:343 99 chr1 1223 99 35M = 1403 215 TCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAA ================================4== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:266:556:252 99 chr1 1224 99 35M = 1392 203 CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA <<<<<<<<<<<<<<<<<;<<<<<<4;;<;;;<7;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:278:524:521 83 chr1 1224 99 35M = 1025 -234 CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA 7777,<;<<7<<<<;;<<;;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:72:1426:1883 99 chr1 1226 99 35M = 1405 214 CATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:82:998:566 83 chr1 1227 99 35M = 1050 -212 ATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCT <9<9<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:29:575:453 83 chr1 1228 99 36M = 1056 -208 TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTG ;<<<;;<:<<<;<;<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:222:538:267 147 chr1 1228 99 35M = 1074 -189 TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTT 52/8-<<7<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:138:186:274 147 chr1 1231 99 35M = 1075 -191 GGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGG <;<<<<<6;<<<<<3<<36;3;<9<<<<<<3;<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:137:895:681 99 chr1 1232 99 35M = 1418 221 GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<-8<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:71:636:533 99 chr1 1232 99 35M = 1398 201 GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC <<<<<<<<<<<<<<<<<<<<<<<7<<<5<<<-847 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:45:294:380 83 chr1 1233 80 36M = 1074 -195 CCTCGTCCACACTGGTTCGCTTGAAAGCTTGGGCTG ;<+<7<<<<;7<,<7<<<+/7;<<;<<;7<<<;<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_66:8:9:80:353 83 chr1 1233 99 35M = 1067 -201 CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT ;;5;:8<:<:;:;<<<<;<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:73:302:1574 99 chr1 1233 99 35M = 1429 231 CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT <<<<<<<<<<;<<<<<<<<<<<<+:;<<;:8;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:131:779:345 163 chr1 1237 99 35M = 1399 197 GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA ============================9====;= MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:159:71:155 99 chr1 1237 99 35M = 1428 226 GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA =========;=<======;=:=3;==;=6<==;=; MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:55:340:837 83 chr1 1238 99 35M = 1069 -204 TCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAAT 61378<::<<<5:<;;:<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:91:521:517 147 chr1 1239 99 35M = 1061 -213 CCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATG 8;8<4=:===7===9=============<====== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:47:303:887 83 chr1 1240 96 35M = 1052 -223 CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA <;<6<;<;<8<<<8<<<<;<<<.<<<<<<<8<8;< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:74:570:695 163 chr1 1240 99 35M = 1436 231 CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA =========================7====;8<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:268:523:511 147 chr1 1241 99 35M = 1081 -195 ACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGAT 8<7<99<<<<<<<<<:<<<<<<4<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:319:174:811 147 chr1 1242 99 35M = 1044 -233 CACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATG ;7;3<<3.<<<<<<<<<<<4<<<<<<<<<<<<<0< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:28:315:310 83 chr1 1242 99 35M = 1085 -192 AAACTGTTCTCTTGAAAGCTTGGGCTGTAATGATG +%,768<<:<:<2<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:4 UQ:i:70 H0:i:1 H1:i:0
--EAS1_108:1:328:614:638 99 chr1 1243 99 35M = 1428 220 ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGC <<<<<<<<<<<<<<<<<<<<4/;<<9<<<<7<<*: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:63:930:152 163 chr1 1243 99 35M = 1410 202 ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATTC <<<<;<<<<<<<7<<;::<<)726;)<99<)&;&+ MF:i:18 Aq:i:59 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_59:1:219:294:861 83 chr1 1244 99 35M = 1073 -206 CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC ;,;<;<<<;&<<<<<<<5<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:42:920:522 83 chr1 1244 99 35M = 1067 -212 CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC ;;;;;99<;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:87:89:696 99 chr1 1245 99 36M = 1419 210 TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCC <<<<<<<<<<<<<<<<<<<<<<<<<<;<:;<<<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:166:979:531 163 chr1 1245 99 35M = 1410 200 TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCC <<</<<<<<<<<<9<<9<<;<7<<<<9<<<9<,)6 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:40:918:950 83 chr1 1247 99 35M = 1071 -211 GTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCT =0=&&33======;=====.=============== MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:131:946:353 83 chr1 1249 99 35M = 1087 -197 TCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTG <<:<<66<<<6<<4<<<:8<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:224:932:942 147 chr1 1250 99 35M = 1082 -203 CTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGG <;<<;;<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:318:177:383 83 chr1 1251 99 35M = 1056 -230 TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC 5:9;7;777<<7<<<<<<<<<<<<<<<<<<<<<<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:188:460:1000 147 chr1 1251 99 35M = 1080 -206 TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC +;+077<7;<57<;;8<<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:12:1296:358 147 chr1 1252 96 35M = 1082 -205 CTTGAAAGCTTGGTCTGTAATGATGCCCCTTGGCC -770074;;6;&42;:2;;;:;;;;:;;/:;;;;: MF:i:18 Aq:i:37 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS188_4:5:166:776:590 83 chr1 1252 99 35M = 1075 -212 CTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCC <;:;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:54:263:585 147 chr1 1254 99 36M = 1081 -209 TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATC 1:::6<<<<;;;<4<<<<<<<<6<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:93:1475:542 83 chr1 1254 99 35M = 1110 -179 TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCAT 98987:9:<:;:;;;;;<<;<;<;;;;<<<;;;<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:122:342:296 147 chr1 1256 99 35M = 1100 -191 AAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCA <:;:<<<;<2<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:234:787:12 83 chr1 1257 97 35M = 1092 -200 AAGCTTGGGCTGTAATGATGCCCCTTGGCCATCAC ;;.<;;994<;9<<;;;<<<<<<<7<<<<<<<<<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:317:378:535 83 chr1 1258 99 35M = 1096 -197 AGCTTGGGCTGTAATGATGCCCCTTGGCCATCACC ;7;':<77<<;<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:160:434:853 83 chr1 1259 99 35M = 1072 -222 GCTTGGGCTGTAATGATGCCCCTTGGCCATCACCC ;;*4;<;<<<;<<<<<<<8<<<;<<<<<<<<8<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:18:1498:1475 163 chr1 1260 99 35M = 1427 202 CTTGGGCTGTAATGATGCCCCTTGGCCATCACCCG <<<<<7<<<<<<+<<-3<<3<:<2<1<<:<<<<<+ MF:i:18 Aq:i:71 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--B7_593:2:104:744:280 99 chr1 1262 64 36M = 1421 195 TGGGCTGTAATGATGCCCCTTGTCCATCACCCGGTC <<<<<<<<<<<<<<;<;<<<<:4<<4<<0<;80+;: MF:i:18 Aq:i:21 NM:i:2 UQ:i:34 H0:i:0 H1:i:1
--EAS1_95:4:66:179:118 83 chr1 1262 99 35M = 1084 -213 TGGGCTGTAATGATGCCCCTTGGCCATCACCCAGT <<99<<<<<<<<<<<<<<<<<<<9<<<:<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:277:194:143 99 chr1 1262 99 35M = 1444 217 TGGGCTGTAATGATGCCCCTTGGCCATCACCCGGT <<<<<<<<<<<;<<<<<<<<<<9;<<<8</<<6<: MF:i:18 Aq:i:72 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS1_97:2:59:882:980 83 chr1 1263 99 35M = 1071 -227 GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC 7339%<6<<<<<;<<9<<8<<<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS220_1:4:14:1665:1772 83 chr1 1263 84 35M = 1073 -225 GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC <&7<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_57:2:259:42:969 163 chr1 1265 99 35M = 1426 196 GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC <<<<<;<<;<<3<<<;9<36<<29;<<;;;</;<2 MF:i:18 Aq:i:69 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:4:4:1732:88 147 chr1 1265 99 35M = 1087 -213 GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC :<4<:<<:<::<<<<<::<<<<<:<:<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:2:110:584:649 147 chr1 1266 99 35M = 1084 -217 CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT ++:4686<<68<;<;<;<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_59:5:113:694:725 83 chr1 1266 99 35M = 1088 -213 CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT ;::<<:<:<<<<<<<<<<:<:<<<<<<;<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:8:58:369:244 163 chr1 1266 99 35M = 1436 205 CTGTAATGATGCCCCTTGGCCATCACCCAGTCCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:105:521:563 83 chr1 1267 10 35M = 1103 -199 TGTAATGCTGCCCCTTGGCCATCCCCCGGTCCCTG /8)-8/6(98<967<3<<979<<1<<<7<<<<7<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:45 H0:i:0 H1:i:0
--EAS188_4:5:202:326:680 83 chr1 1268 78 35M = 1108 -195 GTAATGATGCCCCTTGGCCATCACCCGGTCCCTGC +33<81<:*<;<;;30;<<<;<<<8<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS192_3:6:216:292:528 99 chr1 1269 99 35M = 1438 204 TAATGATGCCCCTTGGCCATCACCCAGTCCCTGCC <;<;<<<<<<<;<<<<<<<<;;;;:;;:<%<;1;: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1864:477 163 chr1 1270 99 35M = 1465 230 AATGATGCCCCTTGGCCATCACCCAGTCCCTGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:35:631:594 83 chr1 1271 99 35M = 1112 -194 ATGATGCCCCTTGGCCATCACCCGGTCCCTGCCCC <<<<4<<<<<.<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS112_34:8:103:812:255 99 chr1 1272 99 35M = 1461 224 TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCC <<<<<<<<<<<<<<<9<<;<<<39;;<;32:7;7+ MF:i:18 Aq:i:69 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS188_7:4:259:869:641 99 chr1 1272 99 35M = 1435 198 TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCA <<<<<<<<<<<<<<<<<<<<<,;<:<<<<<<<<<1 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:316:25:230 83 chr1 1273 99 35M = 1098 -210 GATGCCCCTTGGCCATCACCCGGTCCCTGCCCCAT 8;8;<<;<;;<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:6:38:1071:155 99 chr1 1274 99 35M = 1465 226 ATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATC <<<<<<<<<<<<<:<<<<<<<<8<<<:<<:;;8:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:6:585:132 83 chr1 1276 23 36M = 1105 -207 GCCCCTTGACCACCACCCAGTCCCTGCCCCATCTCT :<473$'<+5;7*+<7<&<37<7<<<<7;;7<<:<7 MF:i:18 Aq:i:23 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--B7_595:6:47:720:789 99 chr1 1278 90 35M = 1455 212 CCCTTGGCCATCACCCGGTCCCGGCCCCTTCTCTT <<72<<<<<<<<;;<7;,0<2;*7<2;<*;;<<64 MF:i:18 Aq:i:25 NM:i:3 UQ:i:44 H0:i:0 H1:i:0
--EAS192_3:6:185:868:496 163 chr1 1278 99 35M = 1442 199 CCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTT <<<<<<<<<<<<;<<<;<<<<<<<<<<<9<<;<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:290:146:36 147 chr1 1280 99 35M = 1110 -205 CTTTCCCATCCCCCGGTCCCTGCCCCATCTCTTGT 7;%%%<8-4<(<<<7<<<:<:<<<<<<<<<<<<<< MF:i:18 Aq:i:25 NM:i:4 UQ:i:37 H0:i:0 H1:i:0
--B7_593:5:267:71:603 99 chr1 1281 99 36M = 1446 201 TTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAA <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<9; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:183:645:699 147 chr1 1281 86 35M = 1122 -194 GTGGCCCTCCCCCATTCCCTGCCCCATCTCTTGTA &)))2-&420<<<'--<6:6-<7<<<+:7<65<<< MF:i:18 Aq:i:21 NM:i:4 UQ:i:37 H0:i:0 H1:i:0
--EAS1_105:2:179:532:82 147 chr1 1285 99 35M = 1105 -215 CCATCACCCGGTCCCTGCCCCATCTCTTGTAATCT <:96<6<<<<89<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:3:176:431:647 83 chr1 1285 99 35M = 1112 -208 CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT <(9(<<<7;<<7<<<<<<<7<<<<<<7<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:258:266:101 83 chr1 1285 99 35M = 1094 -226 CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT %==/7&8=======:===6================ MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:179:735:569 163 chr1 1286 99 35M = 1461 210 CATCACCCGGTCCCTGCCCCATCTCTTGTAATCTC <<<<<<<<<<<<<<<<<<<<3<<<<<<<<4/<;<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:3:200:712:439 163 chr1 1286 99 35M = 1435 184 CGTCACCCGGTCCCTGCCCCATCTCTTGTAATCTC <7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:49 H0:i:0 H1:i:0
--EAS1_103:5:319:165:698 99 chr1 1287 99 35M = 1485 233 ATCACCCAGTCCCTGCCCCATATCTTGTAATCTCT <<<<<<<<<<<<<<<<<<<3<9<<<<<<<;<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:24 H0:i:0 H1:i:1
--B7_597:3:53:616:842 83 chr1 1288 99 35M = 1109 -214 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:286:753:854 83 chr1 1288 99 35M = 1110 -213 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ;<2<<<,57:<<9<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:1256:204 99 chr1 1288 99 35M = 1467 214 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC <<<<<;;;;;;<;;;;;;;<;<;;;;<:-;79697 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:289:132:526 99 chr1 1289 99 36M = 1472 219 CACCCGGTCCCTGCCCCATCTCTTGTAATCTCTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<8<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_1:4:71:832:743 83 chr1 1290 99 35M = 1102 -223 ACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:102:511:946 99 chr1 1291 26 35M = 1461 205 CCCAGTCCCTGCCCCATCTCGGGTAATCTCTCTCC <<9<<;<<<<;<<<<;<<7;%<5<<0<<<)<.<.+ MF:i:18 Aq:i:26 NM:i:2 UQ:i:31 H0:i:0 H1:i:0
--EAS114_39:5:42:1223:1087 99 chr1 1293 99 35M = 1479 221 CAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTT <<<<<<<<<<<<<5<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:75:732:442 147 chr1 1293 99 40M = 1121 -212 CGGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC 7,*&28<61:88<.7<:<<:6<1<85:<:1<5<&::<<&< MF:i:18 Aq:i:60 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS54_73:3:23:502:103 163 chr1 1294 99 35M = 1486 227 AGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTT <2<<<<<<<<<<.<<<<<<<:1&:<<<7<<<<<<: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:74:596:137 147 chr1 1294 91 35M = 1119 -210 GGTCCCTGCCCCATCGCTTGTAATCTCTCGCCTTT +40778449779049'+*87489498949%89948 MF:i:18 Aq:i:22 NM:i:3 UQ:i:32 H0:i:0 H1:i:0
--EAS51_66:8:36:688:722 99 chr1 1295 99 35M = 1469 209 GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:60:182:718 163 chr1 1295 99 35M = 1485 225 GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT <<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:4:54:989:654 147 chr1 1296 99 35M = 1108 -223 TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT ,<1<2<<<;9)9<<;<<;<<<4<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:9:203:653 163 chr1 1296 99 35M = 1488 227 TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT <<<<<<<<<<<<<<<<<<<<<<::<9<<<<<;;;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:322:631:245 163 chr1 1297 99 36M = 1474 213 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC <<<<<<<<<<<<<<<<<0<<<<<<<<<<<<<<<<5; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:59:1548:1096 83 chr1 1297 99 35M = 1099 -233 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG 88888;;88;;;;8;;9;;;<<<<<<<<<<<<<<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:52:1779:1664 99 chr1 1297 99 35M = 1462 200 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG <<<<<<<<<<<<<<<<<<71<<<<<<<<<<<<<<% MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:218:173:667 99 chr1 1298 99 35M = 1448 185 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC <<<<<<<<<<<<<<<6<<<<<<<<<<<<<<<<<.< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:175:437:950 83 chr1 1298 99 35M = 1126 -207 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC ;;5:;;9<<:<;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:201:195:757 83 chr1 1298 99 35M = 1103 -230 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC :<':<:<<46<:<;:<;<;<<9<<<<<<<<;<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:8:377:655 99 chr1 1299 99 35M = 1473 209 CTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:50:950:562 99 chr1 1301 99 35M = 1473 207 GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGC <<<<<<<<<<<<<<<&<<8<<<<<<<5<:<+<:+; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:153:543:671 99 chr1 1301 99 34M = 1465 199 GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<<7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:33:1193:664 163 chr1 1301 99 40M = 1474 213 GCCCCATCTCTTGTAATCTCTCTCCTTTTTTCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%:<'<9:::9 MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:253:59:242 99 chr1 1302 99 35M = 1478 211 CCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<</<<9;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:52:1455:1212 147 chr1 1304 99 40M = 1153 -191 CCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGT 6::4::;4%;9:<79)<:<;<<:4::7<<9<&+71<9;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:316:176:543 99 chr1 1305 99 35M = 1469 199 CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC ====<=9===<<<=====9====<<=3==,96==9 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:50:1339:1154 163 chr1 1305 99 35M = 1481 211 CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC ==========<<==============;==7<;<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:169:292:652 99 chr1 1306 99 35M = 1510 239 ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<6<<-<<<<8< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:11:706:1030 99 chr1 1306 92 35M = 1469 198 ATCTCTTGTAATCTCTCTCATCTTTGCTGCATCCC <<<2<<2<<<<<<<<<<<<0<&<<<+<:2<4<<): MF:i:18 Aq:i:26 NM:i:2 UQ:i:20 H0:i:0 H1:i:0
--EAS221_3:6:70:843:706 99 chr1 1306 99 35M = 1449 178 ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<5<<5<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:174:597:66 83 chr1 1307 99 35M = 1148 -194 TCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCT 9<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:7:1547:1933 163 chr1 1308 99 35M = 1497 224 CTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTG <<<<<<<<<<<<<<<<<<<<<<<:<<8<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:117:411 163 chr1 1309 99 36M = 1482 209 TCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTC <<<<<<<<<<<<<<<<<<<<<<7<<:<<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:53:156:845 99 chr1 1311 99 35M = 1487 211 TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT <<<<<<8<<<.<<<<.6<<--<-<<<<<<<6<<<< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:90:1403:1635 99 chr1 1311 99 35M = 1480 204 TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT <<;<;<<<<;<;<;;<<<<<9;<.;;<:;99.979 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:67:302:762 147 chr1 1313 99 36M = 1138 -211 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC :8;88<;<<<;<<8<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:270:448:491 99 chr1 1313 99 35M = 1501 223 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC <<<<<<<<<<<<<<<<<<&<<.<<<<<<<:;;;<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:82:932:400 99 chr1 1313 97 34M = 1486 208 GTAATCTCTCTCCTCTTCGCTGCATCCCTGTCTT <<<<<<8<1<<<<8+<<&<<<8<<<<<<<+(,/8 MF:i:18 Aq:i:25 NM:i:2 UQ:i:15 H0:i:0 H1:i:0
--EAS54_81:2:128:394:455 83 chr1 1313 99 35M = 1156 -192 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC ;=;9.=5=;=9====;;================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:57:735:151 147 chr1 1314 94 35M = 1121 -228 TAAACTCTCACCTTATTGCTGCATCCCTGTCTTCC 07;+79:;<)<<9<+8<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:3 UQ:i:28 H0:i:0 H1:i:0
--EAS114_28:6:51:506:878 163 chr1 1314 99 36M = 1501 223 TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCT <<<<<<<<<<<<<<<<<4<<<<<<<<<<0<<<<<:; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:15:1497:1530 147 chr1 1314 99 35M = 1136 -213 TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC 77778:;;;:;;;;:9;:;;;;;;;;;9;:;;;;; MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:9:1595:1826 99 chr1 1316 99 35M = 1494 213 ATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:73:273:488 163 chr1 1318 99 35M = 1512 229 CTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTG <<<<<2<88<88<<<8<<1<<<<<<68<<<;<;<* MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:199:760:42 163 chr1 1318 24 35M = 1489 206 CTCTCTAATTTTTGCTGCTTCCATGTCTTACTCTG +2&2&2&22222220222&220-222-22-22-22 MF:i:130 Aq:i:24 NM:i:5 UQ:i:51 H0:i:0 H1:i:0
--EAS1_95:7:61:702:720 163 chr1 1320 99 35M = 1500 215 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC ==============;=======&=========3:= MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:41:576:1016 163 chr1 1320 99 35M = 1503 218 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<<<<<;<<<;<<<<<<<<<<<4<::< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:115:683:296 99 chr1 1320 99 35M = 1514 229 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<<8<<<<<<<<<<6<<<<3<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:63:1265:820 99 chr1 1320 99 35M = 1480 195 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<27<<<<<<<<<<<<<<<<<<<<03< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:92:288:1354 163 chr1 1321 99 40M = 1480 199 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT <<<<<<:<<<<<<<<<<<8<<:<<<<;;<8<<<8<:8+:: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:316:949:122 147 chr1 1321 99 35M = 1156 -200 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT 59899<<<<;;<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:37:1626:862 163 chr1 1321 99 35M = 1489 203 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:147:479:41 83 chr1 1322 99 35M = 1139 -218 CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTT ;:;:;<::<:<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:936:1509 163 chr1 1322 99 40M = 1502 220 CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTTATTT <<<<<<<<<7<<7<<<<<<<;<<<<<<<<<:<:<;%8::: MF:i:18 Aq:i:75 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_62:6:50:542:881 83 chr1 1324 99 35M = 1132 -227 CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA +2<<<;<3;29<6<5;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:71:85:629 163 chr1 1324 99 35M = 1484 195 CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA <<<<<<<<<<9<<<<<<<<<<<<<<<<<5<9<<+6 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:191:948:257 163 chr1 1325 99 35M = 1493 203 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT :<<<<<<<<9<:<<<<<<:<<<<;<<<<8<<<<7< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:249:986:224 99 chr1 1325 99 35M = 1499 209 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT =========5======7878===98==7=9==.-= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:6:1067:91 163 chr1 1325 99 35M = 1483 193 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<:8<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:216:650:516 147 chr1 1326 99 36M = 1164 -198 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ;9;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:18:376:416 163 chr1 1326 99 35M = 1510 219 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGTTT <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;:(<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS114_28:5:209:778:588 163 chr1 1326 99 36M = 1514 224 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT <<<<<<<<;<<<<<<<<<;<<<;<8<8<<<<;7;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:36:1402:1709 83 chr1 1326 99 35M = 1168 -193 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT ;;;:<<<;<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:40:352:151 147 chr1 1327 99 35M = 1137 -225 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ;=;;5=:-=9=====;;================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:139:331:63 99 chr1 1327 99 35M = 1486 194 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ====================<<============= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:11:1274:1230 163 chr1 1327 99 35M = 1507 215 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:36:678:316 99 chr1 1328 99 35M = 1500 207 TTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTA <<<<<<<<<<<<<<;<<<<<<<<<;<<<<,2<<<) MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:102:825:507 163 chr1 1330 99 35M = 1501 206 TGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:171:343:758 99 chr1 1331 99 36M = 1494 199 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<<<<<<<<<<<;<<<<59<<<9;<<3 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:85:1224:625 99 chr1 1331 99 35M = 1532 236 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTCCTT <<<<<<<<<;<<;<<7<<:<<7.<<<:&7<<.<;< MF:i:18 Aq:i:70 NM:i:1 UQ:i:13 H0:i:1 H1:i:0
--EAS188_7:5:308:354:124 99 chr1 1331 99 35M = 1507 211 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTT <<<<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:7:22:22:934 163 chr1 1332 99 35M = 1500 203 CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<6<<<;<<<;84;<<48;<;6;<;) MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:71:707:568 163 chr1 1332 99 35M = 1518 221 CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:123:610:472 99 chr1 1333 99 35M = 1504 206 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT <<<<<<<<<<:<<<<<<<<<<<<<+:<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:20:635:509 83 chr1 1333 99 35M = 1167 -201 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT 50<59<<9<9<<<<<<<<<<<<<<<<<<<6<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:92:213:217 99 chr1 1333 99 35M = 1515 217 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:47:471:858 163 chr1 1335 99 35M = 1487 187 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<;<<<<<<<<9<<<4;;<<<<;<<<<<.<<4;<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:90:406:631 163 chr1 1335 99 35M = 1525 225 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<<<<<<<<<<<<<<<<:<<<<:;<<<<;<<8;<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:81:1723:1820 99 chr1 1335 99 35M = 1524 224 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:182:23:585 147 chr1 1336 99 35M = 1163 -208 ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT 9:<<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:150:508:757 163 chr1 1336 99 35M = 1483 182 ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<,< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:261:504:780 163 chr1 1337 99 35M = 1501 199 TCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTT <<<<<<<<<<<<<<<<<<<</2<<<9<<<5<<,<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:324:515:230 163 chr1 1339 99 35M = 1512 207 CCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGG <<;<<<<<<<<<<<<<<<:<<<<8<<<4<<4<<34 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:72:916:763 83 chr1 1340 99 35M = 1142 -233 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT <;;:<<<<<<<;<<;;;<<<<<<<<<;;<;<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:194:168:684 99 chr1 1340 99 36M = 1512 208 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<7<<.<<6-<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:113:43:634 163 chr1 1340 99 35M = 1500 195 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTTTT <<<<<<<<<<<<.<<<<<<<<<<<<</<<2;;%%; MF:i:18 Aq:i:45 NM:i:2 UQ:i:8 H0:i:1 H1:i:0
--EAS54_71:5:16:434:204 163 chr1 1340 99 35M = 1522 216 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT =================;)===8===:==7;<+%; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:246:205:734 73 chr1 1340 65 35M = 1340 0 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT <<<4<<6666<<6<:<<<3<<<:'<<:<<<<;6<+ MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:246:205:734 133 chr1 1340 0 * = 1340 0 CTCCAGGGAAGTTATCTCTCATCTAGANNNNNTTG <<<<<<:/<<<,6'</7;<-+9<<;<7!!!!!8<, MF:i:192
--EAS54_65:3:102:884:63 163 chr1 1341 99 35M = 1481 175 TGTCTTCCTCTGTCTTGATTTCCTTGTTGTTGGTT <<<<<<<<<<<<<<<<<3<<<%<<<9<<9<<7+;< MF:i:18 Aq:i:43 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS51_64:3:67:782:132 99 chr1 1343 99 35M = 1498 190 TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;4<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:70:348:972 163 chr1 1343 99 35M = 1528 220 TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT <.<<3+.7<<7<<:78:<<7<:<7:<3<<7.:::< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:9:206:901 99 chr1 1344 99 35M = 1517 208 CTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTC <<<<<<<<<<<<<<<<<<<<<<5<<5<<%%:<<<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:21:443:404 99 chr1 1345 99 35M = 1529 219 TTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCT <<<<<<<<<<<<<<<<<<<<<7<<;<<;+<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:148:286:316 163 chr1 1347 99 35M = 1531 219 CCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGT <<<<<<<<+<<7<<<<<<<6<<<6<142<<<6<2< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:77:48:860 99 chr1 1348 99 35M = 1521 208 CTCTGTCTTGATTTACTTGTTGTTTGTTTTCTGTT =========;===========9==*;5=;=;=,7= MF:i:18 Aq:i:45 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS51_64:6:124:128:489 147 chr1 1348 99 35M = 1142 -241 CTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTT ::55<<<8<<<6<<;<<<<<<<<7<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:213:54:878 137 chr1 1348 99 35M * 0 0 CTCTGTCTTGATTTACTTGTTGTTGGTTTTTTGTT <<<<<<<<<;<<<<<<<<:<<:<<++<<<<%<%<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:4:73:42:1038 163 chr1 1349 99 35M = 1513 199 TCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTT <<<<<<<<<<<<<<<<<<<<<<<:<<<<<.<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:320:505:814 99 chr1 1350 99 35M = 1515 200 CTGTCTTGATTTACTTGTTGTTGGTTTTCTTTTTC <<<<<<<<<<<<<<<<;<<8<<76<<<<;<&<<<7 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_593:2:68:692:347 83 chr1 1351 99 36M = 1176 -211 TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTT 9<;;;;<<<:<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:252:428:683 137 chr1 1351 99 35M * 0 0 TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCT <<<<<<;<<<<<<<<7<<7<<&+<<<<:<&<<<4< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:73:182:444 99 chr1 1354 99 34M = 1533 214 CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTT <<<<;;<<<<<<<<<<<<;<;<<<<<:<<<<<7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:63:267:545 163 chr1 1354 99 35M = 1524 205 CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTG <<<<<<<<<<<<:<<<<<::<<<<<<.<<<;;;;5 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:177:562:806 99 chr1 1356 99 35M = 1515 194 TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTTTT <;<29<99<<;<<<9<20<9<<5;;<<<<<<<+.< MF:i:18 Aq:i:35 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS51_62:7:157:784:936 83 chr1 1356 99 35M = 1169 -222 TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTT <:<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:345:87 163 chr1 1360 99 35M = 1513 188 TTACTTGTTGTTGGTTTTCTGTTTCTTTTTTTGAT <<<<<<<<<<<<<<<<<<<<;<<<-<<<6<<<+8< MF:i:18 Aq:i:71 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS114_45:1:33:1407:94 83 chr1 1360 99 35M = 1172 -223 TTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGAT 77477;4;;;;;44;;;;;;7;;;;;;;9;;;;;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:2:434:715 163 chr1 1363 99 35M = 1527 199 CTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTT <<<<<<<<<<<<<<<<<;<<<<<<<0<<<68<<<+ MF:i:18 Aq:i:71 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:4:137:319:642 137 chr1 1363 99 35M * 0 0 CTTGTTGTTGGTTTTCTGTTTCTTTTTTTGATTTT <<<<<<<<<27<<<<<<<<<<<<<<&;<<&3;;<% MF:i:18 Aq:i:41 NM:i:2 UQ:i:9 H0:i:0 H1:i:1
--B7_610:3:148:340:479 147 chr1 1364 99 35M = 1190 -209 TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:329:458:365 147 chr1 1364 99 35M = 1186 -213 TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG ====:==9========>==7>==9>=7=>=>>=>> MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:91:267:655 147 chr1 1365 99 35M = 1204 -196 TGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGT ;,:;5:<6:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:91:856:504 99 chr1 1366 99 35M = 1520 189 GTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTT <<<<<<<<<<<<<<7<<<<<<<7<<<&;<<<&&<& MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_108:2:170:326:433 99 chr1 1367 99 35M = 1535 203 TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG =====<=9===:=<:==2=======2:===9==/5 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:132:717:233 99 chr1 1368 99 35M = 1529 196 TGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGA <<<<<<<<<<<<;<<<<<<<<<<<7<<<<&-<4<1 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:14:420:712 99 chr1 1368 99 40M = 1525 197 TGTTGGTTTTCTGTTTCTTTGTTTGATTTTTTTGAAGACA <<<<<<<<<<<<;<<<<<<<;<<<-;<<<&,<&*8111:6 MF:i:18 Aq:i:66 NM:i:3 UQ:i:21 H0:i:1 H1:i:0
--EAS114_39:4:43:1047:1626 163 chr1 1369 99 35M = 1523 189 GTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAA <<<<<<<<<<<<<<<<<<<:<<<:<<<<:+;-4:( MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:20:413:1334 147 chr1 1370 99 35M = 1215 -190 TTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAG 88878777;:;:1:;9;;;6;;;6;9;;;;;296; MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:154:669:853 83 chr1 1371 99 35M = 1193 -213 TGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGA <::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:117:857:942 99 chr1 1372 99 35M = 1527 190 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC <<<<<<<<<<<<<<<<<<<<<<<<<:6<;;7;9<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:145:144:796 147 chr1 1372 99 35M = 1181 -226 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC ;<<<;<<<<<<<<<;<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:88:162:587 147 chr1 1372 99 35M = 1189 -218 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC 386;;388-<8;<;68<<;;<;<6<<<8<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:73:108:1621 99 chr1 1373 99 35M = 1532 194 GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA <<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:127:153:861 147 chr1 1374 99 35M = 1202 -207 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT :;:6;9<<1;<<95<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:152:765:744 163 chr1 1374 99 35M = 1534 195 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT <<<<<<<<<<<<<<<<<<:<<<<<<<<&<7293<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:313:827:992 147 chr1 1379 99 35M = 1197 -217 TGTTTCTTTGTTTGATTTGGTGGAAGACATAATCC '187:1'<75<.*<<:5<..<<*<<917<<7<<17 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:7:268:263 121 chr1 1381 22 35M = 1381 0 TTGCGTTATTTGAGTTGGTGGAAGACATAATCCCA ',)*&2<$7+<<<'<-<7<<<<<<<7<<</4/;<< MF:i:64 Aq:i:0 NM:i:4 UQ:i:22 H0:i:0 H1:i:0
--EAS51_64:3:7:268:263 181 chr1 1381 0 * = 1381 0 TCGTACAGAAGTTTAATGGAGCCTTGGGACCTTAC !!66'&+/&'8+2''1+'611'&6&+/&+.&+1'& MF:i:192
--EAS139_19:1:47:352:1492 147 chr1 1385 99 40M = 1205 -220 TTTGTTTTGTATGGTGGAAGACATAATCCCACGCTTCCTA +7+/7+/%%1'6+3++1;:</<<5<)27<<9<)9<<9<7< MF:i:18 Aq:i:53 NM:i:3 UQ:i:14 H0:i:1 H1:i:0
--EAS139_11:5:61:38:1182 83 chr1 1388 99 35M = 1205 -218 GTTTGATTTGGTGGAAGACATAATCCCACGCTTCC 9:;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:64:37:257 83 chr1 1389 99 35M = 1215 -209 TTTGATTTGGTGGAAGACATAATCCCACGCTTCCT ;47<<47+9<4<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:266:556:252 147 chr1 1392 99 35M = 1224 -203 GATTTGGTGGAAGACATAATCCCACGCTTCCTATG .8558<72<(<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:321:271:138 147 chr1 1394 99 35M = 1193 -236 TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA 261:5969==9=:=<==<================= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:19:752:816 147 chr1 1394 99 35M = 1212 -217 TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA +<<+<--/<<<<4<2<<<<45<<<:<<<<<<+<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:306:388:342 83 chr1 1398 99 35M = 1211 -222 GGGGAAGACATAATCCCACGCTTCCTATGGAAAGG 9/<9;<<<;<;<<7<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS114_39:1:71:636:533 147 chr1 1398 99 35M = 1232 -201 GTGGAAGACATAATCCCACGCTTCCTATGGAAAGG ,51(<<8<:<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:131:779:345 83 chr1 1399 99 35M = 1237 -197 TGGAAGACATAATCCCACGCTTCCTATGGAAAGGT <<7<<<<<<<<:<<<<<<<<<<<<<;<<<<<<;<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:68:64:783 83 chr1 1402 99 35M = 1214 -223 AAGACATAATCCCACGCTTCCTATGGAAAGGTTGT <<9<8<6<<<<<;<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:16:823:343 147 chr1 1403 99 35M = 1223 -215 AGACATAACCCCACGCTTCCTATGGAAAGGTTGTT <<<:<<<;+;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS219_FC30151:5:72:1426:1883 147 chr1 1405 99 35M = 1226 -214 ACATAATCCCACGCTTCCTATGGAAAGGTTGTTGG ;9<;<;0<;<;<<<<;<<<;:<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:166:979:531 83 chr1 1410 99 35M = 1245 -200 ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT 81<<<3<*<<:<<<<<<<8<<<<<<<<<<<<:<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:63:930:152 83 chr1 1410 99 35M = 1243 -202 ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT ;:4:8;:::;=:8;=;========;=:======== MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:137:895:681 147 chr1 1418 99 35M = 1232 -221 CTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATG 4;5+6;<<<<<<<<<9;<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:87:89:696 147 chr1 1419 99 36M = 1245 -210 TTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGAT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:104:744:280 147 chr1 1421 64 36M = 1262 -195 CATATGGAAAGGTTGTTGGGATTTTTTTAATGATTC '&+74*0<'/.47:8<<<<;<7''6/1<<<.<<68< MF:i:18 Aq:i:21 NM:i:3 UQ:i:33 H0:i:0 H1:i:0
--EAS56_57:2:259:42:969 83 chr1 1426 99 35M = 1265 -196 GGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCA <<<6<<<<<<-<<<<<<;<<;<6<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:18:1498:1475 83 chr1 1427 99 35M = 1260 -202 GAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAA :<4<*7<<<<<<<:<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:328:614:638 147 chr1 1428 99 35M = 1243 -220 AAAGGTTGTTGGGAGATTTTTAATGATTCCTCAAT <<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:159:71:155 147 chr1 1428 99 35M = 1237 -226 AAAGGTTGTTGGGAGATTTTTAATGATTCCTCGAT 5;;9<<:<;:<<<<7<<7;<3<<<:<<<;<<<<<; MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_39:1:73:302:1574 147 chr1 1429 99 35M = 1233 -231 AAGGTTGTTGGGAGATTTTTAATGATTCCTCAATG 7<88;;<;;<;;<<<<<<<<<<<<<<<<<<<<<1< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:200:712:439 83 chr1 1435 99 35M = 1286 -184 GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA <;<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<<7 MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:259:869:641 147 chr1 1435 99 35M = 1272 -198 GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA 99=:=9=99<=========<=<<============ MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:74:570:695 83 chr1 1436 99 35M = 1240 -231 TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT .;:8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:58:369:244 83 chr1 1436 99 35M = 1266 -205 TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT <<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:216:292:528 147 chr1 1438 99 35M = 1269 -204 GGGAGATTTTTAATGATTCCTCAATGTTAAAATGT ;:;;8<<<<<<<<<<<<<:<<;<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:185:868:496 83 chr1 1442 99 35M = 1278 -199 GATTTTTAATGATTCCTCAATGTTAAAATGTCTAT :;;<;;<<<<<<<<;4<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:277:194:143 147 chr1 1444 99 35M = 1262 -217 TTTTTAATGATTCCTCAATGTTAAAATGTCTATTT ;<<;<<<;8;<0<7<<<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:267:71:603 147 chr1 1446 99 36M = 1281 -201 TTTAATGATTCCTCAATGTTAAAATGTCTATTTTTG 9;;<;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:218:173:667 147 chr1 1448 99 35M = 1298 -185 TAATGATTCCTCAATGTTAAAATGTCTATTTTTGT <<<<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:70:843:706 147 chr1 1449 99 35M = 1306 -178 AATGATTCCTCAATGTTAAAATGTCTATTTTTGTC <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:47:720:789 147 chr1 1455 90 35M = 1278 -212 TCCTCAATGTTAAAATGTCTATTTTTGTCTTGACA /)040<.878<<<<;8<;<9<9;<<<<<<<<<<93 MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:102:511:946 147 chr1 1461 26 35M = 1291 -205 ATGTAAAAGTGACTGTTATTGTCTTGACACCCAAC <%-4:6<:/&46;/*;<*84<0<'<&*<2<<<<<< MF:i:130 Aq:i:26 NM:i:5 UQ:i:78 H0:i:0 H1:i:0
--EAS112_34:8:103:812:255 147 chr1 1461 99 35M = 1272 -224 ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC 7:777:7<<::7<7<7<<:7<7<:<<<<<<<<<7< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:179:735:569 83 chr1 1461 99 35M = 1286 -210 ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC <5<3:<<<<5;8<<<55;<:</:<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:52:1779:1664 147 chr1 1462 99 35M = 1297 -200 TGTTAAAATGTCTATTTTTGTCTTGACACCCAACT 6;;:;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:153:543:671 147 chr1 1465 99 35M = 1301 -199 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT ;;;;;=;==================;========= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:38:1071:155 147 chr1 1465 99 35M = 1274 -226 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT <<62<<<<<<3<<<<</<<<<<<<%<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1864:477 83 chr1 1465 99 35M = 1270 -230 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:1256:204 147 chr1 1467 99 35M = 1288 -214 AAATGTCTATTTTTGTCTTGACACCCAACTAATAT 66777:;;37;;:;;0;:;;;;):;;:7;;;;;;; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:316:176:543 147 chr1 1469 99 35M = 1305 -199 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT <<)/3<<<&<*<<0<<8<<82</5<<<<<88<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:36:688:722 147 chr1 1469 99 35M = 1295 -209 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT <;;<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:11:706:1030 147 chr1 1469 92 35M = 1306 -198 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT +<5069+9<<<<+<;<<<<;<<77<7<<;<<;<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:289:132:526 147 chr1 1472 99 36M = 1289 -219 TCTATTTTTGTCTTGACACCCAACTAATATTTGTCT ;<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:50:950:562 147 chr1 1473 99 35M = 1301 -207 CTATTTTTGTCTTGACACCCTACTAATATTTGTCT <<3<<<8<;<<<<<<+<<8<&<<<<7<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS188_4:5:8:377:655 147 chr1 1473 99 35M = 1299 -209 CTATTTTTGTCTTGACACCCAACTAATATTTGTCT ;<8;;:<;<<:<;<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:322:631:245 83 chr1 1474 99 36M = 1297 -213 TATTTTTGTCTTGACACCCAACTAATATTTGTCTGA <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:33:1193:664 83 chr1 1474 99 40M = 1301 -213 TATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAA ;;;;;;<;;-9<<<:</+9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:253:59:242 147 chr1 1478 99 35M = 1302 -211 TTTGTCTTGACACCCAACTAATATTTGTCTGAGCA <<<:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:42:1223:1087 147 chr1 1479 99 35M = 1293 -221 TTGTCTTGACACCCAACTAATATTTGTCTGAGCAA ;:<<<:<7<<<;;<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:90:1403:1635 147 chr1 1480 99 35M = 1311 -204 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA 86878;;;8;788;;;;;;;;;;;;;8;5;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:92:288:1354 83 chr1 1480 99 40M = 1321 -199 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGT ::::;;;<<<<9;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:63:1265:820 147 chr1 1480 99 35M = 1320 -195 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA <<<<<<3<<1<<<<<<<7<<<<<<<<<<<<<<<+< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:102:884:63 83 chr1 1481 99 35M = 1341 -175 GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA <;7;;<<8<;8;<<<8<<<<<<8<<<8;<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:50:1339:1154 83 chr1 1481 99 35M = 1305 -211 GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA 7;7;8;<5<:86<<;<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:117:411 83 chr1 1482 99 36M = 1309 -209 TCTTGACACCCAACTAATATTTGTCTGAGCAAAACA ;88<<<<<:<7<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:150:508:757 83 chr1 1483 99 35M = 1336 -182 CTTGACACCCAACTAATATTTGTCTGAGCAAAACA 6;;;<8<6;8<<8<<<<<;<<<<;<<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:6:1067:91 83 chr1 1483 99 35M = 1325 -193 CTTGACACCCAACTAATATTTGTCTGAGCAAAACA 3<;<<:;9;<<7;;<;<<<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:71:85:629 83 chr1 1484 99 35M = 1324 -195 TTGACACCCAACTAATATTTGTCTGAGCAAAACAG ,,1<1<7&%<9+:<<9<<9<<<<<<<<5<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:319:165:698 147 chr1 1485 99 35M = 1287 -233 TGACACCCAACTAATATTTGTCTGAGCAAAACAGT ;5;2;<:;<<:<<<<<<<<<;:;<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:60:182:718 83 chr1 1485 99 35M = 1295 -225 TGACACCCAACTAATATTTGTCTGAGCAAAACAGT <<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:82:932:400 147 chr1 1486 97 35M = 1313 -208 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC <<;<<72<<7<<<<<<<<<<;<<<+7<<<<<<<<< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:23:502:103 83 chr1 1486 99 35M = 1294 -227 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC 4:386:6<:::<:<:4:+<::4<<<6<<<<<<<66 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:139:331:63 147 chr1 1486 99 35M = 1327 -194 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC 7===================:=:============ MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:53:156:845 147 chr1 1487 99 35M = 1311 -211 ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT 171(*00,0;;&;7=77=;5;;(;1:=5======= MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:47:471:858 83 chr1 1487 99 35M = 1335 -187 ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT /;9<<63<<<<3<;<<<<<<<<<<<<<<<<<<<9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:9:203:653 83 chr1 1488 99 35M = 1296 -227 CACCCAACTAATATTTGTCTGAGCAAAACAGTCTA 37))&<8<<<<<7<4<;<777<<:<<<<<<<<;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:199:760:42 83 chr1 1489 24 35M = 1318 -206 ACCCAATTAATATTTTTCTTAGCAAAACAGTCTAG 58*5.<+<<<<,4<<**<90**9<<<<<<4<<<<< MF:i:18 Aq:i:24 NM:i:3 UQ:i:34 H0:i:0 H1:i:0
--EAS218_1:4:37:1626:862 83 chr1 1489 99 35M = 1321 -203 ACCCAACTAATATTTGTCTGAGCAAAACAGTCTAG :663<<3<<<<<<<<<<:<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:191:948:257 83 chr1 1493 99 35M = 1325 -203 AACTAATATTTGTCTGAGCAAAACAGTCTAGATGA :;;;;<<<<<<5<5<<<<<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:171:343:758 147 chr1 1494 99 36M = 1331 -199 ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGA :+;;<<<<<;<;:<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:9:1595:1826 147 chr1 1494 99 35M = 1316 -213 ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAG ;76;;6:9<9<963;<<7<<<<<<<;<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:7:1547:1933 83 chr1 1497 99 35M = 1308 -224 AATATTTGACTGAGCAAAACAGTCTAGATGAGAGA <<<<<<<<-<<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS51_64:3:67:782:132 147 chr1 1498 99 35M = 1343 -190 ATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAG ;;<;;;<<;;<<<;<<<;<<<;<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:249:986:224 147 chr1 1499 99 35M = 1325 -209 TATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGA <<<3<;<;;<<;8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:61:702:720 83 chr1 1500 99 35M = 1320 -215 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <<<4<4+0;<<:<<<<<<<<-<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:113:43:634 83 chr1 1500 99 35M = 1340 -195 ATTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAA ;9;1;<5:<<<%<<<<;<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS56_53:7:22:22:934 83 chr1 1500 99 35M = 1332 -203 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <+72::72<<60<<<<<<<96<<<<0<<<<1<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:36:678:316 147 chr1 1500 99 35M = 1328 -207 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <<72.2,;;<)6<<<<:<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:102:825:507 83 chr1 1501 99 35M = 1330 -206 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC <05<<<<<<<7<<<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:261:504:780 83 chr1 1501 99 35M = 1337 -199 TTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAAC 80;8(;0==8+====;==49=============== MF:i:18 Aq:i:43 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_78:7:270:448:491 147 chr1 1501 99 35M = 1313 -223 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC 7;;;;+2;<<+<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:51:506:878 83 chr1 1501 99 36M = 1314 -223 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACT <970;49;<;+<<<:<<<;;<<<<<<<<<<<<<<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:936:1509 83 chr1 1502 99 40M = 1322 -220 TTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT 99;66:<<;-<<<<:<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:41:576:1016 83 chr1 1503 99 35M = 1320 -218 TGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTT :<;<<<<<6<<<<;<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:123:610:472 147 chr1 1504 99 35M = 1333 -206 GTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTC :<::+<<9<<9<<<<=<<<<<=<<<<<<<<?<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:308:354:124 147 chr1 1507 99 35M = 1331 -211 TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT %+<)2<<<<<<<<8<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:11:1274:1230 83 chr1 1507 99 35M = 1327 -215 TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT .<<<<<<<<<<<<<<<<5<<<<<<<<<<5<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:169:292:652 147 chr1 1510 99 35M = 1306 -239 GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA 79919-<-<<<<<<<<<<<<<<<<<<<6<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:18:376:416 83 chr1 1510 99 35M = 1326 -219 GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA 70<<<<<<<7<7<<<2<<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:194:168:684 147 chr1 1512 99 36M = 1340 -208 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT ;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:73:273:488 83 chr1 1512 99 35M = 1318 -229 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGG </<<:<<9;;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:324:515:230 83 chr1 1512 99 34M = 1339 -207 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAG 7<<1<<<7<+<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:345:87 83 chr1 1513 99 35M = 1360 -188 AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT <<;<<<<5<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:73:42:1038 83 chr1 1513 99 35M = 1349 -199 AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:209:778:588 83 chr1 1514 99 36M = 1326 -224 AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT ;8;98;;;<3<<<<<<<<<;<<;<<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:115:683:296 147 chr1 1514 99 35M = 1320 -229 AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTC <<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:92:213:217 147 chr1 1515 99 35M = 1333 -217 ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT <<<<<:<<<<<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:177:562:806 147 chr1 1515 99 35M = 1356 -194 ACAGTGTAGATGAGAGAGACCTTCCCTGGAGGTCT )2<9;'/:<5<<<:<<:<:&5:&<8,<<+:<&<<< MF:i:18 Aq:i:35 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS1_103:3:320:505:814 147 chr1 1515 99 35M = 1350 -200 ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT <2<;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:9:206:901 147 chr1 1517 99 35M = 1344 -208 AGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGA <<<<<<<<<<<<<.<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:71:707:568 83 chr1 1518 99 35M = 1332 -221 GTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGAT ;9;<;<<<<<;<<<<<;<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:91:856:504 147 chr1 1520 99 35M = 1366 -189 CTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGG :::<<:<<<<<<<<<<<<<<<<<<<<<:<:<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:77:48:860 147 chr1 1521 99 35M = 1348 -208 TAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC ;8;8;<9<9<<<<<<<<<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:16:434:204 83 chr1 1522 99 34M = 1340 -216 AGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC <:7:<<<<<<<<<<<9<<<+<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:43:1047:1626 83 chr1 1523 99 35M = 1369 -189 GATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGT <<4<<<<<<<<<<<:<<<;<<<<<:<7<<;<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:81:1723:1820 147 chr1 1524 99 35M = 1335 -224 ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT ;6;;;<<<<<<<<<<<2<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:63:267:545 83 chr1 1524 99 35M = 1354 -205 ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:90:406:631 83 chr1 1525 99 35M = 1335 -225 TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTT <<<:<:<<<-<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:14:420:712 147 chr1 1525 99 40M = 1368 -197 TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCC 1::::<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:2:434:715 83 chr1 1527 99 35M = 1363 -199 AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT <<<<<<<<<:;<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:117:857:942 147 chr1 1527 99 35M = 1372 -190 AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT <<;<<<<<<<9<<<8<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:70:348:972 83 chr1 1528 99 35M = 1343 -220 GAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTC <99<-7<<7<<<87<<<)<<<<<<8<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:132:717:233 147 chr1 1529 99 35M = 1368 -196 AGAGAACTTCCCTGGAGGTCTGATGGAGTTTCTCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:4:21:443:404 147 chr1 1529 99 35M = 1345 -219 AGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCC =9=9=9==:========================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:148:286:316 83 chr1 1531 99 35M = 1347 -219 AGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCT ;::::;9/:<9<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:85:1224:625 147 chr1 1532 99 35M = 1331 -236 GAACTCCCCTGGAGGTCTGATGGCGTTTCTCCCTC 17;;7&-;<;<;:<6<<:;<<<<<<<;<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS221_1:8:73:108:1621 147 chr1 1532 99 35M = 1373 -194 GAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTC <<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:73:182:444 147 chr1 1533 99 35M = 1354 -214 AACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCG :1<4;;::<<;<<<<;<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:152:765:744 83 chr1 1534 99 35M = 1374 -195 ACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGT 6<;6<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:170:326:433 147 chr1 1535 99 35M = 1367 -203 CTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTC :44<<<<<<<<<<:6<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:8:4:841:340 73 chr2 1 99 36M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAA <<<<<<<<;<<<<<<<<;<<<<<;<;:<<<<<<<;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:142:943:582 73 chr2 1 99 35M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA <<<<<<;<<<<<<:<<;<<<<;<<<;<<<:;<<<5 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:43:859:229 153 chr2 1 66 35M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA +37<=<.;<<7.;77<5<<0<<<;<<<27<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:286:923:549 73 chr2 2 99 35M * 0 0 TCAAATGAACTTCTGTAATTGAAAAATTCATTTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:117:578:853 73 chr2 5 99 35M * 0 0 AATGAACTTCTGTAATTGAAAAATTCATTTAAGAA <;<9<<<<<;<<;<<<<<<<<<<<,<98;<;;&92 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:289:472:86 137 chr2 6 99 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:302:997:951 73 chr2 6 69 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<<<<<<<<;<<:<<52<<:;;<6<<;<:<2:9/ MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:13:1729:1844 73 chr2 6 99 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<;;<;7<<<<4<<<<762;6<<<<<<<;6;618 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:43:239:977 137 chr2 7 99 36M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;7;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:233:191:520 73 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<8<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:75:555:1591 137 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:43:656:1866 137 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;:; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:100:563:301 137 chr2 8 99 35M * 0 0 GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;8;;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:126:526:276 137 chr2 8 84 35M * 0 0 GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:161:366:544 137 chr2 11 99 35M * 0 0 CTTCTGTAATTGAAAAATTCATTTAAGAAATTACA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:326:652:890 73 chr2 12 99 35M * 0 0 TTCTGTAATTGAAAAATTCATTTAAGAAATTACAA <<<<<<<<<<2<<<<<<<<<<<<<<+<8:<<9998 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:238:441:727 73 chr2 16 99 35M * 0 0 GTAATTGAAAAATTCATTTAAGAAATTACAAAATA <<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:64:507:478 137 chr2 17 99 35M * 0 0 TAATTGAAAAATTCATTTAAGAAATTACAAAATAT <<<<<;<<<<<<<<<<<<<<<;;;<<<;<<8;<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:118:440:850 137 chr2 18 99 35M * 0 0 AATTGAAAAATTCATTTAAGAAATTACAAAATATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<949<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:270:995:918 137 chr2 24 84 35M * 0 0 AAAATTCATTTAAGAAATTACAAAATATAGTTGAA <<<<<<<<<<<<<:<<<<<<8<8<8<<<<:<;4;4 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:305:819:245 73 chr2 25 98 35M * 0 0 AAATTCATTTAAGAAATTACAAAATATAGTTGAAA 8<<<<8<;<<<<<;<8<<8<8<<<<8<<<899<<+ MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_26:7:13:172:720 73 chr2 26 99 35M * 0 0 AATTCATTTAAGAAATTACAAAATATAGTTGAAAG ============:3<==:====<=9=3===;==83 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_63:7:34:334:825 73 chr2 30 99 35M * 0 0 CATTTAAGAAATTACAAAATATAGTTGAAAGCTCT <<<<<<<<<<<<<<<<<<<<<<<<3;<<<<6<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:32:1379:738 137 chr2 33 99 35M * 0 0 TTAAGAAATTACAAAATATAGTTGAAAGCTCTAAC ;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:5:70:318:1631 137 chr2 34 99 40M * 0 0 TAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGA <<<<<<;<<<<<<<<<<<<;9:<<<<<<<<<<<<<:::78 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:285:241:560 163 chr2 37 99 35M = 200 198 GAAATTACAAAATATAGTTGAAAGCTCTAACAATA <<<<<<<<<<;<<<<;<<<<<<<<<<<<;<;;;<. MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:389:889 99 chr2 37 99 36M = 205 204 GAAATTACAAAATATAGTTGAAAGCTCTAACAATAG <<<<<<<<<<<<<<<<<<<<;<<<<<<<;9;;<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:127:725:381 163 chr2 39 99 35M = 209 204 AATTACAAAATATAGTTGAAAGCTCTAACAATAGA <<<<<<<<<<<<<<<<<<<<<;<<<<;;;;;<<8: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_93:5:66:372:343 163 chr2 40 99 35M = 228 223 ATTACAAAATATAGTTGAAAGATCTAACAATAGAC <<<<<<<<<<8<<<<<6<<<8&8<<<<<58<:<:: MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_65:6:67:800:450 99 chr2 41 99 35M = 221 215 TTACAAAATATAGTTGAAAGCTCTAACAATAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:90:1906:1528 163 chr2 41 99 35M = 222 216 TTACAAAATATAGTTGAAAGCTCTAACAATAGACT <<<<<<<<<<<<<<<:<<<:<<<<;<<<<<;:7:; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:117:284:589 163 chr2 43 99 35M = 210 202 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA ==================================0 MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:26:211:481 99 chr2 43 99 35M = 222 214 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA <<<<<<<<<<<<<<<<<<<<<<<7<<<<<:<7<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:85:923:726 99 chr2 43 99 35M = 199 191 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA <<<<<<<7<<<<<<<<<<<55<<<9<*<<<991<4 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:107:395:312 163 chr2 44 99 35M = 224 215 CAAAATATAGTTGAAAGCTCTAACAATAGACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<;<;;<:<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:7:5:753:806 163 chr2 45 99 35M = 197 187 AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<7:-<;;3;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_103:3:277:921:474 163 chr2 45 99 35M = 241 231 AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC <<<<<<<<<<<<<<<:<<<<<<<<<<<5<<;;;;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_63:4:38:28:122 163 chr2 46 99 35M = 227 216 AAATATAGTTGAAAGCTCTAACAATAGACTAAACC <<<<<<;<<<<<<<;<<<<6<<<<<<:<<<<;;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS221_3:8:50:1203:1094 163 chr2 46 99 35M = 223 212 AAATATAGTTGAAAGCTCTAACAATAGACTAAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:2:223:583:968 99 chr2 47 88 36M = 215 204 AATATAGTTGAAAGCTCTAACAATAGACTAAACCAA <<<<<<<29<<<<4<<<<<<<<<<<7<<7<..<<47 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:1:28:350:895 163 chr2 48 95 35M = 215 202 ATATAGTTGAAAGCTCTAACAATAGACTAAACCAA <<<<<<<<;<;<<<<<<<<<;;<<;<<<<<;;<;8 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:7:69:1130:832 99 chr2 50 94 35M = 231 216 ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC ;;2<;<;;<;9;<;;;;;;;7;8;;7;;;;77437 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS188_7:3:296:224:724 163 chr2 50 99 35M = 234 219 ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC <<<<;<<<<<<7;<<<<<6<<<06<<<<<<2(<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_595:4:319:250:718 163 chr2 52 99 35M = 240 223 AGTTGAAAGCTCTAACAATAGACTAAACCAAGCAG <<<<<<<<<<<;<<5<5;<851;85;)9;;8594; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_73:3:203:419:243 163 chr2 54 99 35M = 237 218 TTGAAAGCTCTAACAATAGACTAAACCAAGCAGAA <<<<<<<<<<<<<<<9<;<8<<<;<<<;<<<4<77 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:21:1601:1666 163 chr2 56 99 40M = 228 212 GAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAG 7<<<<<<<<:<<7<<<:<<<<<<4<<44<<914<;:5::: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:158:943:467 163 chr2 57 99 35M = 225 203 AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA <<<<<;<<<<<<<<<<<<<<;;<<<<<<<<<;8<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:54:91:1232 99 chr2 57 99 35M = 246 224 AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:29:833:612 163 chr2 58 99 35M = 224 201 AAGCTCTAACAATAGACTAAACCAAGCAGAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:1:189:503:110 163 chr2 63 79 35M = 229 201 CTAACAATAGACTAAACCAAGCAGAAGAAAGAGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:2 H1:i:0
--EAS114_28:2:114:938:216 99 chr2 63 99 36M = 218 191 CTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_95:5:257:654:116 99 chr2 64 99 35M = 231 202 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<<<;:<<<<<<<<<88 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_97:3:277:144:848 163 chr2 64 99 35M = 228 199 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<;<<<<<<<<<<<<<<<<<3<<9;;6; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_108:4:75:166:463 99 chr2 64 99 35M = 250 221 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<++3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:4
--B7_610:5:102:915:87 99 chr2 65 99 35M = 222 192 AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC <<<<<<<<<<<<<<<<<<<<;<<<<<3<<;<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:0
--EAS54_71:3:78:855:352 163 chr2 65 99 35M = 240 209 AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC <<<<<<<<;<<<<<<<<<;<<<<<<<<;<;<<:<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:0
--EAS56_57:2:206:873:186 163 chr2 66 99 35M = 227 196 ACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;53 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_93:6:238:514:194 163 chr2 68 99 35M = 265 232 AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<;<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:3:285:489:327 99 chr2 68 99 35M = 233 200 AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_67:1:15:381:715 99 chr2 72 99 35M = 237 200 GACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTT ;=====;===9==;===9;;;=4;9=====;==== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:199:818:124 99 chr2 73 99 35M = 266 228 ACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTG <<<<<<<<<<<<<<<<<;<<;<<;7<<<<<<9<9; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:182:1002:639 163 chr2 77 99 35M = 246 204 AACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGA <<<<<<<<<<<<<<<<<<<<<9-<<<<4<;<;;<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:945:2005 163 chr2 77 99 35M = 262 220 AACCAAGCAGAAGAAAGAGGCTCAGAACTTGAAGA <<<<<<<<<<<<<<<<<<<<%<<<<<<;<<<<<<< MF:i:18 Aq:i:44 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--B7_591:5:254:542:848 99 chr2 79 99 36M = 233 190 CCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAA <<<;<<<<<<<<<<<<<<<;4<;8<<<;;9<9;8;9 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:71:517:742 99 chr2 81 99 35M = 266 220 AAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAG <<<<<<<<<<<<;<<<<<<<<<<<<<48:4<<<<3 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:254:617:73 163 chr2 83 99 35M = 266 218 GCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<6;:;4% MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:13:1507:1146 99 chr2 84 99 35M = 278 229 CAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCT ;<9;;;;<<;;;;<<;<;;;;<;;<<;<;<99777 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:32:686:735 99 chr2 84 78 35M = 255 206 CAGAAGAAAGAGGTTCANANNNTGANGACAAGTCT <<<<<<<<<<<<<<<<<!<!!!<<<!<<<<<<<<< MF:i:130 Aq:i:78 NM:i:5 UQ:i:0 H0:i:0 H1:i:0
--EAS56_57:3:112:729:591 99 chr2 86 99 35M = 283 232 GAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:17:1222:783 163 chr2 87 99 35M = 251 199 AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCGT <<<<<<<)<<<16<<;<<<6<4<:<4<+://<7)< MF:i:18 Aq:i:59 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS188_7:6:46:122:479 99 chr2 87 99 35M = 248 196 AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:313:531:169 163 chr2 89 99 36M = 250 197 GAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATG <<<<<<<<<<<<<;<<<<<<<<<<<:<<:<;<<;<2 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:148:170:895 99 chr2 91 99 35M = 247 191 AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA <<<<<<<<<<9<<<<<6<<<<<<<<<<<<<<<<6< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:34:380:815 163 chr2 91 99 35M = 283 227 AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:210:809:735 163 chr2 93 99 35M = 291 233 GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:40:925:442 163 chr2 93 99 35M = 271 213 GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT ;<;<<<<<<<<<<<3;<7;:<;;<<<;<<:<32<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:169:256:888 163 chr2 94 99 35M = 270 210 AGGTTCAGAACTTGAAGACAAGTCTCTTATGAATT <<<<<<<<<<<<<<<<<<<<<<;;<;<<;<<:;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:117:156:84 99 chr2 95 99 35M = 285 225 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:35:522:294 163 chr2 95 99 35M = 272 212 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA ===============================:=:= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:41:653:1568 163 chr2 95 99 35M = 266 206 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA ;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:178:276:693 163 chr2 96 99 36M = 259 199 GTTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:223:440:667 99 chr2 97 99 35M = 282 220 TTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC <<<<<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:194:470:416 99 chr2 98 99 35M = 265 202 TCAGAACTTGAAGACAAGTCTCTTATGAATTAACC <<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:61:1000:1534 163 chr2 104 99 35M = 286 217 CTTGAAGACAAGTCTCTTATGAATTAACCCAGTCA <<<<4:<:<1)<<<<<<<+<:44<</7<<<)4:<) MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:145:383:182 163 chr2 105 99 35M = 291 221 TTGAAGACAAGTCTCTTATGAATTAACCCAGTCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:63:816:921 163 chr2 106 99 35M = 291 220 TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<4<846 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:77:1780:693 99 chr2 106 99 40M = 276 210 TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAA <<<<<<<<<<<<;<<:<<;<<<<<<<<<<<<;<<<;;:69 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:215:861:605 163 chr2 107 94 36M = 262 191 NAAGACAAGTCTCTTATGAATTAACCCAGTCAGACA !+++++++++++++++++++++++++++++++++++ MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS221_3:2:22:1623:709 99 chr2 107 99 35M = 287 215 GAAGACAAGTCTCTTATGAATTAACCCAGTCAGAC <<<<<<<<<7<<<<<<<:<<<<<<<<:85:<:2<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:54:436:1452 163 chr2 108 99 35M = 275 202 AAGACAAGTCTCTTATGAATTAACCCAGTCAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:42:333:516 163 chr2 109 99 35M = 296 222 AGACAAGTCTCTTATGAATTAACCCAGTCAGACAA <<<<<5<*<2<<<<<<<<<<<<<<<<<<<<<<<</ MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:119:730:190 99 chr2 114 99 35M = 301 222 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<9<;;<<<;<<<<<<<8<<<1<<918<;;;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:63:727:203 99 chr2 114 99 35M = 278 199 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:27:577:849 163 chr2 114 99 35M = 316 237 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<<<<<<<<<<<<<<<<<<;:<<<;<<<<<<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:5:259:250 99 chr2 115 99 35M = 269 189 GTCTCTTATGAATTAACCCAGTCAGACAAAAATAA <<<<<<<<<<<<<<<<<<<<;<<<;5<<5<;7<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:17:989:186 99 chr2 120 91 35M = 299 214 TTATGAATTAACCCAGTCAGACAAAAATAAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<:<<;<7;:::: MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_45:2:33:1445:1357 99 chr2 121 85 35M = 299 213 TATGAATTAACCCAGTCAGACAAAAATAAAGAAAA ;;<;<<<<<<;;;<9:;:;;;;;:;:;;;;99777 MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:7
--EAS221_3:4:30:1452:1563 163 chr2 122 94 35M = 313 226 ATGAATTAACCAAGTCAGACAAAAATAAAGAAAAA <<<<<<<<<<<<<<:<<<<1<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_45:1:77:1000:1780 163 chr2 123 66 35M = 279 191 TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA ;;;:;;;;;;;/;;;7:4;;7;;;;;;;;;77777 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:6 H1:i:47
--EAS114_45:4:48:310:473 99 chr2 123 66 35M = 298 210 TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA <<<;<<;;;<<;;<;;;;;;;;;;;;;;;;89799 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:6 H1:i:47
--B7_591:2:279:124:41 99 chr2 124 69 36M = 307 219 GAATTAACCCAGTCAGACAAAAANNAAGAAAAAAGA <<<<<<<7/<8<<<<<<<<<<4*!!<<7<7<<5<<3 MF:i:18 Aq:i:0 NM:i:2 UQ:i:0 H0:i:0 H1:i:0
--EAS112_32:8:89:254:332 163 chr2 124 76 35M = 291 202 GAATTAACCCAGTCAGACAAAAATAAAGAAAAAAG ==================;=========;=7;;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:4 H1:i:36
--B7_597:7:103:731:697 99 chr2 125 72 35M = 304 214 AATTAACCCAGTCAGACAAAAATAAAGAAAAAAGA <<<<<<<<<<<<<<<<<<:<:<<6<<<<<<<:<;: MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:9 H1:i:55
--EAS139_11:2:71:83:58 163 chr2 148 77 9M2I24M = 349 236 AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS192_3:4:63:5:870 163 chr2 148 75 9M2I24M = 330 217 AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT <<;<<<<<<<<<<<<<<<<<;<<<<<<<<<;;<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:2:29:1822:1881 163 chr2 150 74 7M2I31M = 328 218 AGAAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAGAAG <<<<<<<<<<<<4<<<<<<<<<<<<<<:<<<:<<;::::: MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS221_3:2:100:1147:124 163 chr2 150 99 35M = 345 230 AAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS192_3:8:6:104:118 163 chr2 154 99 35M = 323 204 AAGAATTTTAAAAATGAACAGAGCTTTCAAGAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<=<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:6:185:96:948 99 chr2 160 99 36M = 324 200 TTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT <<<<<<<<<;6<<<<<<<<<;<<<;;<<<<<<<;<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:213:309:373 163 chr2 161 99 35M = 317 191 TTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT <;<<<<<<;<7<<<<<-<<<<<<<<<<<<<<4<7< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:30:466:652 99 chr2 163 98 35M = 332 204 AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA <<<<<<<<<<<<<<<<<<<<<<<<;<<<4;7<<<7 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:156:21:69 163 chr2 163 99 35M = 362 234 AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA <<<<<<<<<<<<<<<<<<<<<<<:<4<<<:<;<;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:197:52:58 163 chr2 165 99 35M = 323 193 AAATGAACAGAGCTTTCAAGAAGTATGAGATTATG <<<<<<<<<<<<<<<<<<9<<<<2<<<<<<;<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:214:946:229 163 chr2 165 99 35M = 339 209 AAATGAACAGAGCTTTCAAGAAGTATGATATTATG <<<<<<<<<<<<<<<<<::<;;;<;<;7<:<<7<2 MF:i:18 Aq:i:65 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS192_3:4:293:168:240 99 chr2 167 99 35M = 340 208 ATGAACAGAGCTTTCAAGAAGTATGAGATTATGTA <<<<;<<<;;;<;<<;;;<<;;<<::::<<;;+;7 MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:208:118:673 99 chr2 169 76 35M = 332 198 GAACAGAGCTTTCAAGAAGTATGAGATTATGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:71:478:175 163 chr2 171 99 35M = 317 181 ACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGT <<<<<<<<<<<;<<<<<;<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:177:24:389 163 chr2 175 99 35M = 365 225 AGCTTTCAAGAAGTATGAGATTATGTAAAGTAACT <<<<<<<<<<<<<<<<<<<<<<<<7<;;<;9969; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:14:1211:1332 163 chr2 178 99 35M = 351 208 TTTCAAGAAGTATGAGATTATGTAAAGTAACTGAA ;;.;;;;;;;3;;;;;6;;;;;;8;;;;;;63777 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:324:238:736 163 chr2 180 99 35M = 367 222 TCAAGAAGTATGAGATTATGTAAAGTAACTGAACC =================================== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:9:648:712 99 chr2 182 99 35M = 358 211 AAGAAGTATGAGATTATGTAAAGTAACTGAACCTA <9<;<<<<<<<;<<<<<8<<<<9<<;<<8)<:1<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:41:1308:619 163 chr2 184 99 35M = 360 211 GAAGTATGAGATTATGTAAAGTAACTGAACCTATG <6+<*<<<<<<<:<<<<<<<:<<&<<<<1<6<11: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:328:537:640 99 chr2 185 99 35M = 352 202 AAGTATGAGATTATGTAAAGTAACTGAACCTATGA <;<<<<<<;<<<<<<<<<:;<<8<<<;:<<<;<;9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:86:697:941 163 chr2 187 99 35M = 341 189 GTATGAGATTATGTAAAGTAACTGAACCTATGAGT =====================<=<==<<====;=5 MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:224:592:744 99 chr2 188 99 35M = 383 230 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<;<<<<<7<<<<<<<&<*<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:135:354:66 99 chr2 188 99 35M = 356 203 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<;<<<<<<<<<<;<<2<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:71:311:202 163 chr2 188 99 35M = 379 226 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<:4<<<<<<<<<<<<8;4;: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:50:30:15 99 chr2 192 39 35M = 358 201 AGATTATGTAAAGTAACTTAACCTATGAGTCCAAG +:79.68872.:9&:92/.299169/5+/6/3/&2 MF:i:18 Aq:i:10 NM:i:3 UQ:i:45 H0:i:0 H1:i:1
--EAS192_3:5:287:334:110 73 chr2 196 73 35M = 196 0 TATGTAAAGTAACTGAACCTATGAGTCACAGGTAT <<<<<<<<<<<<<<<<<<4;<<<<<<<::6<55:. MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:287:334:110 133 chr2 196 0 * = 196 0 GATGAATACTAAGATTGATGTAGCAGCTTTTGCAA .5+7)09<))&-&:33953<-./&&&)((;+3399 MF:i:192
--B7_597:7:5:753:806 83 chr2 197 99 35M = 45 -187 ATGTAAAGTAACTGAACCTATGAGTCACAGGTATT ;:<:<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:149:572:877 163 chr2 197 99 36M = 334 173 ATGTAAAGTAACTGAACCTATGAGTCACAGGTATTC =>7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:85:923:726 147 chr2 199 99 35M = 43 -191 GTAAAGTAACTGAACCTATGAGTCACAGGTATTCC <:<<<%3<<1<<86<<-<<<<<<<<<<<<6<<1<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:285:241:560 83 chr2 200 99 35M = 37 -198 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT :<<<<;<<,<<<<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:41:461:436 163 chr2 200 74 35M = 389 224 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT <<<<<<<<<<<<<<<<<<<:<<<<<<<<;<;;;:; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:6:25:949:33 99 chr2 201 99 35M = 383 217 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG =;===/8========*==&;6=&=&:=6&:=::67 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:60:590:1760 99 chr2 201 99 35M = 376 210 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG <:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:86:693:234 163 chr2 202 82 35M = 388 221 AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA ;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777 MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:4:223:776 163 chr2 203 93 35M = 387 219 AGTAACTGAACCTATGAGTCACAGGTATTCCTGAG <<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;<;2< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:88:84:1558 99 chr2 203 95 35M = 394 226 AGTAACTGAACCTATGAGTCACAGGTATTCCTGTG <<;<<<<<<<<<<<<;;<<<<<<<::<<<<<<7&< MF:i:18 Aq:i:22 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_597:2:168:829:88 163 chr2 205 99 35M = 369 199 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGA <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<9;4;2 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:389:889 147 chr2 205 99 36M = 37 -204 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA ;<<;;56;==================8========8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:81:685:141 99 chr2 207 85 34M = 382 210 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA <<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7 MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:1312:1400 99 chr2 207 99 40M = 385 218 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<;<<<:<<:<;<:<<<;:;<<<<<<:<8<1;;:::88 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:127:725:381 83 chr2 209 99 34M = 39 -204 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA +<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:19:736:559 99 chr2 209 99 35M = 370 196 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:117:284:589 83 chr2 210 99 35M = 43 -202 GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG ==8==;==================;========== MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:120:596:847 163 chr2 211 83 35M = 410 234 AACCTATGAGTCACAGGTATTCCTGAGGAAAAAGA <<<<<<<<<<<<<;<<<9<<<<<<<;:<62;58;2 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_610:5:51:904:391 163 chr2 212 97 35M = 401 224 ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:96:1314:1448 163 chr2 213 93 35M = 388 210 CCTATGAGTCACAGGTATTCCTGAGGAAAAATAAA <<<<<<<<<<<<<<<<<<<<<<<<5<4<<<<-<<< MF:i:18 Aq:i:18 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS139_19:3:73:1158:535 163 chr2 213 99 40M = 377 204 CCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTG <<<<<<<<<<<<<<<<<<<<<<8<;;<<<<<9<<9::8:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:223:583:968 147 chr2 215 88 36M = 47 -204 TATGAGGCACAGGTATTCCTGAGGAAAAAGAAAAAG 1<';<<&%-:<<<<<:66%<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:3:160:173:889 163 chr2 215 99 35M = 379 199 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA <<<<<<<<<<<<<<<<<<<<;0<7<<;<<<;7<09 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:28:350:895 83 chr2 215 95 35M = 48 -202 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA :<;<<<:;<-<<<<<4;77<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:45:707:147 163 chr2 216 99 35M = 424 243 ATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<&<<<<:<<9<<<9<<<<75;;;< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:18:1757:95 99 chr2 216 45 35M = 374 193 ATGAGTCGCAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<<<<<<<<1<:<<<<<<:<<<;:< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_66:6:310:747:415 163 chr2 217 99 35M = 387 205 TGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGT <<<<<<<<<<<<<<<<<<:<<<<<;<<<<<;<;<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:114:938:216 147 chr2 218 99 36M = 63 -191 GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA <<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:179:629:513 163 chr2 220 99 35M = 409 224 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG <<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:88:55:1187 99 chr2 220 66 35M = 391 206 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG ;;<;;;<<99<<;;<;;;;;:;49;:;;;;87898 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:119:38:945 99 chr2 221 99 35M = 428 242 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA <<<<<<<<<<<<<<<8<<<<<8<<<8<;<<7<:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:67:800:450 147 chr2 221 99 35M = 41 -215 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA 9-<9<;<<<<9;5<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:102:915:87 147 chr2 222 99 35M = 65 -192 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA ;<8<;;<<<<7;<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:113:367:659 163 chr2 222 72 35M = 390 203 CACAGGTATTCCTGAGGAAAAAGAAAAAGCGAGAA =9====8==========:=:=====9=:=&====5 MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS218_1:2:26:211:481 147 chr2 222 99 35M = 43 -214 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:90:1906:1528 83 chr2 222 99 35M = 41 -216 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<<<<<<<<<3:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:13:100:876 163 chr2 223 73 36M = 397 210 ACAGGGATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <8<<<*<2<7<<<6<<<<<<6<<8<<<<5<<<<4<9 MF:i:18 Aq:i:30 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS56_63:5:117:570:971 163 chr2 223 99 35M = 413 225 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <<<<<<<<<<<<<;;;<<<<6<7;9;<:;<;<;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:50:1203:1094 83 chr2 223 99 35M = 46 -212 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <7<<<<<5:+63<<<<<<<<<<<<<<<<2<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:107:395:312 83 chr2 224 99 35M = 44 -215 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT ;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:29:833:612 83 chr2 224 99 35M = 58 -201 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <<;<<<;<::<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:158:943:467 83 chr2 225 99 35M = 57 -203 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT <:<<;;<:5<<<<<<<<<<<<<<<<<<;<<<;<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:201:768:529 163 chr2 225 99 35M = 396 206 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT ==========================1=======; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:11:994:584 99 chr2 226 97 35M = 417 226 GGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTT <<<<<<<<<<<7<<<<<<<<<<<<<6<<<<<<3<6 MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:206:873:186 83 chr2 227 99 35M = 66 -196 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;<<;--7<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:4:38:28:122 83 chr2 227 99 35M = 46 -216 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;9;9;-1<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:66:372:343 83 chr2 228 99 35M = 40 -223 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG ;<1;89<<<<<;<9<<<<9<<<;8<9<;<<<<<;8 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:277:144:848 83 chr2 228 99 35M = 64 -199 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG <<<)63<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:21:1601:1666 83 chr2 228 99 40M = 56 -212 TATTACTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA -;;3&1<<<<<<<<<<<<1<<<</<<<<<</<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_57:1:189:503:110 83 chr2 229 79 35M = 63 -201 ATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGA =;;6:============================== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:5:257:654:116 147 chr2 231 99 35M = 64 -202 TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA 0+37<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:69:1130:832 147 chr2 231 94 35M = 50 -216 TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA 6)377;3;;;;;;;;;1;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:254:542:848 147 chr2 233 99 36M = 79 -190 CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC ,:4<8<<<<<<<<<<<<<;:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:285:489:327 147 chr2 233 99 35M = 68 -200 CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA 9;;<<8<<<<<<<<<<<<;<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:163:611:211 163 chr2 234 99 35M = 405 206 TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC ============8===============;=6;;<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:296:224:724 83 chr2 234 99 35M = 50 -219 TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC 8<<<5<<<<<<<<<<<<<<<<<<<<7<<<<<;<9< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:58:271:612 99 chr2 236 99 35M = 415 214 AGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTA <;<<<<<<<<<7<<<<<<<<<<<<<<+47<<;<:: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:15:381:715 147 chr2 237 99 35M = 72 -200 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT <<<<<<<<<<<<<<9<<<<<<97;<<<<<<<<9<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:203:419:243 83 chr2 237 99 35M = 54 -218 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:41:1281:1785 99 chr2 237 99 35M = 399 197 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT <<<<<<<<<<<<<<<<<<<<<;<<<;<<<<<<<8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:218:858:445 99 chr2 239 99 35M = 421 217 AAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT ;===5=;=======;==3======9;,79==;=== MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:319:250:718 83 chr2 240 99 35M = 52 -223 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG <;:<<<<;<<<:<<<<<<49:<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:92:493:891 99 chr2 240 99 35M = 408 203 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG <<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<8 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:78:855:352 83 chr2 240 99 34M = 65 -209 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT 2<<<<<<<9<<4<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:277:921:474 83 chr2 241 99 35M = 45 -231 AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:41:199:388 99 chr2 243 99 35M = 403 195 AGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGG ;;<<<<<;;<<<<<<;;<;;<<;;<<<<<<99999 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:307:481:625 99 chr2 245 99 36M = 410 201 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:134:126:465 99 chr2 245 99 35M = 434 224 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA <<<<<<<<<<<<<;<<<<<<<<<<<<<5<<:<<41 MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:44:153:969 163 chr2 245 95 35M = 447 237 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA *:::7<77<:<<<<:<<(597:<:<9//7<529/0 MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:182:1002:639 83 chr2 246 99 35M = 77 -204 AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG <<;;9;9<<<<<<;<7;<;<<<<;;<<<;<<7;<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:54:91:1232 147 chr2 246 99 35M = 57 -224 AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:204:737:61 163 chr2 247 99 35M = 437 225 AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT <<<<<<<<<<<<<<<<<<<<<<<<<:<<9<+4:<0 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:148:170:895 147 chr2 247 99 35M = 91 -191 AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT <<9<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:46:122:479 147 chr2 248 99 35M = 87 -196 AAGTGAGAAGTTTGGAAGAACTATTTGAGGAAGTA <<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS219_1:7:16:1343:1621 99 chr2 248 99 35M = 426 213 AAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTA <<<<<<<<8<<<<;<<<;<;<<<<<<<:;4;71:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:313:531:169 83 chr2 250 99 36M = 89 -197 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT 98;<;;<<;8<<<<<<<<<<<8<<<<<<<<8<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:75:166:463 147 chr2 250 99 35M = 64 -221 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<============================== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:130:260:553 99 chr2 250 99 34M = 439 224 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGCAC <<<<<1<<<<<<<<<<6<<81</<4*2;7:+90( MF:i:18 Aq:i:42 NM:i:2 UQ:i:31 H0:i:1 H1:i:0
--EAS56_59:2:60:677:921 99 chr2 250 96 35M = 393 178 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:60:1037:1146 99 chr2 250 99 35M = 447 232 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<<<<<<<<<<<<<<<<<<<<<;<:;;;;;;< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:17:1222:783 83 chr2 251 99 35M = 87 -199 TGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT 6<<<8<69<8199<7<<<6<<<<<<<<<1:<:<<: MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:96:491:1891 163 chr2 253 99 35M = 409 191 AGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGG <:<<<<<::<<<<<<<<<<<<<<<<:<<::7<<:7 MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:75:615:555 99 chr2 255 99 35M = 416 196 AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG <<<<<<<<<<<<<<<<<<<<<;<;<<<29<;.484 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:32:686:735 147 chr2 255 78 35M = 84 -206 AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG <<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:65:85:1547 163 chr2 257 99 35M = 434 212 GTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:94:1655:1921 99 chr2 258 85 35M = 447 224 TTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAA <<<8<<<<<<<<<8<<8;8<;<;<;;<<9+868<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_610:7:177:469:800 99 chr2 259 99 35M = 433 209 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA <<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<<;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:178:276:693 83 chr2 259 99 36M = 96 -199 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAAC :;<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:14:697:541 99 chr2 259 99 35M = 432 208 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA <<<<<<<<<<<<<<<<<<<:<<<<<<<;;;;8;;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:37:156:134 163 chr2 261 99 35M = 443 217 GGAAAAACTATTTGAGGAAGTAATTGGGGAAAACC ;;;;;;;;;;9;;;;;;;;;;;;;;;9;;;77679 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:215:861:605 83 chr2 262 94 36M = 107 -191 GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC ;<<<<<;:<7:<<<;<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:945:2005 83 chr2 262 99 35M = 77 -220 GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCT 7<<<<;;<<;<<<<<7<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:52:751:360 163 chr2 263 99 35M = 443 215 AAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<:76<<<<;9:;: MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:238:514:194 83 chr2 265 99 35M = 68 -232 AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT <<6<<<<:9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:194:470:416 147 chr2 265 99 35M = 98 -202 AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT <<<7<<;<<<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:71:517:742 147 chr2 266 99 35M = 81 -220 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:254:617:73 83 chr2 266 99 35M = 83 -218 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<:<<<9;<<<;;<:<-<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:199:818:124 147 chr2 266 99 35M = 73 -228 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:41:653:1568 83 chr2 266 99 35M = 95 -206 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT 977979;:;<;;;;;;<<5;<;<;<<<;;;;;;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:211:84:84 99 chr2 268 99 35M = 440 207 CTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAG <<<<<<<<<<<<<<<<:<<:<<:<<<44<4<<9<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:152:355:962 163 chr2 269 99 35M = 456 222 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <;<<<<<;8<<<<<<<<<;5;;88<<3<<<<<&0; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:285:395:450 99 chr2 269 99 35M = 458 224 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <<<<<<<;<<<;<<<<<;:<:7<;<;7<7<<;;7< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:15:568:42 121 chr2 269 69 35M = 269 0 TTTTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT !!;:<8<;<<<8<<<<<<<<8<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:2 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:15:568:42 181 chr2 269 0 * = 269 0 TTTTTTTTTTTGTTTTTTTTTTTTTTTTTTTTATA !!!!!!!!!++++!!!!!!!!!!!!!!!!!!!,!, MF:i:192
--EAS192_3:8:6:237:885 99 chr2 269 99 35M = 433 199 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <<<<<<<<9<<<<<<<<<<<<<<<<<<<<<;;;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:5:259:250 147 chr2 269 99 35M = 115 -189 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT 8<83;<<<<<<<<<<5<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:206:994:556 73 chr2 270 75 35M = 270 0 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:206:994:556 133 chr2 270 0 * = 270 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS54_71:4:169:256:888 83 chr2 270 99 34M = 94 -210 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT &<<:<;<<;;<8<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:317:72:221 163 chr2 270 99 35M = 422 187 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC ===========;=======;;:==6=;=====;== MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:40:925:442 83 chr2 271 99 35M = 93 -213 TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT =;================================= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:158:909:321 163 chr2 271 99 35M = 453 217 TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:35:522:294 83 chr2 272 99 35M = 95 -212 TTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:176:971:874 163 chr2 273 76 35M = 432 195 TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG <<<<<<<<<<<<<:<;<<<<<<<<<<<<<5<<<<7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:226:869:36 99 chr2 273 99 35M = 461 223 TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG :<<<<,:<;:.:<<:<<717,;2171717717116 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:106:595:322 163 chr2 274 99 35M = 440 201 GAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:54:436:1452 83 chr2 275 99 35M = 108 -202 AGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:77:1780:693 147 chr2 276 99 40M = 106 -210 GGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGAT :**::799<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:147:423:584 99 chr2 277 99 35M = 451 209 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;96 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:188:782:483 163 chr2 277 99 35M = 431 189 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<7<;77 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:78:1314:1275 99 chr2 277 99 35M = 469 227 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<<<8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:63:727:203 147 chr2 278 99 35M = 114 -199 AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA <<;7<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:13:1507:1146 147 chr2 278 99 35M = 84 -229 AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA 88788;,;:-:2;;;;;;;;:;:;;;;;;;;;;;; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:77:1000:1780 83 chr2 279 66 35M = 123 -191 AGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAG 777774;;4-7;;;;;;:;;;:;;;<;;;;<<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:93:490:901 163 chr2 280 99 35M = 445 200 GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA <<<<<<<<<<<<<;<<<<<<<;<<<<<:<<1+4-8 MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:227:657:95 99 chr2 280 99 35M = 458 213 GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<85 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:57:324:546 163 chr2 281 99 36M = 458 213 TAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT <<<<<<<<<<<<<<<<<<<<<:<<<8:8<<;::;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:223:440:667 147 chr2 282 99 35M = 97 -220 AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT <<;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:274:1078 163 chr2 282 99 40M = 458 216 AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC <<<2<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;::::: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:196:511:896 163 chr2 283 99 35M = 446 198 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT <<<<<<<<<<<<<<<<<<<<<<<<;<<<4<88;<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:112:729:591 147 chr2 283 99 35M = 86 -232 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:34:380:815 83 chr2 283 99 35M = 91 -227 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT ;;;;<<<<<<;<<<<;<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:117:156:84 147 chr2 285 99 35M = 95 -225 TGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAG <;;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:61:1000:1534 83 chr2 286 99 35M = 104 -217 GGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGA <<;<<<<;;<<;6;<<<;<4;<<7<<<<<;<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:22:1623:709 147 chr2 287 99 35M = 107 -215 GGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC <'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:7:682:201 163 chr2 288 99 35M = 452 199 GGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACA <<<<<<<7<<7<<<<77&;-9<97<76<;<<993< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:91:89:666 153 chr2 289 60 35M * 0 0 GAAAACCTCTTTAGTCTTGCTAGAGATTTAGACAT 74752;;4;;;;;;;;7);;;4;;;;)4;;;;;13 MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:46:13:880 99 chr2 290 99 35M = 445 190 AAAACCTCTTTAGTCTTGCTAGAGATTTAGACATC <<<<<<<<<<<<<<<<<<<<;<7<3<<<9<+;;<9 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:187:715:521 163 chr2 291 99 35M = 451 195 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<<<<<<<<<<<<:<<<<<<<;<<;<;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:210:809:735 83 chr2 291 99 35M = 93 -233 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:145:383:182 83 chr2 291 99 35M = 105 -221 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:8:89:254:332 83 chr2 291 76 35M = 124 -202 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<:<;<<<<<<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:63:816:921 83 chr2 291 99 35M = 106 -220 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:280:662:939 99 chr2 294 99 35M = 442 183 CCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAA <<<<<<<<<<<<<;<<<;;7<<<<<<<<<<<<:8< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:250:628:423 163 chr2 295 99 36M = 489 230 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG <<<<<<<<<<<<<<<<<<:;<<<<:<<<<;;;;;;4 MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:255:549:422 163 chr2 295 99 35M = 456 196 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT <<<<<<<<<<<<<<<<;<<<<<<<:<<<<<<;;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:2:491:1886 89 chr2 295 75 35M * 0 0 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT <<:<8:<<<:<<<<<<<<<<<9<<<<<<<<<<<<: MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:267:821:860 163 chr2 296 99 35M = 451 189 TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG ;<<<<<8<<<<<8<<;<8<<<<<5<;<<<<<2;<5 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:42:333:516 83 chr2 296 99 35M = 109 -222 TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG <<<<<<<<7<63<7<<<<<<<<<<<7<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:119:161:322 99 chr2 297 99 35M = 479 217 CTTTAGTCTTGCTAGAGATTTAGACATCTAAATGA <<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<</6 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:48:310:473 147 chr2 298 66 35M = 123 -210 TTTAGTCTTGCTAGAGATTTAGACATCTAAATGAA 77999;;6;;;;;;;;;;;;;;;9;;;;;;;;;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:159:273:253 153 chr2 299 76 35M * 0 0 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA <<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:181:392:500 99 chr2 299 99 35M = 470 206 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA <<<<<:<<<2<<<<;5<<<<29+<<)</65<7.24 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:17:989:186 147 chr2 299 91 35M = 120 -214 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA 87;38$<3=/<==============9========= MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:33:1445:1357 147 chr2 299 85 35M = 121 -213 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA 88888;;;;;;;:;;;;;;;:;9;;;;;;;;;;;; MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:119:730:190 147 chr2 301 99 35M = 114 -222 AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGA ;;;3;<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:62:969:12 99 chr2 303 99 35M = 464 196 TCTTGCTAGAGATTTAGACATCTAAATGAAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:103:731:697 147 chr2 304 72 35M = 125 -214 CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC :::;3:<<<<<<<:<<<<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:111:142:21 163 chr2 304 99 35M = 479 210 CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC <<<<<<<<:<:<<<<<<<<<<<<<<<<<<<<;<;9 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:319:280:57 99 chr2 306 99 35M = 467 196 TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC ;==========;=====6;=========;=<;6;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:76:205:587 163 chr2 306 99 35M = 483 212 TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:279:124:41 147 chr2 307 69 36M = 124 -219 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA :17<8<<<:&<<<<<<:;'<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:10:349:1147 153 chr2 307 74 40M * 0 0 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA :/:::<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:16 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:22:490:2011 99 chr2 307 99 35M = 485 213 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:46:173:214 163 chr2 308 99 35M = 487 214 CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA <<<<<<<<<<<<<<<<<<<<<<<<<;<3<<<<<<; MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:283:577:398 99 chr2 308 99 35M = 488 215 CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA <<<<<<<<<<<<<<<<<<<9<<<<<<<<<;<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:27:280:592 99 chr2 310 99 36M = 484 210 AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGA <<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<5< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:11:1238:1728 163 chr2 310 99 35M = 475 200 AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAG <<7<<<<<;<<<<<<<<<<<<;<<<;<<<<<<;;< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:118:121:760 89 chr2 311 77 36M * 0 0 GAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA :<<<;;<<<<6<;<<<;<<<<;<<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:318:679:883 153 chr2 313 75 35M * 0 0 GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT <<;4<<;<:<<7<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:30:1452:1563 83 chr2 313 94 35M = 122 -226 GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT <<39<<<59<<:<<+<<<6<<:<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:189:130:136 99 chr2 314 79 35M = 494 215 ATTTAGACATCTAAATGAAAGAGGCTCAAAGAATG ==<<=================<<====<<=;=6== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:27:577:849 83 chr2 316 99 35M = 114 -237 TTAGACATCTAAATGAAAGAGGCTCAAAGAATGCC 5:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:71:478:175 83 chr2 317 99 35M = 171 -181 TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA <<<<;<96<<<<;<<<<<<<<<77<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:38:999:463 99 chr2 317 39 35M = 503 221 TAGACATCTAAATGAAAGNNGCNNNAAGAATGCCA 7<<<<<<<<:07<<:<<7!!<<!!!::<88<<<<4 MF:i:130 Aq:i:39 NM:i:5 UQ:i:0 H0:i:0 H1:i:0
--EAS54_71:8:215:830:609 89 chr2 317 71 33M * 0 0 AAGACATCTAAATGAAAGAGGCTCAAAGAATGC +<)<:<<:<<<<<<<<<9<<<<<;<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS188_7:7:213:309:373 83 chr2 317 99 35M = 161 -191 TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA <<<86<82<<<<<<<<<<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:45:1339:1807 153 chr2 319 64 35M * 0 0 GACATCTAAATGAAAGAGGCTCAAAGAATGCCAGG 77797;;:;::&:;;0:;8;;4;;:;;6;;;;;;; MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:197:52:58 83 chr2 323 99 35M = 165 -193 TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA <7;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:8:6:104:118 83 chr2 323 99 35M = 154 -204 TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:185:96:948 147 chr2 324 99 36M = 160 -200 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATA 6<;;<;<<;<<<<<747<<<<<<<<77<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:61:346:384 163 chr2 324 68 35M = 496 207 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT <<;<<<<<<<<9<;<<9;<6<2;<6<<<;9*558; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:177:800:714 163 chr2 324 76 35M = 497 208 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT <<<<<<<<<<<<<<<<<<<<<;<<<;<;<<<<<;< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:329:339:408 99 chr2 325 99 36M = 515 226 TAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:214:565:337 99 chr2 326 99 35M = 481 190 AAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC <;<<<<<<<<<<<<<<;<<<<9<<<<<;;;;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:296:401:60 89 chr2 327 68 35M * 0 0 AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA <<*<<<<7<<)<<3<<<9<<<<<<<<<<<<<<;<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:88:1413:14 89 chr2 327 76 35M * 0 0 AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA <<<<<<<<<<<;;;<<<<<<;<;;<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:34:649:318 163 chr2 328 65 35M = 481 188 ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACAT 9<<3<<<9<<<<<<<<<7<<9<<0<<.0<*:77,; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:29:1822:1881 83 chr2 328 74 40M = 150 -218 ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA ;87;;<<<;<5<5<<<<<<<;<<<<<<<<<<<<:<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:187:199:369 153 chr2 329 74 35M * 0 0 TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT ;<><<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<< MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:23:268:529 153 chr2 329 71 35M * 0 0 TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT 7;<<<<<<57;-<<<<<<:<77<<<<<<<;<;<<< MF:i:32 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:315:219:7 153 chr2 330 69 35M * 0 0 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG 7==::<2=8<<<=====>888<=2=>==>,>,>>8 MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:63:5:870 83 chr2 330 75 35M = 148 -217 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG :<;<;<<<4:;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:243:557:560 163 chr2 331 75 36M = 499 204 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<9<<<<<<<<<<<<<<<<<<;<<89<<9<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:270:430:269 163 chr2 331 99 36M = 519 224 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;7;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:6:284:442:747 89 chr2 331 75 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <;<<<<<:<;<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:71:31:1973 89 chr2 331 76 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <<<<<7<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:30:466:652 147 chr2 332 98 35M = 163 -204 AAGAGGCTAAAAGAATGCCAGGAAGATACATTGCA <<<<<;3;&<<<<<<<</6<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_61:3:208:118:673 147 chr2 332 76 35M = 169 -198 AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<;;<;<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:95:1530:28 163 chr2 332 74 35M = 490 193 AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA ;;;;;;;;;;:;;;;;;;8;;;;;;;;;;;77747 MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:104:965:517 73 chr2 333 77 35M = 333 0 AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA <<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:104:965:517 133 chr2 333 0 * = 333 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS54_65:7:155:629:357 163 chr2 333 99 35M = 521 223 AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA <<<<<<<<8<8<<6<<<<<<<<;<9<5<;<;;941 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:149:572:877 83 chr2 334 99 36M = 197 -173 GAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA 6<94693<;<<<<;;<<<<<<<<<<;9<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:53:544:889 99 chr2 335 76 35M = 495 195 AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA <<<<<<<<;<<<<<<<<<<<<<<<<<;<<<<<;<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:226:370:91 99 chr2 335 99 35M = 482 182 AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA 8<<<;<8<8<;<<<8<<;7<7;8784<<,;864<& MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:119:651:88 163 chr2 337 99 35M = 527 225 GCTCAAAGAATGCCAGGAAGATACATTGCAAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:20:592:496 163 chr2 338 75 35M = 498 195 CTCAAAGAATGCCAGGAAGATACATTGCAAGACAG <<<<<<<<<<<<<<<<<<<<<<<<<==<<<<<<:< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:214:946:229 83 chr2 339 99 35M = 165 -209 ACAAAGAATGCCAGGAAGATACATTGCAAGACAGA )+<<<*<<77;8<;7<<8<4<;<88<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS188_7:5:163:982:695 99 chr2 339 77 35M = 499 195 TCAAAGAATGCCAGGAAGATACATTGCAAGACAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:14:1872:1521 163 chr2 339 62 35M = 500 196 TCAAAGAATGCCAGGAAGATACATTGCAAGTCAGA 7<<<<77<<<3<3<7.'<<<<<7<67<+.0%4*<4 MF:i:18 Aq:i:2 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS192_3:4:293:168:240 147 chr2 340 99 35M = 167 -208 CAAAGAATGCCAGGAAGATACATTGCAAGACAGAC +;;;;<8<<86<<<<<<<;;8;7;<;<8<8;<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:86:697:941 83 chr2 341 99 35M = 187 -189 AAAAAAATCCCGGAAGATACATTGCAAGACAGACT 1<<%<<<1:<58<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:4 UQ:i:67 H0:i:0 H1:i:0
--EAS54_71:4:14:88:306 99 chr2 341 99 34M = 521 215 AAAGAATGCCAGGAAGATACATTGCAAGACAGAC <<<<<<8<<<<<<;<<<3<<<8<<;<;;<15<:6 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:183:697:555 163 chr2 341 84 35M = 505 199 AAAGAATGCCAGGAAGATACATTGCCAGACAGACT =====================:===&==:;==5;; MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_57:3:41:739:907 163 chr2 344 99 35M = 520 211 GAATGCCAGGAAGATACATTGCAAGACAGACTTCA <<<<<<<<<<<<<<<<<<<<<<<<;<9<<<;;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:100:1147:124 83 chr2 345 99 35M = 150 -230 AATGCCAGGAAGATACATTGCAAGACAGACTTCAT <<<<96<<<<<<<<<<<<<<<<<<<<<<:<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:127:828:697 99 chr2 346 99 35M = 552 241 ATGCCAGGAAGATACATTGCAAGACAGACTTCATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:62:125:888 163 chr2 347 99 35M = 504 192 TGCCAGGAAGATACATTGCAAGACAGACTTCATCA <<<<<<<<<<<<<<<<<<<::<<<:7<::<:;<<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:1:1598:843 163 chr2 347 99 40M = 500 193 TGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATA <<<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<8<4:8:: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:71:83:58 83 chr2 349 77 35M = 148 -236 CCAGGAAGATACATTGCAAGACAGACTTCATCAAG 8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:88:1454:418 163 chr2 349 99 35M = 522 208 CCAGGAAGATACATTGCAAGACAGACTTCATCAAG :<<:<<<<<<<<<<<::::<:<:<9<5<<<<<<8: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:36:649:554 163 chr2 350 99 35M = 523 208 CAGGAAGATACATTGCAAGACAGACTTCATCAAGA <<<<<4<<8<<<<<<8<6<<88<<<<<<<-;<;0; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:189:831:878 163 chr2 351 99 35M = 555 239 AGGAAGATACATTGCAAGACAGACTTCATCAAGAT :<<<2<<<<<<<<<<:8<8<<<<<<<<<<87489; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:14:1211:1332 83 chr2 351 99 35M = 178 -208 AGGAAGATACATTGCAAGACAGACTTCATCAAGAT 978961;;991;97;<;;<;<<;;;;;<;;<:8:< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:328:537:640 147 chr2 352 99 35M = 185 -202 GGAAGATACATTGCAAGACAGACTTCATCAAGATA ;:<<;<<<<<::<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:85:361:418 99 chr2 353 99 36M = 517 200 GAAGATACATTGCAAGACAGACTTCATCAAGATATG <<<<<<<<<<<<<;<<<<<<<<<<<<<<;4;<<<<3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:329:437:643 99 chr2 354 99 36M = 540 222 AAGATACATTGCAAGACAGACTTCATCAAGATATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<<<1 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:135:354:66 147 chr2 356 99 35M = 188 -203 GATACATTGCAAGACAGACTTCATCAAGATATGTA ;;;;7<<<<:<<<<;<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:9:648:712 147 chr2 358 99 35M = 182 -211 TACATTGCAAGACAGACTTCATCAAGATATGTAGT *;0;;;95<<<<7<<<;;<<<;;<<<<;<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1184:994 163 chr2 358 99 35M = 518 195 TACATTGCAAGACAGACTTCATCAAGATATGTAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<8< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:50:30:15 147 chr2 358 10 35M = 192 -201 TACATTGCAAGACAGTCGTCAGCAAGATATGTAGT 1-%-22&&)&11,&/&&176<&<<<222<,6,<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:26 H0:i:0 H1:i:0
--EAS51_66:4:322:350:374 163 chr2 360 99 35M = 546 221 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:41:745:603 163 chr2 360 99 35M = 536 211 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <<<<<<<<<<<<:<<<<<<<<<<<<<<<6<:8<<: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:138:186:459 163 chr2 360 97 35M = 518 193 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <*<<7<<0<7<<+<-:<<&<:6:4:0-:<<2.:5< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:41:1308:619 83 chr2 360 99 35M = 184 -211 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA 0<9476<<<<<0<<<2<&<0<.<<<<<<<<<.<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:125:884:276 163 chr2 362 99 35M = 541 214 TTGCAAGACAGACTTCATCAAGATATGTAGTCATC <<<<<<<<<<<8<<<<<<<<<<<<<<<<<<;;<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:156:21:69 83 chr2 362 99 35M = 163 -234 TTGCAAGACAGACTTCATCAAGATATGTAGTCATC <:3:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:66:1381:181 163 chr2 362 99 40M = 544 222 TTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACT <<6<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<::4:7 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:11:1261:1200 163 chr2 362 99 35M = 558 231 TTGCAAGACAGACTTCATCAAGTTATGTAGTCATC <<<<<<<<<<<;<<<<<<<<;<<<;<:<<8<<:<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_99:5:191:885:623 163 chr2 363 99 35M = 551 223 TGCAAGACAGACTTCATCAAGATATGTAGTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:53:783:78 99 chr2 363 99 35M = 561 233 TGCAAGACAGACTTCATCAAGATATGTAGTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<;<<;<7;<:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:177:24:389 83 chr2 365 99 35M = 175 -225 CAAGACAGACTTCATCAAGATATGTAGTCATCAGA +<<;<9<<<9<<;<<7<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:58:684:520 99 chr2 367 99 35M = 538 206 AGACAGACTTCATCAAGATATGTAGTCATCAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:71:187:824 99 chr2 367 99 35M = 534 202 AGACAGACTTCATCAAGATATGTAGTCATCAGACT ;===;======3==;==========4=;=7;;3;6 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:324:238:736 83 chr2 367 99 35M = 180 -222 AGACAGACTTCATCAAGATATGTAGTCATCAGACT <<<9<<<70,<<4<<<<<7<4<7<<<<<0<<<<<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:19:306:982 99 chr2 368 99 35M = 538 205 GACAGACTTCATCAAGATATGTAGTCATCAGACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:168:829:88 83 chr2 369 99 35M = 205 -199 ACAGACTTCATCAAGATATGTAGTCATCAGACTAT <,,;<838883;;;<<<<<;<8<8;<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:122:589:134 163 chr2 369 99 35M = 562 228 ACAGACTTCATCAAGATATGTAGTCATCAGACTAT <<:<<:<:<<<<<:<8<<<<<<<:<::<<<4:<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:303:970:243 163 chr2 370 99 35M = 564 229 CAGACTTCATCAAGATATGTAGTCATCAGACTATC <<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<8<8< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:19:736:559 147 chr2 370 99 35M = 209 -196 AAGACTTCATCAAGATATGTAGTCATCAGACTATC )<7<2;;4<<4<<<<;<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS51_66:3:246:711:981 99 chr2 371 99 35M = 559 223 AGACTTCATCAAGATATGTAGTCATCAGACTATCT <<<<<<<<;<<<<:;<<;;<:<<<4<<:4;00<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:89:1164:573 99 chr2 371 99 35M = 560 224 AGACTTCATCAAGAGATGTAGTCATCAGACTATCT <:<<;<2<<<<<<<&:2<;<;<<<<;,+;:<<4:< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS220_1:8:18:1757:95 147 chr2 374 45 35M = 216 -193 CTTCATCAAGATATGTAGTCATCAGACTATCTAAA <<<6<&:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:284:597:682 99 chr2 375 99 35M = 557 217 TTCATCAAGATATGTAGTCATCAGACTATCTAAAG <<<<<<<9<<<<<;<<6<<<<<;<9<<<<<<1;;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:10:394:392 99 chr2 376 99 35M = 542 201 TCATCAAGATATGTAGTCATCAGACTATCTAAATT <<<<<<<<<<<<<<<<<<<:<<<<<<;<<;;:6&; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:5:28:538:148 163 chr2 376 99 35M = 557 216 TCATCAAGATATGTAGTCATCAGACTATCTAAAGT <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<+771; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:60:590:1760 147 chr2 376 99 35M = 201 -210 TCATCAAGATATGTAGTCATCAGACTATCTAAAGT <8<-<<<<<<<82<<<4<<<<<<<<<<<<<8<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:1158:535 83 chr2 377 99 40M = 213 -204 AATAAAGATATGTAGTCATCAGACTATCTAAAGTCAACAT +;6+;<;<<<<<<<<<0<<;<<<;<<<8<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:2 UQ:i:20 H0:i:1 H1:i:0
--EAS188_7:3:182:104:921 99 chr2 378 99 35M = 575 232 ATCAAGATATGTAGTCATCAGACTATCTAAAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:160:173:889 83 chr2 379 99 35M = 215 -199 TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA ;)<</<8<<<<<<</<;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:71:311:202 83 chr2 379 99 35M = 188 -226 TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA ;6<;<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:315:201:673 163 chr2 381 45 36M = 542 197 AAGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<<:; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:228:915:631 163 chr2 381 66 35M = 547 201 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA =================;==========4====== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:228:736:747 163 chr2 381 68 35M = 542 196 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA <<<<<<<<<;<<<<<<<;;<<;<<<<;::<;;7;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:263:689:572 99 chr2 381 68 35M = 553 207 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA <<<<;<<<<<;<<<<<<&;;<<<;<<:<+;;7;;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:81:685:141 147 chr2 382 85 35M = 207 -210 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT ;+;(;)..=3.1=.7=;=8;==<4====;====== MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS114_32:1:208:971:600 163 chr2 382 99 35M = 559 212 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<8<<:<<<0;44<<:4<:< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:7:1864:1569 99 chr2 382 99 35M = 561 214 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<<<<<<<<<<:<<<8<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:224:592:744 147 chr2 383 99 35M = 188 -230 GATATGTAGTCATCAGACTATCTAAAGTCAACATG 6<6<<<<<<9+<6-<<<:<:<:<<<<<:<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:6:25:949:33 147 chr2 383 99 35M = 201 -217 GATATGTAGTCATCAGACTATCTAAAGTCAACATG -<4<666<<-7<5<<<<<(<<<<<<<<<<<<<<-< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS54_73:5:271:874:367 163 chr2 384 99 35M = 560 211 ATATGTAGTCATCAGACTATCTAAAGTCAACATTA <<<<<<<<<<<<<<4<;<;<:<;4<4<<99<7<+% MF:i:18 Aq:i:51 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS139_19:4:26:1312:1400 147 chr2 385 99 40M = 207 -218 TATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAA ::77:<;:+6<+<<<;<<74<<<;<<;<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS51_66:6:310:747:415 83 chr2 387 99 35M = 217 -205 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG ;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--EAS56_57:6:4:223:776 83 chr2 387 93 35M = 203 -219 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG <;9<;<0<<;<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--EAS114_28:3:32:492:907 99 chr2 387 95 36M = 571 220 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGGA <<<<<<<<<<<<<<<<<<<;<;;<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_26:4:110:840:431 163 chr2 388 93 35M = 567 214 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA =====================5:======54=+3+ MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_45:6:86:693:234 83 chr2 388 82 35M = 202 -221 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA 83997;<;;;;98;;3*6<<;<:8;;;;;<;;<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:3 H1:i:13
--EAS139_11:8:96:1314:1448 83 chr2 388 93 35M = 213 -210 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA <<<<7<<:<<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:3 H1:i:8
--EAS114_30:6:41:461:436 83 chr2 389 74 35M = 200 -224 TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA ;<986<;6<<<<<<<;<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:13
--EAS221_3:8:55:932:613 163 chr2 389 77 35M = 568 214 TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA <<<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:10
--EAS1_97:5:219:174:684 163 chr2 390 71 35M = 560 205 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<8<8<<<7<<;<<<<<2<;&;;;;9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS56_57:5:24:284:360 163 chr2 390 76 35M = 567 212 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<<<<<<<;<<<<<<<;<9;<;99;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS114_26:1:113:367:659 83 chr2 390 72 35M = 222 -203 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<5<0&9;<3<<<<<9<<<<4<;<9<9<<<<7<3< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:17
--EAS114_32:5:109:199:592 163 chr2 390 72 35M = 576 221 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<;:<;;<<:;6<<;:;:<<+;;;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS114_45:4:88:55:1187 147 chr2 391 66 35M = 220 -206 GTCATCAGACTATCTAAAGTCAACATGAAGGAAAA 7769,7;;;;;;;;;;;;;;9;;;;;;;;;;;;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:7
--EAS56_59:2:60:677:921 147 chr2 393 96 35M = 250 -178 CATCAGACTATCTAAAGTCAACATGAAGGAAAAAA ========9==;======8==>============= MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:4 H1:i:13
--EAS114_39:3:88:84:1558 147 chr2 394 95 35M = 203 -226 ATCAGACTATCTAAAGTCAACATGAAGGAAAAAAA ;;<<;<<;<<5<<<<<<;<<:<<<;<<<<<<;<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:2 H1:i:3
--EAS56_59:2:201:768:529 83 chr2 396 99 35M = 225 -206 CAGACTATCTAAAGTCAACATGAAGGAAAAAAATT 3<:<9<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:13:100:876 83 chr2 397 73 36M = 223 -210 AGAATATATAAAGTCAACATGAAGGAAAAAAATTCT ;9<$<<<$<<<<<<<<75<<<<<<<9<9<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:6 H0:i:1 H1:i:1
--EAS139_11:4:26:137:1382 99 chr2 397 99 35M = 579 217 AGACTATCTAAAGTCAACATGAAGGAAAAAAATTC <<<<<<7<<<77<<<<<<</<<+<<<<<<7<+<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_67:3:197:261:624 99 chr2 398 99 35M = 587 224 GACTATCTAAAGTCAACATGAAGGAAAAAAATTCT <<<<<<<<<<<;<<<<<<<;<<;<<<<<<;<<<9< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS218_4:3:41:1281:1785 147 chr2 399 99 35M = 237 -197 ACTATCTAAAGTCAACATGAAGGAAAAAAATTCTA <6<<<6<<<<<<:<<6<:<<<<<<<<<<<<6<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_610:5:51:904:391 83 chr2 401 97 35M = 212 -224 TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA ;<96<<<<<<7<<7<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_63:7:137:139:248 163 chr2 401 97 35M = 569 203 TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA <<<<<<<<<9<<<<<<<<<<;<<<<<<<;;<;<;< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:3 H1:i:2
--B7_610:7:15:696:693 163 chr2 403 34 35M = 570 202 TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT 2:+:7<<3<<<<<6+36<<<<<<<6<<6&<<;<.7 MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS114_45:2:41:199:388 147 chr2 403 99 35M = 243 -195 TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT 84898;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:163:611:211 83 chr2 405 99 35M = 234 -206 TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA <<<<9<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:114:19:769 163 chr2 405 90 35M = 572 202 TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA <<<<<*2;6;<<<4.;;<&;;<.<40)<);5-/7; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS51_64:7:92:493:891 147 chr2 408 99 35M = 240 -203 AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA <383<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:5:996:2000 163 chr2 408 99 35M = 575 202 AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_93:1:179:629:513 83 chr2 409 99 35M = 220 -224 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA <;,<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:84:1505:1037 99 chr2 409 99 35M = 586 212 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA <<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<::) MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS221_1:6:96:491:1891 83 chr2 409 99 35M = 253 -191 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA :;5<<7<;:<<;<<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:307:481:625 147 chr2 410 99 36M = 245 -201 TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA ;4<<4<;;<<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--B7_610:5:120:596:847 83 chr2 410 83 35M = 211 -234 TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAG ;/<<:<;<<<<<<<<<<<<<;;<<<<<;<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:3:3:864:1888 99 chr2 411 99 35M = 579 203 CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA ;<<;;<<;;;<;;<<;<;<<;<<;8<<:<;79799 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:34:1614:558 99 chr2 411 99 35M = 569 193 CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA <<<<<<<<<<<7<<<<<8<<<<<<2<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:117:570:971 83 chr2 413 99 35M = 223 -225 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <,<9<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS112_34:8:45:800:733 163 chr2 413 99 35M = 607 229 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <<<</<<<<<<<<<<<<<<<2<9<<<<<5*5;599 MF:i:18 Aq:i:34 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS219_FC30151:7:87:1289:83 163 chr2 413 99 35M = 585 207 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<<<: MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:4:58:271:612 147 chr2 415 99 35M = 236 -214 ATGAAGGAAAAAAATTCTAAAATCAGCAAGAGCAA ;:2=<<;<<<<<<:67:<<:<<<<<<<<<<<<,<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:11 H0:i:0 H1:i:2
--EAS1_108:1:33:779:821 163 chr2 416 99 35M = 579 198 TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS112_34:6:75:615:555 147 chr2 416 99 35M = 255 -196 TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA ;<<<;<<<<<<<<<:;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS188_7:6:11:994:584 147 chr2 417 97 35M = 226 -226 GAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAG <<<<;<<<<<<<;<:<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS114_26:7:218:858:445 147 chr2 421 99 35M = 239 -217 GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATA ;<<<<<<<8;:<<<<<<;<<:<<<<<<<<<<<<;< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_81:2:317:72:221 83 chr2 422 99 35M = 270 -187 AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC =========:======;==;=============== MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:70:766:2016 163 chr2 422 99 35M = 607 220 AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS56_53:4:45:707:147 83 chr2 424 99 35M = 216 -243 AAAAATTCTAAAATCAGCAAGAGAAAAGCATACAG <<<<<<;3<<<<<4;<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:16:1343:1621 147 chr2 426 99 35M = 248 -213 AAATTCTAAAATCAGCAAGAGAAAAGCATACAGTC ;<<9;7=====;;==<==================< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:184:912:258 99 chr2 428 99 35M = 582 189 ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:119:38:945 147 chr2 428 99 35M = 221 -242 ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT =;;8=====:========<================ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:95:235:746 163 chr2 430 99 35M = 598 203 TCTAAAATCAGCAAGAGAAAAGCATACAGACATCT <<<<;<<<<<<<<79<<<<<<<<<<<<<<*;;;<9 MF:i:18 Aq:i:72 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS1_99:2:188:782:483 83 chr2 431 99 35M = 277 -189 CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA 7<<<<<<4<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:39:348:594 163 chr2 431 99 35M = 600 204 CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA <<;<<<<<<<<<;<;;<<<<<<<<<<;<<<:<:<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:176:971:874 83 chr2 432 76 9M1D26M = 273 -195 TAAAATCAGAAGAGAAAAGCATACAGTCATCTATA <<<<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:3:14:697:541 147 chr2 432 99 35M = 259 -208 TAAAAGCAGCAAGAGAAAAGCATACAGTCATCTAT 8<<<<&6<;8<<<<<<<<<<<<;<<<<;<<<<<<8 MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_610:7:177:469:800 147 chr2 433 99 35M = 259 -209 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA =<<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:131:518:588 163 chr2 433 99 35M = 607 209 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<1<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:8:6:237:885 147 chr2 433 99 35M = 269 -199 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA <<<<1:<;:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:134:126:465 147 chr2 434 99 35M = 245 -224 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA <<;:&<3)<<7<:<<<<.:<<<<<8<<<<<<<<<< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:104:402:732 163 chr2 434 99 35M = 610 211 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA =========================7=;===;=:= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:65:85:1547 83 chr2 434 99 35M = 257 -212 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA <<<<<<;:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:85:686:696 163 chr2 435 99 35M = 594 193 AATCAGCAAGAGAAAAGCATACAGTCATCTATAAA ==================<=====:==<=<;=:== MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:144:242:602 163 chr2 436 99 36M = 611 211 ATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG ========================;=====<;;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:204:737:61 83 chr2 437 99 35M = 247 -225 TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG (7=72=;==2=====<===<<============== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:124:253:889 163 chr2 437 99 35M = 598 196 TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG <<<<<<6<<:<<<<<<<<<<<<<;;<<;<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:310:155:312 163 chr2 438 99 35M = 606 203 CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA ;<<<;<<<8<<<<<<<<<<<<;<<<<<8<<<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:78:692:671 99 chr2 438 99 35M = 610 207 CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA <<<<<<<<<<<<<;<<<<<<<:<<:<<<:8<<0;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:130:260:553 147 chr2 439 99 35M = 250 -224 AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA <*;<<7<);<<;9;<5<*<9<;<<;;<7<<<<<1< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:60:163:1612 163 chr2 439 99 35M = 617 213 AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA <<<<<<<<<21<<<<<<<<<3<--<+<<<+<<63< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:106:595:322 83 chr2 440 99 35M = 274 -201 GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA ;+<<<<<<<<<<<<<<<<<<;<<7<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:211:84:84 147 chr2 440 99 35M = 268 -207 GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA 6:<<:<<<<<<9<<<<<<<<<<<;<<<;;;<;<3; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:280:662:939 147 chr2 442 99 35M = 294 -183 AAGAGAAAAGCATACAGTCATCTATAAAGGAAATC <<;<;<<<<<:<<<;<<<;<<;<<<<<<<<<<<;< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:52:751:360 83 chr2 443 99 35M = 263 -215 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC <-<9<<<<<6<<<8<<;;<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:234:167:381 163 chr2 443 99 35M = 625 217 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<;;7<;; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:37:156:134 83 chr2 443 99 35M = 261 -217 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC 99998<<<<:<<<<<<<;<<><<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:93:490:901 83 chr2 445 99 35M = 280 -200 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<;<<<;<<<;<<;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:96:489:453 99 chr2 445 99 35M = 625 215 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:46:13:880 147 chr2 445 99 35M = 290 -190 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA =&====8==========0================= MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:167:905:852 163 chr2 445 99 36M = 647 238 AGAAAAGCATACAGTCATCTATAAAGAAAATCCCAT <<<7<<<<<<<<<<<<<<:<:<<:::&.<:<66:3< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS219_FC30151:3:13:674:1717 163 chr2 445 99 35M = 623 213 AGAAAAGCATGCAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<%<<<<<<<<<<<<<<<<<<<;:;;; MF:i:18 Aq:i:45 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS51_62:7:196:511:896 83 chr2 446 99 35M = 283 -198 GAAAAGCATACAGTCATCTATAAAGGAAATCCCAT 8<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:154:118:488 163 chr2 447 99 35M = 624 212 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<<<<<<<<<<<<<<:7<<<<7<:;;:: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:44:153:969 83 chr2 447 95 35M = 245 -237 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<5<:7<72<51<7<*79<<<<<5<<<<<<<<<2< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:215:246:640 99 chr2 447 99 36M = 624 213 AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:94:1655:1921 147 chr2 447 85 35M = 258 -224 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<;:===<==;<==<;================; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:60:1037:1146 147 chr2 447 99 35M = 250 -232 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:23:536:229 99 chr2 448 99 35M = 614 201 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<:<8<:<<;<<<<<<7<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:130:865:838 163 chr2 448 99 35M = 649 236 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:239:1001:406 99 chr2 450 99 35M = 634 219 AGCATACAGTCATCTATAAAGGAAATCCCATCAGA <<<<<<7<<<<<<<<8<;<<<7<<<<36<<3<:33 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:147:423:584 147 chr2 451 99 35M = 277 -209 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA 27<;<3<<<+<<;<<<;;-4<<<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:187:715:521 83 chr2 451 99 35M = 291 -195 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <7<:<9<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:172:196:746 99 chr2 451 99 35M = 620 204 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:267:821:860 83 chr2 451 99 34M = 296 -189 GCATACAGTCATCTATAAAGGAAATCCCATCAGA $&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS56_61:7:7:682:201 83 chr2 452 99 35M = 288 -199 CATACAGTCATCTATAAAGGAAATCCCATCAGAAT 0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:82:13:897 163 chr2 453 99 35M = 606 188 ATACAGTCATCTATAAAGGAAATCCCAGCAGAATA <<<<;<<<<<<;<;<;5<51;<1<<<<%<<<<,58 MF:i:18 Aq:i:41 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS56_53:6:180:695:621 99 chr2 453 99 35M = 637 219 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:158:909:321 83 chr2 453 99 35M = 271 -217 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:237:497:165 99 chr2 454 99 35M = 619 200 TACAGTCATCTATAAAGGAAATCCCATCAGAATAA 8===<8===========37=<===7=;7=8===== MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:152:355:962 83 chr2 456 99 35M = 269 -222 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<.9.<;+;<;<<<<<<<<<<::<<:<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:4:255:549:422 83 chr2 456 99 35M = 295 -196 AAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<;;+<;4;<<<<<<<<<<<;<;<<;<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:2
--EAS220_1:4:100:20:1199 163 chr2 456 99 35M = 614 193 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA 7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:71:408:741 163 chr2 457 99 35M = 637 215 AGTCATCTATAAAGGAAATCCCATCAGAATAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:285:395:450 147 chr2 458 99 35M = 269 -224 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT 8)3<8+;<)<<<<<<<<97:7<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:4:854:140 99 chr2 458 72 35M = 638 215 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<6<<<:<6<<<:36:<<<<3<<8:.6<38::4< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:227:657:95 147 chr2 458 99 35M = 280 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT ;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:57:324:546 83 chr2 458 99 36M = 281 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAATG ;;5<;,<<<;;<<<<<<<97<<<<<<<<<<9<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:274:1078 83 chr2 458 99 40M = 282 -216 GTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCT 9:*:64<<;<<<<<<<<<;8;<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:636:642 163 chr2 458 99 35M = 630 207 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:226:869:36 147 chr2 461 99 35M = 273 -223 ATATATAAAGGAAATCCCATCAGAATAACAATGGG <0/)</<<<:<<<<<)<<7<<<<<+55<<1<<<:< MF:i:18 Aq:i:59 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS192_3:4:312:915:751 99 chr2 461 99 35M = 621 195 ATCTATAAAGGAAATCCCATCAGAATAACAATGGG <2<<<<<<<8;<<<<<<<<:<<<<8<<<<<84,4: MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:96:899:106 99 chr2 462 99 35M = 636 209 TCTATAAAGGAAATCCCATCAGAATAACAATGGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:62:969:12 147 chr2 464 99 35M = 303 -196 TATAAAGGAAATCCCATCAGAATAACAATGGGCTT <<;<;<::<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:67:56:806 99 chr2 464 99 35M = 637 208 TATAAAGGAAATCCCATCAGAATAACAATGGGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<:7: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:37:611:267 99 chr2 464 99 35M = 610 181 TATAAAGGAAATCCCATAAGAATAACAATGGGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_93:7:319:280:57 147 chr2 467 99 35M = 306 -196 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:96:720:940 163 chr2 467 99 35M = 654 222 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<;<<<<<<<<<<;9<<8<<6<;:;<;;.;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:59:286:290 99 chr2 467 99 35M = 628 196 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<<;<<<;<<<<<<<<<<<<<;;;<<;7;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:236:841:20 163 chr2 467 99 35M = 652 220 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<<<<<<<<<<<7<<<<:<<9<<<<;<:<9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:49:656:507 99 chr2 468 99 35M = 637 204 AAGGAAATCCCATCAGAATAACAATGGGCTTCTCA <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:78:1314:1275 147 chr2 469 99 35M = 277 -227 AGGAAATCCCATCAGAATAACAATGGGCTTCTCAG <<<<<<<<6:<<<<<<<<<<<<<<<<<<<<<<<1< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:181:392:500 147 chr2 470 99 35M = 299 -206 GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC /5<<;(88<<<;<;<<6<<<<<7<<<<<<<7<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:133:8:379 163 chr2 470 99 35M = 653 218 GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC <<<<<<<<<<<<<<<<<<<<<<<<8;<<8<<<:6< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:198:929:684 163 chr2 471 99 35M = 624 188 GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA <7<<<<;<<<<<<<<<<<<;<<<<<:<<<<::<:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:181:582:435 99 chr2 471 99 35M = 629 193 GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:214:784:690 99 chr2 472 99 35M = 657 220 AAATCCCATCAGAATAACAATGGGCTTCTCAGCGG <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<4<44 MF:i:18 Aq:i:30 NM:i:1 UQ:i:19 H0:i:1 H1:i:0
--EAS114_39:3:11:1238:1728 83 chr2 475 99 35M = 310 -200 TCCCATCAGAATAACAATGGGCTTCTCAGCGGAAA :677<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS112_34:4:12:273:89 163 chr2 477 99 35M = 631 189 CCATCAGAATAACAATGGGCTTCTCAGCGGAAACC ==========<====:=========+===4414;; MF:i:18 Aq:i:71 NM:i:1 UQ:i:28 H0:i:1 H1:i:0
--EAS56_63:2:119:161:322 147 chr2 479 99 35M = 297 -217 ATCAGAATAACAATGGGCTTCTCAGCAGAAACCTT <83<;<<;<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:2:111:142:21 83 chr2 479 99 35M = 304 -210 ATCAGAATAACAATGGGCTTCACAGCGGAAACCTT ;88<:<;;<6<;;<<<:<<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:28 NM:i:2 UQ:i:53 H0:i:0 H1:i:0
--EAS1_99:1:34:649:318 83 chr2 481 65 35M = 328 -188 AAGAATAACAATGGGCTTCACAGCGGAACCCTTAC )<7<<3<<<<<<+<1<;<8&<<<<<<<<<<<<<<< MF:i:130 Aq:i:65 NM:i:3 UQ:i:59 H0:i:0 H1:i:0
--EAS114_30:6:214:565:337 147 chr2 481 99 35M = 326 -190 CAGAATAACAATGGGCTTCTCAGCAGAAACCTTAC ;;<;<1<9<<<8<<<<<;<<<<<<8<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:226:370:91 147 chr2 482 99 35M = 335 -182 AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA <':<6<;<<<;2<;<-7;;;<<<<<<<;;;<<7;< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:6:13:682:680 99 chr2 482 99 35M = 685 238 AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA <<<<<<<<<<<<<:<<<<<<<<<<;<;<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:2:273:348:37 163 chr2 483 99 36M = 688 241 GAATAACAATGGGCTTCTCAGCAGAAACCTTACACG <<<<<<<9<49<<<;<<<<*<<19<15;<</5<;.5 MF:i:18 Aq:i:41 NM:i:1 UQ:i:13 H0:i:1 H1:i:0
--EAS139_11:8:76:205:587 83 chr2 483 99 35M = 306 -212 GAATAACAATGGGCTTCTCAGCGGAAACCTTACGA 8<<5<<<<<<<<<<<<<<<<<<<<<<<<<7<<</< MF:i:18 Aq:i:28 NM:i:2 UQ:i:41 H0:i:0 H1:i:0
--B7_591:2:27:280:592 147 chr2 484 99 36M = 310 -210 AATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC <<<<<<<<<<<8<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_99:7:171:196:287 163 chr2 485 99 35M = 658 208 ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC <<<<<<<<<<<<<<<<<<<<<;6<<<<<<2:8<0: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:224:579:433 163 chr2 485 99 35M = 662 212 ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC <<<<<<<<<<<<<<<<<:<<<<<<<<<<<8<+8;: MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:22:490:2011 147 chr2 485 99 35M = 307 -213 ATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC <7<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_65:6:46:173:214 83 chr2 487 99 35M = 308 -214 AACAATGGGCTTCTCAGCAGAAACCTTACAAGCCA <<2<<<<<<<<<<<5<<5<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:4 H1:i:6
--EAS1_103:4:164:79:134 99 chr2 488 99 35M = 656 203 ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_32:2:283:577:398 147 chr2 488 99 35M = 308 -215 ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG ;8;;&<<<;<;67<;<;<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:29 NM:i:1 UQ:i:27 H0:i:0 H1:i:2
--EAS54_67:5:149:639:910 163 chr2 489 99 35M = 669 215 CAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGA <<<<<<<<<<<<<<<<<<<<<<<<7<;;<<;<<;< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:250:628:423 83 chr2 489 99 36M = 295 -230 CAATGGGCTTCTCAGCGGAAACCTTACAAGCCAGAA +<<4;;9;;7.;7<;7<;<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:1:242:419:512 163 chr2 490 94 35M = 672 217 AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA <<8<<<<<<<<<<<<<<<<<<<<<<<<;<8<(<30 MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_45:1:95:1530:28 83 chr2 490 74 35M = 332 -193 AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA 77741(9;;994;5;;4;;1;;;;;1;<;<<<<;< MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:42 H1:i:45
--EAS192_3:6:326:887:180 163 chr2 492 73 35M = 672 215 TGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGC ;<<<<<;<<<<<<<<<8<<<<<<<<<<<<0<;;<+ MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:3 H1:i:7
--EAS1_99:1:86:871:319 99 chr2 494 71 35M = 651 192 GGCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGA <<<<<:<<<:<:<<<<<<<<<<<<8<<:<1;<::) MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:0 H1:i:4
--EAS56_57:1:189:130:136 147 chr2 494 79 35M = 314 -215 GGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGA 823;23<7<57<7<<<<<;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:63 H1:i:85
--EAS51_64:7:140:752:822 99 chr2 495 76 35M = 667 207 GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT <<<<<<<<<<<<<<<<<7<<<<<<<<<<<<<;<:; MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:5
--EAS56_57:5:53:544:889 147 chr2 495 76 35M = 335 -195 GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT ,<;<<<;<<<<<<<<<:;;<<<<<;;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:2 H1:i:32
--EAS54_65:4:61:346:384 83 chr2 496 68 35M = 324 -207 CAACTAAGAAGAAACCTTACAAGCCAGAAGAGATT 7&$+&,<<+;;<;;<<6<<8<<<;<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:19 H0:i:1 H1:i:53
--EAS54_81:8:177:800:714 83 chr2 497 76 35M = 324 -208 TTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTG =;3=+=<:=<========8================ MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:29 H1:i:85
--B7_597:6:20:592:496 83 chr2 498 75 35M = 338 -195 TCTCAGCGGAAACCTTACAAGCCAGAAGAGATTGG 97<7;<;<;<<<<;<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:5 H1:i:48
--B7_591:5:243:557:560 83 chr2 499 75 36M = 331 -204 CTAAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT 69&<;&<&<<;6.<<<+<<<;;<<<<<<<<;<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:9
--EAS188_7:5:163:982:695 147 chr2 499 77 35M = 339 -195 CTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGA <:<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:7 H1:i:42
--EAS139_19:1:1:1598:843 83 chr2 500 99 40M = 347 -193 TCAGCGGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT 1)::6::<<;<98<<<<<<9<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:25 H0:i:1 H1:i:0
--EAS139_19:6:78:1029:512 163 chr2 500 99 40M = 656 196 TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT <0:;<<<<<<<<<:<<:;<<<;<7<<;<7;;;:6;::672 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:14:1872:1521 83 chr2 500 62 35M = 339 -196 TCATCAAAAACCTTACAAGCCAGAAGAGATTGGAT /1<%73&7<1<3577,<<<7/733<<<<<<<<1<< MF:i:18 Aq:i:2 NM:i:2 UQ:i:9 H0:i:1 H1:i:8
--EAS221_3:6:51:1486:1131 163 chr2 500 77 35M = 685 220 TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT <<<<<<<<<;<<<<<<<<<1<5<<8<<<'<;<<;1 MF:i:18 Aq:i:3 NM:i:0 UQ:i:0 H0:i:22 H1:i:22
--EAS192_3:6:45:183:25 163 chr2 501 95 35M = 672 206 CAGCGGAAACCTTACAAGCCAGAAGAGATTGGATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<86;<;:; MF:i:18 Aq:i:23 NM:i:1 UQ:i:27 H0:i:0 H1:i:2
--B7_597:4:38:999:463 147 chr2 503 39 35M = 317 -221 GCGGAAACCTTACAAGCCAGAAGAGATTGGATCTA .*:&<<0<0!<<+<<<<<<<<<<<<<0<<<<<<<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:25 H0:i:0 H1:i:1
--EAS114_45:1:30:1882:1210 163 chr2 503 82 35M = 665 197 GCAGAAACCTTACAAGCCAGAAGAGATTGGATCTA ;;::;;;;:;;;;;:;;;;;;9;;:7;;8:77777 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_108:6:222:579:961 163 chr2 504 99 35M = 679 210 CAGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<<<<<<<7<<:7;;;68 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:92:875:345 163 chr2 504 99 35M = 690 221 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_63:8:62:125:888 83 chr2 504 99 35M = 347 -192 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA ,;3<<<8;;3<,<<<8;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:2:23:127:880 99 chr2 504 99 35M = 686 217 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_66:8:43:972:506 163 chr2 505 99 35M = 686 216 AGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT <;<<<<<<<<<<<<6;<;<<<<<<<<<<:;;<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:183:697:555 83 chr2 505 84 35M = 341 -199 AGAAATCTTAGAAGCCAGAAGAGATTGGATCTAAT <<<;&,.;);&96<84<<81<<&<<<9<<8<8<<1 MF:i:18 Aq:i:37 NM:i:2 UQ:i:16 H0:i:0 H1:i:1
--EAS221_3:8:65:463:703 99 chr2 506 99 35M = 693 222 GAAACCTTACAAGCCAGAAGAGATTGGATCTAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:101:752:996 163 chr2 508 99 35M = 687 214 AACCTTACAAGCCAGAAGAGATTGGATCTAATTTT <<<<<<<<<<<<<<<;<<<<<9<<<<<<;<<;;;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:267:953:459 99 chr2 509 99 35M = 667 193 ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT <<<<<<<<<9<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:33:1240:846 99 chr2 509 99 35M = 685 211 ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT <<<<<<<<<<<<7<<2<;<<;<<<;<<<:6:<<<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:135:401:735 99 chr2 510 99 35M = 703 228 CCTTACAAGCCAGAAGAGATTGGATCTAATTTTTG <<<<<<<<<<<<<<<<<<<<<;<<<<<8<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:3:186:68 99 chr2 512 99 35M = 687 210 TTACAAGCCAGAAGAGATTGGATCTAATTTTTGTA <<<<<<<<<<<<;<<<<<<<<<<<<;;<<<<<&%8 MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_78:7:164:727:977 163 chr2 513 99 35M = 689 211 TACAAGCCAGAAGAGATTGGATCTAATTTTTCGAC <<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;;79; MF:i:18 Aq:i:75 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--B7_589:1:110:543:934 163 chr2 514 99 35M = 700 221 ACAAGCCAGAAGAGATTGGATCTAATTTTTGGACT <<<<<<<<<<<<;<<<<<;;<<<;;<<<<<,,;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:329:339:408 147 chr2 515 99 36M = 325 -226 CAATCCAGAAGAGATTGGATCTAATTTTTGGACTTC 7<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS56_59:5:325:544:349 163 chr2 515 99 35M = 716 236 CAAGCCAGAAGAGATTGGATCTAATTTTTGGACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<6;;;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:3:903:957 99 chr2 516 99 35M = 661 180 AAGCCAGAAGAGATTGGATCTAATTTTTGGACTTC <<<<<<<<<<<<<<<<;;<;<;<<<<<<66<;<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:85:361:418 147 chr2 517 99 36M = 353 -200 AGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT ;;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:138:186:459 83 chr2 518 97 35M = 360 -193 GCCAGAAGAGATTGGAGCTAATTTTTGGACTTCTT +/2/;<:<&7:7</<2&<<<&<<<<<<<<<8<<:3 MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_11:4:36:1184:994 83 chr2 518 99 35M = 358 -195 GCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT <84<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:270:430:269 83 chr2 519 99 36M = 331 -224 CCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA 28<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:295:882:282 163 chr2 520 99 35M = 691 206 CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA ========================<6<======8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:41:739:907 83 chr2 520 99 35M = 344 -211 CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA ;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:272:240:950 163 chr2 520 97 35M = 696 211 CAGCAGAGCTTGGATCTAATTTTTGGACTTCTTCA 6<<&:<<<&<::;&7<<<3<;<<;<:;:<8:<<(< MF:i:18 Aq:i:25 NM:i:3 UQ:i:17 H0:i:0 H1:i:0
--EAS54_65:7:155:629:357 83 chr2 521 99 35M = 333 -223 AGAAGAGATTGGATCTAATTTTTGGACTTCTTAAA <<<<<<<<;<<<<<<<<<<<<6<<<<<<<<<;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:14:88:306 147 chr2 521 99 35M = 341 -215 AGAAGAGATTAGATCTAATTTTTGGACTTCTTAAA <1;<;<;<4<&<<<:<<<:<<<<;<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_108:5:115:193:231 163 chr2 522 99 35M = 684 197 GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG <<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6<7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:88:1454:418 83 chr2 522 99 35M = 349 -208 GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG <<<<<<<<<<6<96<<<1911<<<1<<<<<<<<<1 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:36:649:554 83 chr2 523 99 35M = 350 -208 AAGAGATTGGATCTAATTTTTGGACTTCTTAAAGA <<<<<888;<<<;<<<;<;<8<<<<8<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:119:651:88 83 chr2 527 99 35M = 337 -225 GATTGGATCTAATTTTTGGACTTCTTAAAGAAAAA <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:57:826:977 163 chr2 528 99 35M = 693 200 ATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAA <<<<<<<<<<<<<<<<+<<<<<<<<6<9:6<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:285:417:147 99 chr2 529 99 35M = 712 218 TTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAA <<<<<<<<<<<<<<<;8<<<<<<<<<;6<:<;<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:160:130:351 99 chr2 530 99 35M = 697 202 TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA <<<<<<<<<<<<<<<;<<<<4<<<<<;<<<:<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:287:665:495 163 chr2 530 99 35M = 702 207 TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA ==========================98====8=8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:71:187:824 147 chr2 534 99 35M = 367 -202 TCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCT 0040;<7<<<<0<7<<<;<7*<<<<<7<<771<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:70:445:1289 99 chr2 535 99 35M = 702 202 CTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTG <<<<<<<<<<2<<<<<<<<<<:<<<<<<<;;;;<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:41:745:603 83 chr2 536 99 35M = 360 -211 TAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGT ;<<;;<;<8<<<<<<<<<<<;<<;<<<<<<<<<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:197:759:975 163 chr2 537 99 35M = 698 196 AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:140:253:322 99 chr2 537 99 35M = 689 187 AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC <<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:58:684:520 147 chr2 538 99 35M = 367 -206 ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA <85;;:<<<7<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:19:306:982 147 chr2 538 99 35M = 368 -205 ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA <<<<<<<<<9<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:273:562:954 99 chr2 539 99 35M = 722 218 TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:78:775:555 99 chr2 539 99 35M = 691 187 TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA 6:<<<<:<<<<6:<<)::8<6<<:<<)<::63832 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:49:330:699 163 chr2 540 99 35M = 722 217 TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAA ==;=================;======5;;;==5= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:329:437:643 147 chr2 540 99 36M = 354 -222 TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC 885<8;;<;3,8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:125:884:276 83 chr2 541 99 35M = 362 -214 TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC ,;;3,<7<;7<<===;============;====== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:315:201:673 83 chr2 542 45 36M = 381 -197 TTGGACTTATTAAAGAAAAAAAAACCTGTCAAACAC ;;;;<-;;&;;<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:3:10:394:392 147 chr2 542 99 35M = 376 -201 TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA 28-:;0-<0<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:228:736:747 83 chr2 542 68 35M = 381 -196 TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA <07<<&<;+<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:267:394:437 163 chr2 544 99 35M = 735 226 GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACG <<<<<<<<<<;<;<<<<<;;<<<<<;<<:;8<;<8 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:66:1381:181 83 chr2 544 99 40M = 362 -222 GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT ;;;+;;&<7<<<+<<<<<<<;<;8<<<;<<<<8<<<;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:74:668:424 99 chr2 545 99 40M = 707 202 GACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:322:350:374 83 chr2 546 99 35M = 360 -221 ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA <+;8&84<<<:<<<<<<<<<<;<<<<<<<;<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:307:208:477 163 chr2 546 99 35M = 710 199 ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA <<<<<<<;<<;<<<<<<<<<<<<<<<<;:<<<88; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:228:915:631 83 chr2 547 66 35M = 381 -201 ATTATTAAAGAAAAAAAAACCTGTCAAACACGAAT &-))-*===/=========9====4========== MF:i:18 Aq:i:0 NM:i:2 UQ:i:13 H0:i:1 H1:i:0
--EAS1_93:5:246:177:525 99 chr2 549 98 35M = 738 224 TCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT <<<<<<<<<<<<<<<<<<<<<1<<<<<<;;;<8;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:93:634:323 99 chr2 550 99 35M = 721 206 CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT <<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<,<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:8:165:441:708 163 chr2 550 99 35M = 737 222 CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT =<===============================99 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:191:885:623 83 chr2 551 99 35M = 363 -223 TTAAAGAAAAAAAAACCTGTCAAACACGAATGTTA 66<<<<<<<<<<<<<2<<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:127:828:697 147 chr2 552 99 35M = 346 -241 TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT ;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:115:249:673 163 chr2 552 99 35M = 743 226 TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<6< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:263:689:572 147 chr2 553 68 35M = 381 -207 AAAGAAAAAAAAACCTGTCAAACACGAATGTTATG <9<2<<<<<<<<<22;;02<<<9<<;9<9<<;<<3 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:99:1632:76 99 chr2 553 99 40M = 705 192 AAAGAAAAAAAACCCTGTCAAACACGAATGTTATGCCCTG <<<<<<<<<<<<*<<<<8<9<<<<<<<<<9;;;;<18:;: MF:i:18 Aq:i:47 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS54_71:7:250:698:842 163 chr2 554 99 35M = 753 233 AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<24 MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:41:314:1173 99 chr2 554 99 35M = 718 199 AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC <;<<<<<<<;;<<<<<-<<<;;;<;8<*;;<<<<' MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:189:831:878 83 chr2 555 99 35M = 351 -239 AGAAAAAAAAACCTGTCAAACACGAATGTTATGCC <9<<<<<<<<<<;9<:<<<<<6<<<<<<<;<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:216:47:302 99 chr2 557 99 35M = 729 207 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<<<<7<<<<<<<<<<<<+<<<<<//6;< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:28:538:148 83 chr2 557 99 35M = 376 -216 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<<<7;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:284:597:682 147 chr2 557 99 35M = 375 -217 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<9;;7<;:<<<:<;<<<<<<<<;<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:11:1261:1200 83 chr2 558 99 35M = 362 -231 AAAAAAAACCTGTCAAACACGAATGTTATGCCCTG <<<<<<<:<<6<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:246:711:981 147 chr2 559 99 35M = 371 -223 AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC ;;:;7<<:5:<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:208:971:600 83 chr2 559 99 35M = 382 -212 AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC <<<<<<<3*+<4/<<<<7<<<<0<<:<8<<<<0<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:219:174:684 83 chr2 560 71 35M = 390 -205 AAAAAAACTGTCAAACACGAATGTTATGCCCTGCT <<<<:;+9<<<;<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS51_66:7:4:234:610 163 chr2 560 84 35M = 729 204 AAAAAACCTGTCAAACACGAATGTTATGCCCTCCT <<<<<<<<7;<<<;7<7;7;7<;-<-<&<<<0%06 MF:i:18 Aq:i:22 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_73:5:271:874:367 83 chr2 560 99 35M = 384 -211 AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT <<<<<<5;<<<:<<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:2:168:1878 99 chr2 560 37 35M = 743 218 AAAAAACCTGGCAAACACGAATGTTATGACATGTN ;<:;;<:<;<;<;;;;:;<;:::&9:&:68&6&*! MF:i:18 Aq:i:37 NM:i:5 UQ:i:61 H0:i:0 H1:i:1
--EAS221_1:6:89:1164:573 147 chr2 560 99 35M = 371 -224 AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT 3<<<6<%7<<08<<4<3<<103<1<<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:53:783:78 147 chr2 561 99 35M = 363 -233 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <;;;;<<0<,<<<<<<<<<;<<<;<;<<<<;<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:570:902 163 chr2 561 99 35M = 730 204 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <<<<<<<<<<<;4<<:<<44<<<<<<<<<<<4<<+ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:7:1864:1569 147 chr2 561 99 35M = 382 -214 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:89:942:84 163 chr2 562 74 35M = 759 232 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:122:589:134 83 chr2 562 99 35M = 369 -228 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA ;<;4<<538<<;<<;<<<<';,:<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:77:1529:522 99 chr2 562 99 35M = 722 195 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA <<;<<<<<<<<<<<4<<4<;;:;2:7<<<2*<;;8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:48:805:860 99 chr2 563 78 35M = 755 227 AAACCTGTCAAACACGAATGTTATGCCCTGCTAAA <<<<<<<;<<<<<<<41;<<8<<<<<<<8+<4,+; MF:i:18 Aq:i:13 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:144:492:61 99 chr2 564 99 35M = 728 199 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<<;<<<<<<<<<<<;<<<<<<7:<<<<::;9;;6 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:303:970:243 83 chr2 564 99 35M = 370 -229 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<0+<<<,<4<:<:<<<<<<<<<<<::<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:78:806:800 163 chr2 564 99 40M = 717 193 AACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGC <<<<<<<<<<<<<<<<<<<4<<:<1<0<;<9;<:78:::: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:94:1440:2016 163 chr2 564 99 35M = 751 222 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<<<<<<<<<<<<<<<<<<;<<;;;<<:<8:::75 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:103:443:166 163 chr2 565 99 35M = 747 217 ACCTGTCAAACACGAATGTTATGCCCTGCTAAACT <<<<<<<<<<<<<<<<<<<<;<<<<<<<1<-;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:24:284:360 83 chr2 567 76 35M = 390 -212 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA :;<;:<<<;<<<<<<<<<<<<<<<<<;;<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:166:626:836 163 chr2 567 99 35M = 757 225 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA <<<<<<<<<<<<<<<<<<<<9<<<<<<<<;<;;;9 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:110:840:431 83 chr2 567 93 35M = 388 -214 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA 77<;7<<<<<<<<<4<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:116:738:142 99 chr2 568 99 35M = 722 189 TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG <<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<:;2 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:55:932:613 83 chr2 568 77 35M = 389 -214 TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:137:139:248 83 chr2 569 97 35M = 401 -203 GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC ;;;99<<<;<;;<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:34:1614:558 147 chr2 569 99 35M = 411 -193 GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC <<9<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:15:696:693 83 chr2 570 10 35M = 403 -202 TCAAACACGAATGTTAATCCCTGCTAAACTAATCA )6<:7<.7<6.<0&&<&3:&7<<7<0<<<<<<<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:50 H0:i:0 H1:i:0
--EAS114_28:3:32:492:907 147 chr2 571 95 36M = 387 -220 CAAACACGAATGTTATGCCCTGCTAAACTAAGCATC 8<;<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:114:19:769 83 chr2 572 90 35M = 405 -202 AAACACGAATGTTATGCCCTGCTAAACTAAGCATC 5+;+3/6;<+;/8<8*/<7/59<97147<;;9<7< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:182:104:921 147 chr2 575 99 35M = 378 -232 CACGAATGTTATGCCCTGCTAAACTAAGCATCATA ;<;<<<<<<:<<<<<:<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:5:996:2000 83 chr2 575 99 35M = 408 -202 CACGAATGTTATGCCCTGCTAAACTAAGCATCATA <<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:109:199:592 83 chr2 576 72 35M = 390 -221 ACGAATATTATGCCCTGCTAAACTAAGCATCATAA ;9<9<:&:<<<<;;<;;<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS219_1:3:90:219:528 163 chr2 576 75 35M = 758 217 ACGAATGTTATGCCCTGCTAAACTAAGCATCATAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:94:294:387 163 chr2 578 99 35M = 736 193 GAATGTTATGCCCTGCTAAACTAAGCATCATAAAT <<<<<<<;<<<<<<<<<:<<<<<<<<<<<<;)7;; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:33:779:821 83 chr2 579 99 35M = 416 -198 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG <<730<<<<9<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:43:114:617 163 chr2 579 99 35M = 738 194 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG =============;=========;=========== MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:23:944:377 99 chr2 579 75 36M = 757 214 AATGTTATGCCCTGCTAAACTAAGCATCATAAATGA <<<<<<<<9<<<<;<<<<<<<<<;<7<<<<;8;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:3:864:1888 147 chr2 579 99 35M = 411 -203 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG 888588;;;;;;;;;;;;;;;;;;;;8;;;;;;;; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:26:137:1382 147 chr2 579 99 35M = 397 -217 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG <<-<8<<<<<<:<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:265:251:147 163 chr2 581 99 35M = 754 208 TGTTATGCCCTGCTAAACTAAGCATCATAAATGAA <<<<<<<<<<<<<<88<<<80:;<<<<<;:4;;:4 MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:184:912:258 147 chr2 582 99 35M = 428 -189 GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG <;;<<<<;:<<7<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:115:646:430 99 chr2 582 45 35M = 768 217 GTTATGCCCTGCTAAACTTAGCATCATAAATGAAG <7<<<<<<<<<<<<;<<<<<;<7<<<<;5;<;67< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:3:24:319:429 163 chr2 582 99 35M = 740 193 GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG <<<<<<<<<<<<<<<<;<<<<<<<<1<<-6<<</< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:8:49:182:192 99 chr2 582 99 35M = 750 203 GTTATGCCCTGCTAAACTGAGCATCATAAATGAAG =====================;============< MF:i:18 Aq:i:49 NM:i:1 UQ:i:28 H0:i:0 H1:i:1
--EAS114_45:1:100:979:1863 99 chr2 583 85 35M = 757 209 TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG ;<;;;;;;;7;;;79;;77;9;;99;974;677-6 MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:53:458:581 73 chr2 583 77 35M = 583 0 TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:53:458:581 133 chr2 583 0 * = 583 0 CTCAATTAATTGTTTTATAAAACCTGTGAGTTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<99<<<<< MF:i:192
--B7_589:6:108:958:42 163 chr2 584 81 35M = 755 206 TATGCCCTGCTAAACTAAGCATCATAAATGAAGGG <<<<<<<<<<<<<<<<<<<<1<<<<<<9<<;<5<: MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:89:457:591 99 chr2 585 69 35M = 770 216 ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG <<<<<<<<<<<4<<<<<<<<<<<<8<7/4<<<<4+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:87:1289:83 83 chr2 585 99 35M = 413 -207 ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG <<<::<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:84:1505:1037 147 chr2 586 99 35M = 409 -212 TGCCCTGCTAAACTAAGCATCATAAATGAAGGGGA <<966<<7<<<<7<<<<9<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:197:261:624 147 chr2 587 99 35M = 398 -224 GCCCTGCTAAACTAAGCATCATAAATGAAGGGGAA 866;2:/;<<<;:<<<;<;;<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:118:41:489 163 chr2 588 76 35M = 779 226 CCCTGCTAAACTAAGCATCATAAATGAAGGGGAAA <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<95: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:157:361:309 99 chr2 589 99 35M = 747 193 CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<;<;<;<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_39:6:71:644:1792 163 chr2 589 84 35M = 754 200 CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT <<<<<<<;<<<<<<<<<<;<<<<<<<<<;<;:<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_589:2:9:49:661 163 chr2 591 99 35M = 747 191 TGCTAAACTAAGCATCATAAATGAAGCGGAAATAA <<<<<<<<<<<<<<<<;<<<<<<;:<<;;;7<9;9 MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_71:2:85:686:696 83 chr2 594 99 34M = 435 -193 TAAACTAAGCATCATAAATGAAGTGGAAATAAAG :<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:1:177:522:118 69 chr2 594 0 * = 594 0 TCTCAATTAATTGTTTTATAAAACCTGTGAGTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<57<<<< MF:i:192
--EAS188_7:1:177:522:118 137 chr2 594 49 35M = 594 0 TAAACTAAGCATCATAAATGAAGGGGAAATAAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:103:870:105 99 chr2 595 44 35M = 778 214 AAACTAAGCATCATAAATGAAGGGGAAATAAAGTC <<<<<<<<<<<<<<<<<<<<<<<<8<<<<<;<<7; MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_62:8:52:967:804 73 chr2 596 76 35M = 596 0 AACTAAGCATCATAAATGAAGGGGAAATAAAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:8:52:967:804 133 chr2 596 0 * = 596 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT ===============<=======<<===<====== MF:i:192
--EAS1_108:6:95:235:746 83 chr2 598 99 35M = 430 -203 CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG ==&=;===7=3===8======;=;8===8=====; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:124:253:889 83 chr2 598 99 35M = 437 -196 CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG 8<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:174:650:125 99 chr2 600 76 35M = 770 201 AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:39:348:594 83 chr2 600 99 35M = 431 -204 AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC <<;;<;:<;<<<;<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:92:693:228 99 chr2 601 75 35M = 770 200 AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;9<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:285:349:797 163 chr2 604 76 35M = 773 200 ATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:82:13:897 83 chr2 606 99 35M = 453 -188 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT ,<2<;<<;<<<<;;;<<;<<<<<<<;;;;<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:310:155:312 83 chr2 606 99 35M = 438 -203 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT 2;<<;<<;<<;;/<<<<<<;<<<<8<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:45:178:1321 163 chr2 606 77 35M = 771 196 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:193:420:78 99 chr2 607 99 35M = 787 215 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:131:518:588 83 chr2 607 99 35M = 433 -209 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <.<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:45:800:733 83 chr2 607 99 35M = 413 -229 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <7<<7&<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:34 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:70:766:2016 83 chr2 607 99 35M = 422 -220 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:2:1217:398 163 chr2 608 99 40M = 780 212 TAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC <<<<<<<<<<<<<;<<<<<<<7<<<3<<<<;<<<<9:7:: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:73:1458:1337 163 chr2 609 99 35M = 806 232 AAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGAC <<<<<;;;<<<<<<<<<<<<<<<<<<<;<<7;;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:104:402:732 83 chr2 610 99 35M = 434 -211 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:37:611:267 147 chr2 610 99 35M = 464 -181 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:78:692:671 147 chr2 610 99 35M = 438 -207 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<);<<;;<<<<<;<<<<<<<<<<<<<6<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:144:242:602 83 chr2 611 99 36M = 436 -211 ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:6:1243:981 69 chr2 611 0 * = 611 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT <<<<8<<8<<<<2<<<<<<<<8<55<<8*<<8<<< MF:i:192
--EAS219_FC30151:5:6:1243:981 137 chr2 611 68 35M = 611 0 ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAA <;<;;<<<;3;;3<<<;<<;<7%<<<.1<<<..<3 MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:291:404:199 163 chr2 612 76 36M = 777 197 TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:266:994:429 99 chr2 612 76 35M = 769 188 TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG =====================9=======4===:= MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:7:159:253:353 163 chr2 613 67 35M = 778 196 GAAGGGGAAATAAAGTCAAGTCTTTCCTGACAGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<0,%4(+, MF:i:18 Aq:i:67 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS1_108:5:175:149:296 163 chr2 614 99 35M = 811 232 AAGGGGAAATAAAGTCAAGCCTTTCCTGACAAGCA <<<<<<<<<<<<<<<<<<<49<<<<<<<<<<<<;4 MF:i:18 Aq:i:45 NM:i:1 UQ:i:19 H0:i:0 H1:i:1
--EAS56_65:1:23:536:229 147 chr2 614 99 35M = 448 -201 AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA <<99<<<<<;<<<;2<<<<<<;<<<9<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:100:20:1199 83 chr2 614 99 35M = 456 -193 AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA :<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:181:713:140 99 chr2 615 84 35M = 793 213 AGGGGAAATAAAGTCAAGTATTTCCTGACAAGCAA <7<<<<<<<<<<<<7<7<6+<<<5;<;<2<;;+;; MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS139_19:6:82:1051:921 163 chr2 616 99 40M = 800 224 GGGGAAATAAAGTCAAGGCTTTCCTGACAAGCAAATGCTA <<<<<9<799<<<<7::/<<<9<7:9:;2:7552+9''66 MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS192_3:3:309:187:267 163 chr2 616 99 35M = 786 205 GGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAA <<<<<<<<<<<<<<<<<<<<<<<;<;<;<;68;;8 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:115:649:259 99 chr2 617 99 36M = 782 201 GGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;<<9 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:261:267:597 163 chr2 617 86 35M = 787 205 GGGTAATAAAGTCAAGTCTTTCCTGACAAGCAAAT <<<<<<<<<;<<<<<7<<<<<<<<<:7<7<;44:; MF:i:18 Aq:i:41 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:4:123:1001:580 163 chr2 617 43 35M = 771 185 GGGAANTAAAGTCAAGTCTTTCCTGACAAGCAAAT =====!=====================1.8131*= MF:i:18 Aq:i:43 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS139_11:7:60:163:1612 83 chr2 617 99 35M = 439 -213 GGGAACTAAAGTCAAGTCTTTCCTGACAAGCAAAT -<<<<)<<<<<<<<<<<<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:59 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS54_65:4:325:795:213 163 chr2 618 99 35M = 790 207 GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<;<<<<;;<<<<<<<<<<<<;:<</;/;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:165:665:220 163 chr2 618 76 35M = 779 196 GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<<<<<<<<<<<<<<<;<;;<<<;;<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:22:206:150 163 chr2 619 99 35M = 792 208 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC ==========================::=5&;<2< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:237:497:165 147 chr2 619 99 35M = 454 -200 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC 9=:=======2=27======<>&<=,==4>4=>>= MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:82:1540:77 163 chr2 619 99 35M = 786 202 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:172:196:746 147 chr2 620 99 35M = 451 -204 AAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCT <<<;><<+<<<<:<<<<2<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:97:892:419 163 chr2 621 99 35M = 800 214 AATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:312:915:751 147 chr2 621 99 35M = 461 -195 AATAAAGTCAAGTCTTTCCTGACAAGCAAAAGCTA <:-<<<99:::);:7<4;8<<<<<<<;<2<+8<;< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS1_93:4:325:352:67 163 chr2 622 99 35M = 794 207 ATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAA ==================<========<=<;-=== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:83:731:540 99 chr2 623 99 35M = 804 216 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<;<<<<<<<<<<<<<:<7<*;&;<;;9 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:74:329:459 163 chr2 623 99 35M = 795 207 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9;599 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:13:674:1717 83 chr2 623 99 35M = 445 -213 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:141:415:738 69 chr2 624 0 * = 624 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT <<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<8<<< MF:i:192
--EAS1_105:1:141:415:738 137 chr2 624 76 35M = 624 0 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<<<<<<<<<<<<<<<<<<<<:<<;<<;<<<<6: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:154:118:488 83 chr2 624 99 35M = 447 -212 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<;58<<95:<<;<;<<<;<<<;;<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:198:929:684 83 chr2 624 99 35M = 471 -188 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:215:246:640 147 chr2 624 99 36M = 447 -213 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:234:167:381 83 chr2 625 99 35M = 443 -217 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT <<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:96:489:453 147 chr2 625 99 35M = 445 -215 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<;;;<<<<5:<<:<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:79:879:15 99 chr2 626 99 35M = 790 199 AGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<2<;<<1< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:59:286:290 147 chr2 628 99 35M = 467 -196 TCAAGTCTTTCCTGACAAGCAAATGCTAAGATAAT 77<<<<7<<<97<<,7<<<;<<<;<9<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:5:263:511:936 99 chr2 629 99 35M = 801 207 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<<<<<<<<<<;<<<<<;<<:<:<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:181:582:435 147 chr2 629 99 35M = 471 -193 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<;<<<<<;<<4<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:636:642 83 chr2 630 99 35M = 458 -207 AAGTCTTTCCTGACAAGCAAATGCTAAGATAATTC <<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:12:273:89 83 chr2 631 99 35M = 477 -189 AGTCTTTCCTGACAAGCAAATGCTAAGATAATTCA <:737<288<<<7<<<<<<<<<:9<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:239:1001:406 147 chr2 634 99 35M = 450 -219 CTTTCCTGACAAGCAAATGCTAAGATAATTCATCA 0':.71;;:9==9=;====;=;============= MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:96:899:106 147 chr2 636 99 35M = 462 -209 TTCCTGACAAGCAAATGCTAAGATAATTCATCATC ;;;;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:67:56:806 147 chr2 637 99 35M = 464 -208 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA 844:8;7<88;8<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:71:408:741 83 chr2 637 99 35M = 457 -215 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA ;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:6:180:695:621 147 chr2 637 99 35M = 453 -219 TACTGAAAAGCAAATGCTAAGATAATTCATCATCA ;&377<&<<;7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS114_30:6:49:656:507 147 chr2 637 99 35M = 468 -204 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA %44;;<:<<;<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:4:854:140 147 chr2 638 72 35M = 458 -215 CCTGACAAGCAAATGCTAAGATAATTCATCATCAC :9':<;<<<;<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:85:1521:58 99 chr2 639 99 40M = 813 214 CTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<9<<<<<<<<<<<<<7<<<<<<<<<<<<;;:7: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:57:1064:925 137 chr2 640 76 35M * 0 0 TGACAAGCAAATGCTAAGATAATTCATCATCACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:323:196:855 163 chr2 642 99 35M = 809 202 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:117:33:262 163 chr2 642 99 35M = 814 207 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:59:742:549 99 chr2 642 99 35M = 816 209 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:55:562:403 163 chr2 643 99 36M = 825 218 CAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<;<;: MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:97:743:602 163 chr2 644 99 35M = 821 211 AAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:167:905:852 83 chr2 647 99 36M = 445 -238 CAAATGCTAAGATAATTCATCATCACTAAACCAGTC +<<<9;7;<<+<<<<<39<;9<;9<<7<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:130:865:838 83 chr2 649 99 35M = 448 -236 AATGCTAAGATAATTCATCATCACTAAACCAGTCC ;<:84<<<4<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:60:1420:660 163 chr2 649 99 35M = 808 194 AATGCTAAGATAATTCATCATCACTAAACCAGTCC <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:180:89:582 99 chr2 650 99 36M = 809 195 ATGCTAAGATAATTCATCATCACTAAACCAGTCCTA <<<<<<<<<7<<<<<<<<<7<<<:<<<:<<::77:< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:86:871:319 147 chr2 651 71 35M = 494 -192 TGCTAAGATAATTCATCATCACTAAACCAGTCCTA 7;+1;<:<<<<<<<<;<<;<<9<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:236:841:20 83 chr2 652 99 35M = 467 -220 GCTAAGATAATTCATCATCACTAAACCAGTCCTAT 7;<<<;<<<<;;<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:133:8:379 83 chr2 653 99 35M = 470 -218 ATAAGATAATTCATCATCACTAAACCAGTCCTATA &=========='==7==0=2====28===00==== MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_105:8:96:720:940 83 chr2 654 99 35M = 467 -222 TAAGATAATTCATCATCACTAAACCAGTCCTATAA *<<<<;<<<9<<;,<;0<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:71:994:576 99 chr2 655 99 35M = 805 185 AAGATAATTCATCATCACTAAACCAGTCCTATAAG <<<<<<<<<<<<<<<<<<<<<<<;<<5<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:164:79:134 147 chr2 656 99 35M = 488 -203 AGATAATTCATCATCACTAAACCAGTCCTATAAGA <;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:78:1029:512 83 chr2 656 99 40M = 500 -196 AGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGC ;;;;;<;;<<<.<<6;<<;<;8<<<<::<<<<<<<<;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:214:784:690 147 chr2 657 99 35M = 472 -220 GATAATTCATCATCACTAAACCAGTCCTATAAGAA -<7<<7<:<<2<<<<;<<<<<;<<<<3<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS220_1:4:6:1178:1105 99 chr2 657 93 35M = 830 208 GATAATTCATCATCACTAAACCAGTCCTATAAGAA <<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:171:196:287 83 chr2 658 99 35M = 485 -208 ATAATTCATCATCACTAAACCAGTCCTATAAGAAA <;;;98;<;&<;;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:220:801:282 99 chr2 660 99 36M = 837 213 AATTCATCATCACTAAACCAGTCCTATAAGAAATGC <<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS221_1:2:73:955:728 163 chr2 660 44 35M = 823 198 AATTCATCATCACTAAACCAGTCCTATAAGAAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_105:1:3:903:957 147 chr2 661 99 35M = 516 -180 ATTCATCATCACTAAACCAGTCCTATAAGAAATGC <%12<&<<<;<:<<<<<<<<<7<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_65:2:224:579:433 83 chr2 662 99 35M = 485 -212 TTCATCATCACTAAACCAGTCCTATAAGAAATGCT '<08/8<+<</<<:<<<<<8<<9<38<<<<<<<<; MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:209:824:866 163 chr2 665 73 35M = 828 198 ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:30:1882:1210 83 chr2 665 82 35M = 503 -197 ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA 776778;5;;;;8;;7:8;;;;;;;<<<;;;;;<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:181:476:394 163 chr2 666 99 35M = 847 216 TCATCACTAAACCAGTCCTATAAGAAATGCTCAAA <<<<<<<<<<<<<<<<<<<<<<<<<;<<:<<<:;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:267:953:459 147 chr2 667 99 35M = 509 -193 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA %<07<94========<<================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:140:752:822 147 chr2 667 76 35M = 495 -207 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA ;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:322:391:742 99 chr2 667 99 35M = 847 215 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:149:639:910 83 chr2 669 99 35M = 489 -215 TCACTAAACCAGTCCTATAAGAAATGCTCAAAAGA <;49;<<;;<<<<8;<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:242:419:512 83 chr2 672 94 35M = 490 -217 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT *:<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:45:183:25 83 chr2 672 95 35M = 501 -206 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT ;1<<;<<<;;;;<<<<<+<<<<<<<<<9<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:326:887:180 83 chr2 672 73 35M = 492 -215 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT 8:<<:<5<<<;7<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:145:635:390 163 chr2 673 99 35M = 860 222 TAAACCAGTCCTATAAGAAATGCTCAAAAGAATTG <<<<<<<<<<<<<<<<<<:<<<<<<<8<<<::;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:31:628:1820 163 chr2 675 98 35M = 828 188 AACCAGTCCTATAAGAAATGCTCAAAAGAATTGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:7:117:452:744 163 chr2 676 99 35M = 850 209 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<;<<<;<<<<<<<<<<:<<<<<<<;; MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:297:949:26 163 chr2 676 99 35M = 842 201 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:17:437:1378 163 chr2 676 99 35M = 847 206 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:222:579:961 83 chr2 679 99 35M = 504 -210 AGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAG =58====;==8=======;================ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:98:995:929 163 chr2 680 99 35M = 844 199 GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT <;<;<8<;<<;1;<<<<<;<;;;08;<;<1&0+8< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:76:1765:700 163 chr2 680 99 35M = 866 221 GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT ;;6;;;;;;;;;6;;;;6;;;;;;;;;;;;88878 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:68:306:409 99 chr2 682 99 40M = 856 214 CCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;:;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:115:193:231 83 chr2 684 99 35M = 522 -197 TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA =========7===========<============= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:57:1675:720 99 chr2 684 99 35M = 841 192 TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:13:682:680 147 chr2 685 99 35M = 482 -238 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<:<5<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:51:1486:1131 83 chr2 685 77 35M = 500 -220 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<,<6<<<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:3 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:33:1240:846 147 chr2 685 99 35M = 509 -211 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:43:972:506 83 chr2 686 99 35M = 505 -216 TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT ;<<<<<<<+;<;<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:23:127:880 147 chr2 686 99 35M = 504 -217 TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT <<<<<<<<<%<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:101:752:996 83 chr2 687 99 35M = 508 -214 AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<<<<<<<7<7<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:3:186:68 147 chr2 687 99 35M = 512 -210 AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<;<<<<<&:,<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:273:348:37 83 chr2 688 99 36M = 483 -241 AGAAATGCGCAAAAGAATTGTAAAAGTCAAAATTAA 9;7;;0<++1<<<;<7<+;;1<<<;<17<<<<<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_78:7:164:727:977 83 chr2 689 99 35M = 513 -211 GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA ;<;<;<:<:<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:140:253:322 147 chr2 689 99 35M = 537 -187 GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA =;===;54:====================>>===> MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:146:374:692 99 chr2 690 99 35M = 874 219 AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA <<<<<<<<<<<<<<<</<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:92:875:345 83 chr2 690 99 35M = 504 -221 AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA <<<;<.;7<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:45:601:439 163 chr2 691 99 35M = 864 208 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<<<;<<<<<<<<<<<<<<<<4<<<<9<<<<<<;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:295:882:282 83 chr2 691 99 35M = 520 -206 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<:<8<-<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:78:775:555 147 chr2 691 99 35M = 539 -187 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<-<%4/<<<<<<<<<<<<<<<<<5<<<0<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:255:796:239 99 chr2 692 99 35M = 869 212 ATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGT <<<<<<<<6<<<<<<<<<<<<<<<<;6<<<:<:<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:57:826:977 83 chr2 693 99 35M = 528 -200 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT 875:6<<<<<<<<<<<<<<<;<<<<<<;8<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:187:996:432 99 chr2 693 99 36M = 860 203 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:65:463:703 147 chr2 693 99 35M = 506 -222 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT <<3<9<<<<<<<8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:288:384:444 163 chr2 696 99 35M = 855 194 TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:272:240:950 83 chr2 696 97 35M = 520 -211 TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA 37<<<<<<<<<<<<<<<<<<<<<<;;<;<<<<<<; MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:160:130:351 147 chr2 697 99 35M = 530 -202 CAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAAT 4<;;<;<<<-<<<<<<<<<<;;<<<<;<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:189:530:40 163 chr2 698 99 36M = 883 221 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATAC <<<<<<<<<<;<<<<<:<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:168:247:414 99 chr2 698 99 35M = 876 213 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA <<<<<<<<<<<<<<<<*<<<<<<<<<;:6<<<<<; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:197:759:975 83 chr2 698 99 35M = 537 -196 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:29:411:1208 99 chr2 698 99 40M = 882 224 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC <<<<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:110:543:934 83 chr2 700 99 35M = 514 -221 AAGAATTGTAAAAGTCAAAATTAAAGTTCAATACT <<<<<5<<;<<<<<<;<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:287:665:495 83 chr2 702 99 35M = 530 -207 GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA ===,9=;;====7=====5===;==1========= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:70:445:1289 147 chr2 702 99 35M = 535 -202 GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA <<<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:172:827:592 163 chr2 703 99 35M = 899 231 AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC =;=======;==;===:==========;==9<<.3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:135:401:735 147 chr2 703 99 35M = 510 -228 AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC <<::7<<<<<<::<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:39:208:644 99 chr2 704 99 35M = 859 190 ATTGTAAAAGTCAAAATTAAAGTTCAATACTCACC <;<<<<<;;:<<;;<<<<<<;;;;;;.<;<79997 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:99:1632:76 147 chr2 705 99 40M = 553 -192 TTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATA 4641::<<4<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:52:1144:509 99 chr2 706 99 35M = 867 196 TGTAAAAGTCAAAATTAAAGTTCAATACTCACCAT <<<<<<<<<<<<<<<<<<<;<<<<<<<;<;<<;<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:116:157:612 99 chr2 707 99 35M = 889 217 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:36:481:1079 163 chr2 707 99 40M = 881 214 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::8 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:74:668:424 147 chr2 707 99 40M = 545 -202 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA :::::<<96<<<<<;<<<;<<5<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:122:398:994 163 chr2 708 99 35M = 871 198 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA <:<9<<<<<<4<<<;9<<<<<98<;<<<:;<;<;7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1231:1381 99 chr2 708 99 35M = 891 218 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:57:366:844 163 chr2 708 99 40M = 877 209 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::7: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:307:208:477 83 chr2 710 99 35M = 546 -199 AAAGTCAAAATTAAAGTTCAATACTCACCATCATA <<<<<.<<<<<<<<<<<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:285:417:147 147 chr2 712 99 35M = 529 -218 AGTCAAAATTAAAGTTCAATACTCACCATCATAAA <..)<<<<;<<<<7<;-<<;<<<<<;8<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:325:544:349 83 chr2 716 99 35M = 515 -236 AAAATTAAAGTTCAATACTCACCATCATAAATACA <<<<57<<<7<;6<<<<;<7<7;<<7<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:33:357:858 163 chr2 716 99 35M = 870 189 AAAATTAAAGTTCAATACTCACCATCATAAATACA <<<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:78:806:800 83 chr2 717 99 40M = 564 -193 AAATTAAAGTTCAATACTCACCATCATAAATACACACAAA ::;9:<<<;<<:<<<<:<.<1:<<1<<<<<<;<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:41:314:1173 147 chr2 718 99 35M = 554 -199 AATTAAAGTTCAATACTCACCATCATAAATACACA <<2**<<82/<<<<<<<<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:82:963:128 163 chr2 719 99 35M = 905 221 ATTAAAGTTCAATACTCACCATCATAAATACACAC <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:240:719:799 99 chr2 720 99 35M = 900 215 TTAAAGTTCAATACTCACCATCATAAATACACACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:93:634:323 147 chr2 721 99 35M = 550 -206 TAAAGTTCAATACTCACCATCATAAATACACACAA <<<<;<;<<<<;;<<2<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:12:1335:1372 163 chr2 721 99 40M = 906 225 TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTA <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<99::.: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:116:738:142 147 chr2 722 99 35M = 568 -189 AAAGTTCAATACTCACCATCATAAATACACACAAA <:<7;+:<<:<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:49:330:699 83 chr2 722 99 35M = 540 -217 AAAGTTCAATACTCACCATCATAAATACACACAAA ===/=;========;=;================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:273:562:954 147 chr2 722 99 35M = 539 -218 AAAGTTCAATACTCACCATCATAAATACACACAAA ;<<+;95<<<;5;<<;:<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:77:1529:522 147 chr2 722 99 35M = 562 -195 AAAGTTCAATACTCACCATCATAAATACACACAAA <<<;7;,<<<<<<.<,6<<6<<<<<<<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1467:1447 163 chr2 722 99 35M = 898 211 AAAGTTCAATACTCACCATCATAAATACACACAAA <<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:251:819:772 99 chr2 726 99 36M = 881 191 TTCAATACTCACCATCATAAATACACACAAAAGTAC <3<<<9<9<3<</<<<<<<59<3<9<<</9/++*/' MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:144:492:61 147 chr2 728 99 35M = 564 -199 AAATACTCACCATCATAAATACACACAAAAGTACA +;;3;,:7<:;<<7<<<<<<<;;<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS54_73:7:200:65:291 99 chr2 728 99 35M = 930 237 CAATACTCACCATCATAAATACACACAAAAGTACA <<<<1<<<<<<<<<<<<<<<<<<<:<8<<<<:<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:130:609:467 99 chr2 728 99 35M = 877 184 CAATACTCACCATCATAAATACACACAAAAGTACA ==8=====;==8==;=4=;;8=====;6=177.== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:216:47:302 147 chr2 729 99 35M = 557 -207 AATACTCACCATCATAAATACACACAAAAGTACAA <<;<8<:<6<<<;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:4:234:610 83 chr2 729 84 35M = 560 -204 AAAAATCAACATCACAAATACACACAAAAGTACAA <:+:'+&<+'<+'2&<:<7<2<':2<:<<7<7<<< MF:i:18 Aq:i:22 NM:i:4 UQ:i:31 H0:i:0 H1:i:0
--EAS54_81:8:271:180:509 99 chr2 729 99 35M = 896 202 AATACTCACCATCATAAATACACACAAAAGTACAA =============================='==== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:41:530:663 163 chr2 730 99 35M = 908 213 ATACTCACCATCATAAATACACACAAAATTACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;;<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:22 H0:i:1 H1:i:0
--EAS114_39:4:30:570:902 83 chr2 730 99 35M = 561 -204 ATACTCACCATCATAAATACGCACAAAAGTACAAA <:<6:6<&:<<6<<<<<<<<.<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS1_105:1:87:430:995 99 chr2 731 67 35M = 909 213 TACTCACCATCATAAATACACACAAAATTACAAAA <<;<<7;;;<;<<777;7(77;;1;7;%117;,7( MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS114_28:7:215:863:521 163 chr2 732 99 36M = 890 194 ACTCACCATCATAAATACACACAAAAGTACAAAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:267:394:437 83 chr2 735 99 35M = 544 -226 AAACATCATAAATACACACAAAAGTACAAAACTCA &<&,<8.<;<<<;<8<8<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS1_108:6:94:294:387 83 chr2 736 99 35M = 578 -193 ACCATCATAAATACACACAAAAGTACAAAACTCAC 779=53=9===;=:=;=========;========= MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:38:332:54 163 chr2 737 99 36M = 904 203 CCATCATAAATACACACAAAAGTACAAAACTCACAG <;<<<<<<<<<<<<<<<<<<<<<<<<<<<0;;;<;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:8:165:441:708 83 chr2 737 99 35M = 550 -222 CCATCATAAATACACACAAAAGTACAAAACTCACA 6+<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:246:177:525 147 chr2 738 98 35M = 549 -224 CATCATAAATACACACAAAAGTAAAAAACTCACAG %<(4<2<<<<<:<;<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:5:43:114:617 83 chr2 738 99 35M = 579 -194 AATCATAAATACACACAAAAGTACAAAACTCACAG +=22=6=================9=========== MF:i:18 Aq:i:52 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS1_99:8:152:778:228 163 chr2 739 99 35M = 915 211 ATCATAAATACACACAAAAGTACAAAACTCACAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:24:319:429 83 chr2 740 99 35M = 582 -193 TAATAAATACACACAAAAGTACAAAACTCACAGGT 0%=3%=3====<=9=====89==93==9=6===== MF:i:18 Aq:i:56 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_66:5:210:674:911 99 chr2 740 99 35M = 904 199 TCATAAATACACACAAAAGTACAAAACTCACAGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:88:451:1773 99 chr2 742 99 35M = 902 195 ATAAATACACACAAAAGTACAAAACTCACAGGTTT ;;:::<:;:<<;:6::;:;;:::;;<;;;367177 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:2:168:1878 147 chr2 743 37 35M = 560 -218 TAAATACACACAAAAGTAGAAAACGCACCAGTTTT *3/6)9.;;;;;;;;5;;);;;3;(;;;+(;7.)3 MF:i:130 Aq:i:37 NM:i:4 UQ:i:32 H0:i:0 H1:i:0
--EAS188_7:5:115:249:673 83 chr2 743 99 35M = 552 -226 TAAATACACACAAAAGTACAAAACTCACAGGTTTT :<<<;<<<;<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:178:187:610 99 chr2 744 99 35M = 903 194 AAATACACACAAAAGTACAAAACTCACAGGTTTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:9:49:661 83 chr2 747 99 35M = 591 -191 TACACACAAAAGTACAAAACTCACAGGTTTTATAA <<6<5<<<<<<<<<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:157:361:309 147 chr2 747 99 35M = 589 -193 TACACACAAAAGTACAAAACTCACAGGTTTTATAA :<-<5<0<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:103:443:166 83 chr2 747 99 35M = 565 -217 TACACACAAAAGTACAAAACTCACAGGTTTTATAA 7<4<4<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:8:49:182:192 147 chr2 750 99 35M = 582 -203 ACACAAAAGTACAAAACTCACAGGTTTTATAAAAC <5<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:12:630:707 99 chr2 751 99 35M = 915 199 CACAAAAGTACAAAACTCACAGGTTTTATAAAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:94:1440:2016 83 chr2 751 99 35M = 564 -222 CACAAAAGTACAAAACTCACAGGTTTTATAAAACA :<8<<<<9<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:206:741:810 163 chr2 753 99 35M = 929 210 CAAAAGTACAAAACTCACAGGTTTTATAAAACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:-;<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:250:698:842 83 chr2 753 99 34M = 554 -233 AAAAAGTACAAAACTCACAGGTTTTATAAAACAA )<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS54_81:6:265:251:147 83 chr2 754 99 35M = 581 -208 AAAAGTACAAAACTCACAGGTTTTATAAAACAATT <<<<::<8<<<;<;8<8<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:71:644:1792 83 chr2 754 84 35M = 589 -200 AAAAGTACAAAACTCACAGGTTTTATAAAACAATT <<<<;<<<<<<:;/<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:108:958:42 83 chr2 755 81 35M = 584 -206 AAAGTACAAAACTCACAGGTTTTATAAAACAATTA <<<;;</<<<<;<<<<<<<<<<<<<<<<<<<<<<+ MF:i:18 Aq:i:9 NM:i:1 UQ:i:27 H0:i:0 H1:i:3
--B7_597:8:48:805:860 147 chr2 755 78 35M = 563 -227 AAAGTACAAAACTCACAGGTTTTATAAAACAATTA <<<;3<;7<<97<7<<<<7<4<<<<<<<<<<;8<+ MF:i:18 Aq:i:13 NM:i:1 UQ:i:27 H0:i:0 H1:i:3
--B7_591:3:179:496:161 163 chr2 756 99 36M = 919 199 AAGTACAAAACTCACAGGTTTTATAAAACAATTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+ MF:i:18 Aq:i:49 NM:i:2 UQ:i:53 H0:i:1 H1:i:0
--EAS56_59:3:166:626:836 83 chr2 757 99 35M = 567 -225 AGTACAAAACTCACAGGTTTTATAAAACAATTAAT <;;7<<<<<<;<7;<<<<<<<<<<<<7<<<<<<<+ MF:i:18 Aq:i:28 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS114_28:5:23:944:377 147 chr2 757 75 36M = 579 -214 AGTACAAAACTCACAGGTTTTATAAAACAATTAATT <;7;8<<<<:<;<:<<<<<<<<<<<<<;<<<<<<<; MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_45:1:100:979:1863 147 chr2 757 85 35M = 583 -209 ATTACAAAACTCACAGGTTTTATAAAACAATTAAT 6&,*3;6;66;9(572692;;;79;4)9;96;59+ MF:i:18 Aq:i:23 NM:i:3 UQ:i:51 H0:i:0 H1:i:0
--EAS219_1:3:90:219:528 83 chr2 758 75 35M = 576 -217 GTACAAAACTCACAGGTTTTATAAAACAATTAATT ;:<5<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:5:89:942:84 83 chr2 759 74 35M = 562 -232 TACAAAACTCACAGGTTTTATAAAACAATTAATTG ===================>=>>>==>>===>==> MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:6:159:493:275 99 chr2 760 72 35M = 939 214 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA =====3============================= MF:i:130 Aq:i:72 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_11:1:81:1019:558 163 chr2 760 77 35M = 926 201 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA <<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_62:7:162:195:761 163 chr2 767 30 18M4I13M = 922 190 TCACAGGTTTTATAAAACAATTAATTGAGACTACA <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;; MF:i:130 Aq:i:30 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_597:3:115:646:430 147 chr2 768 45 17M4I14M = 582 -217 CACAGGTTTTATAAAACAATTAATTGAGACTACAG 5;5<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:45 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:6:243:209:110 163 chr2 768 48 17M4I14M = 920 187 CACAGGTTTTATAAAACAATTAATTGAGACTACAG <<<<<;<;<<<;<<<<<<<<<<<;<:;<<:;;+85 MF:i:130 Aq:i:48 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:2:266:994:429 147 chr2 769 76 16M4I15M = 612 -188 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA </<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:5:32:461:154 99 chr2 769 71 16M4I15M = 945 211 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA <<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<+<;; MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:6:7:492:1088 99 chr2 769 57 16M4I15M = 926 192 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA <<<<<<<<<<<<<<<<<<<<<<<<7<:<<<<<<6; MF:i:130 Aq:i:57 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_95:6:174:650:125 147 chr2 770 76 15M4I16M = 600 -201 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG ===;=============================== MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_59:6:89:457:591 147 chr2 770 69 15M4I16M = 585 -216 CAGGTTTTATAAAACAATTAATTGAGACTACATAG 797<<9<<<<<<<3<7<<<<<<<<<<)<<<<<07< MF:i:130 Aq:i:69 NM:i:1 UQ:i:15 H0:i:0 H1:i:0
--EAS114_39:2:38:670:564 99 chr2 770 73 15M4I16M = 930 195 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG <<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;<5<; MF:i:130 Aq:i:73 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS188_7:4:92:693:228 147 chr2 770 75 14M4I17M = 601 -200 AAGGTTTTATAAAAAAATTAATTGAGACTACAGAG 6=77=<<=======&==================== MF:i:130 Aq:i:75 NM:i:1 UQ:i:28 H0:i:0 H1:i:0
--EAS218_1:4:61:1369:440 163 chr2 770 47 15M4I16M = 964 229 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<8 MF:i:130 Aq:i:47 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_26:4:123:1001:580 83 chr2 771 43 14M4I17M = 617 -185 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC <.00..3<6<<<<<<<3;<<08<<<<<6<<<<<<< MF:i:130 Aq:i:43 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:4:10:1312:1558 163 chr2 771 76 14M4I17M = 928 192 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC 5<<<<<<<<<<<<<<<<<<<<<<<;;<<<<<;8;< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS220_1:8:45:178:1321 83 chr2 771 77 14M4I17M = 606 -196 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC <<<<<<<<<<<<<<<<<:<<:<<<<<<<<<<<<<< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_59:5:125:137:58 163 chr2 772 76 13M4I18M = 932 195 GGTTTTATAAAACAATTAATTGAGACTACAGAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS192_3:3:285:349:797 83 chr2 773 76 12M4I19M = 604 -200 GTTTTAAAAAACCAATAATTGAGACTACAGAGCAA ;;<<<7.:<<<..<.<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:1 UQ:i:13 H0:i:0 H1:i:0
--EAS114_45:5:56:1757:1319 163 chr2 775 67 10M4I21M = 957 217 TTTATAAAACAATTAATTGAGACTACAGAGCAACT ;;;;9;;;;;;;;;;;;;4;9;98;;;;;9388&7 MF:i:130 Aq:i:67 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_591:3:291:404:199 83 chr2 777 76 8M4I24M = 612 -197 TATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS54_65:7:159:253:353 83 chr2 778 67 7M4I24M = 613 -196 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <8<<<<:<<;;<<<<<<<<<<<;<<<<<<<<<<<< MF:i:130 Aq:i:67 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_57:1:122:38:103 163 chr2 778 79 7M4I24M = 972 229 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<<<<<<<<<<;<<<<<<<<3<<<<9<8;< MF:i:130 Aq:i:79 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS188_4:5:103:870:105 147 chr2 778 44 7M4I24M = 595 -214 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<<<<<<<=<:<;<<<<<<<<<<*<<<<<< MF:i:130 Aq:i:44 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_105:8:24:718:322 163 chr2 779 23 35M = 953 209 ACAATTAATTGAGACTACAGACCAATTATGTAAAA 5/7<3+<;<1<<1<95<.&&.&&.<&)5)1)17<% MF:i:130 Aq:i:23 NM:i:3 UQ:i:18 H0:i:0 H1:i:0
--EAS51_64:6:118:41:489 83 chr2 779 76 35M = 588 -226 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <+<<;<<<38<<<<5<<3<<<<3<<8<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_61:3:165:665:220 83 chr2 779 76 35M = 618 -196 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:6:238:803:383 99 chr2 779 75 35M = 954 210 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <<<<<<<<<<<<;<<<<<;<;<<;<<;<<<9<;<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_105:3:232:364:583 99 chr2 780 71 35M = 956 211 CAATTAATTGAGACTACAGAGCAACTAGGTAAAAA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:2:2:1217:398 83 chr2 780 99 40M = 608 -212 CAATTAATTGAGACTACAGAGCAACTAGGTAAAAAATTAA +;;:9<<66<<<;+<<7<<<<;<<+;<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:3 UQ:i:73 H0:i:1 H1:i:0
--B7_593:2:81:435:410 99 chr2 782 99 36M = 966 220 ATTAATTGAGACTACAGAGCAACTAGGTAAAAAATT <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<;<<;; MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--B7_593:3:115:649:259 147 chr2 782 99 36M = 617 -201 ATTAATTGAGAATACAGAGCAACTAGGTAAAAAATT ;<;<<;<<<<;&<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:3 UQ:i:58 H0:i:0 H1:i:1
--EAS1_93:3:181:93:694 163 chr2 783 99 35M = 954 206 TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT ++<<<<<<;<<<<<<:;8<<;<<<5;<;<<<+<<< MF:i:18 Aq:i:28 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS114_30:1:188:863:790 163 chr2 783 98 35M = 969 221 TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT ++<;<<;;;:<<<<:<:<<:1<<1<<<6:6;4;;4 MF:i:18 Aq:i:27 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS1_93:2:313:711:530 163 chr2 784 99 35M = 968 219 TAATTGAGACTACAGAGCAACTAGGTAAAAAATTA +<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<: MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_589:7:154:26:712 99 chr2 786 99 35M = 959 208 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:185:87:475 163 chr2 786 99 36M = 949 199 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:69:1593:819 163 chr2 786 99 40M = 977 231 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTAC <<<<<<<<<<<<<<;<<<<<;;<:<<<<<:<<<<<:777: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:309:187:267 83 chr2 786 99 35M = 616 -205 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <:0;<;<4<<7<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:82:1540:77 83 chr2 786 99 35M = 619 -202 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <48;<;</;<<<<<<:<<0<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:193:420:78 147 chr2 787 99 35M = 607 -215 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA 81<<;<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:261:267:597 83 chr2 787 86 35M = 617 -205 TTGAGAATAAAGAGCAACTAGGTAAAAAATTAACA *-1<9<+1<+<<<<:<<;9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:2 UQ:i:20 H0:i:0 H1:i:1
--EAS56_59:4:262:928:237 99 chr2 787 99 35M = 971 219 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:262:53:888 163 chr2 787 99 35M = 965 213 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<;<<<<<<<<<<;<<;<;<;6<<;<;;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:138:211:582 99 chr2 788 99 35M = 957 204 TGAGACTACAGAGCAAATAGGTAAAAAATTAACAT <<;<<<<<<<<<<<<<&;<;<7<<;<<<<<<<5<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:7:113:408:211 99 chr2 789 99 35M = 952 198 GAGACTACAGAGCAACTAGGTAAAAAATTAACATT <<<<<<<<<<<<<<<:&<<<&:<<<<<<<<<<;:/ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:79:879:15 147 chr2 790 99 35M = 626 -199 AGACTACAGAGCAACTAGGTAAAAAATTAACATTA <;;5;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:325:795:213 83 chr2 790 99 35M = 618 -207 AGACTACAGAGCAACTAGGTAAAAAATTAACATTA <<<0<<;<<<<;<<;:<<<<<<<<<<<;<<<<<9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:22:206:150 83 chr2 792 99 35M = 619 -208 AAAAAAGAGCAACTAGGTAAAAAATTAACATTACA 8&)<)<<<<+<<+<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:3 UQ:i:21 H0:i:1 H1:i:0
--EAS56_59:5:181:713:140 147 chr2 793 84 35M = 615 -213 CTACAGAGCAACAAGGTAAAAAATTAACATTACAA 78<+<7<-7;;;&<5<7<<<<7<<<<<<<<<<<7< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:7:76:306:561 163 chr2 794 89 35M = 987 228 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC <<)<<<<<<8<<8<<<<<<<;;;<<1<<3;=7<<9 MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:325:352:67 83 chr2 794 99 35M = 622 -207 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC ;<8<<<;;<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:310:287:420 99 chr2 794 99 35M = 965 206 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:74:329:459 83 chr2 795 99 35M = 623 -207 ACAGAGCAACTAGGTAAAAAATTAACATTACAACA </<;<8/<<9<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:57:1342:1166 99 chr2 796 99 35M = 964 203 CAGAGCAACTAGGTAAAAAATTAACATTACAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:542:428 163 chr2 797 99 35M = 965 203 AGAGCAACTAGGTAAAAAATTAACATTACAACAGG 7<4<<<6<<,<9)<<<<6<,<<7<<7<<<<<<<<1 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:97:892:419 83 chr2 800 99 35M = 621 -214 GCAACTAGGTAAAAAATTAACATTACAACAGGAAC ;8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:82:1051:921 83 chr2 800 99 40M = 616 -224 GCAAATAGGTAAAAAATTAACATTACAACAGGAACAAAAC 3-::-7<;+:9<;<<<5<;9,::53-;:3<<<<9<<3<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS1_95:5:263:511:936 147 chr2 801 99 35M = 629 -207 CAAATAGGTAAAAAATTAACATTACAACAGGAACA +<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS114_26:7:157:876:302 163 chr2 801 99 35M = 964 198 CAACTAGGTAAAAAATTAACATTACAACACGAACA 2<<;<<<22<<<<<<77<<<<22<7<<<<%-<<1< MF:i:18 Aq:i:66 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_65:2:127:288:655 163 chr2 803 99 35M = 999 231 ACTAGGTAAAAAATTAACATTACAACAGGAACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:83:731:540 147 chr2 804 99 35M = 623 -216 CTAGGTAAAAAATTAACATTACAACAGGAACAAAA ;7<:+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:82:843:1838 99 chr2 804 99 35M = 999 230 CTAGGTAAAAAATTAACATTACAACAGGAACAAAA ;<<;:;;<<<;;<<<<;;<<;;;;;<;;;;68887 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:71:994:576 147 chr2 805 99 35M = 655 -185 TAGGTAAAAAATTAACATTACAACAGGAACAAAAC <<9;;<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:24:415:944 99 chr2 805 99 35M = 974 204 TAGGTAAAAAATTAACATTACAACAGGAACAAAAC <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:73:1458:1337 83 chr2 806 99 35M = 609 -232 AGGTAAAAAATTAACATTACAACAGGAACAAAACC <</<<<<<<<6:<::<<<1<<:<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:142:353:398 163 chr2 807 99 35M = 977 205 GGTAAAAAATTAACATTACAACAGGAACAAAACCT =================================9= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:46:522:426 163 chr2 807 99 35M = 964 192 GGTAAAAAATTAACATTACAACAGGAACAAAACCT =======================:==;<===78== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:59:871:351 163 chr2 808 99 35M = 963 190 GTAAAAAATTAACATTACAACAGGAACAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:235:505:553 163 chr2 808 99 35M = 987 214 GTAAAAAATTAACATTACAACAGGAACAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:;: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:60:1420:660 83 chr2 808 99 35M = 649 -194 GTAAAAAATTAACATTACAACAGGAACAAAACCTC 99<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:180:89:582 147 chr2 809 99 36M = 650 -195 TAAAAAATTAACATTACAACAGGAACAAAACCTCAT ;<<<<<<4<<<:<<<<<<<<<6<<<<<<<<<<;<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:323:196:855 83 chr2 809 99 35M = 642 -202 TAAAAAATTAACATTACAACAGGAACAAAACCTCA &<<<<<<09<<7<7;<;<<0<<<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:295:547:216 163 chr2 809 99 35M = 970 196 TAAAAAATTAACATTACAACAGGAACAAAACCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:126:361:250 99 chr2 810 99 35M = 1002 227 AAAAAATTAACATTACAACAGGAACAAAACCTCAT <<<<<<;9<<<<<<<<<<<<<<;;;<<<;<664;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:266:133:789 99 chr2 810 99 35M = 988 213 AAAAAATTAACATTACAACAGGAACAAAACCTCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:175:149:296 83 chr2 811 99 35M = 614 -232 AAAAATTAACATTACAACAGGAACAAAACCTCATA =;==26==;==;================7====== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:136:260:254 99 chr2 813 99 35M = 988 210 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<><<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:85:1521:58 147 chr2 813 99 40M = 639 -214 AAATTAACATTACAACAGGAACAAAACCTCATATATCAAT :::86<<:<<8<<<<;<<8<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:164:719:947 99 chr2 813 99 35M = 1005 227 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:50:257:341 163 chr2 813 99 35M = 971 193 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<6<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:117:33:262 83 chr2 814 99 35M = 642 -207 AATTAACATTACAACAGGAACAAAACCTCATATAT <<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:90:706:1276 163 chr2 814 99 35M = 980 201 AATTAACATTACAACAGGAACAAAACCTCATATAT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:116:966:193 163 chr2 815 99 35M = 967 187 ATTAACATTACAACAGGAACAAAACCTCATATATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:59:742:549 147 chr2 816 99 35M = 642 -209 TTAACATTACAACAGGAACAAAACCTCATATATCA -<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:74:213:877 99 chr2 816 99 35M = 996 215 TTAACATTACAACAGGAACAAAACCTCATATATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_610:3:85:219:371 163 chr2 817 99 35M = 967 185 TAACATTACAACAGGAACAAAACCTCATATATCAA <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:176:653:957 163 chr2 819 82 35M = 982 198 ACATTACAACAGGAACAAAACCTCATATATCAATA ????????????<<???@<<<<<@<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:64:526:339 163 chr2 819 96 35M = 1019 235 ACATTACAACAGGAACAAAACCTCATATATCAATA <<<<<<<<;<<<<<<<<<<7<:<<<<<<<<<8:<: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:97:743:602 83 chr2 821 99 34M = 644 -211 ATTACAACAGGAACAAAACCTCATATATCAATAT <(&<:<<&<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--B7_610:2:75:887:149 163 chr2 823 99 35M = 1004 216 TACAACAGGAACAAAACCTCATATATCAATATTAA <<<<<<<<<<<<<<;<<<<<<<;<<<<<<<;<;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS221_1:2:73:955:728 83 chr2 823 44 35M = 660 -198 TACAACAGGAACAAAACCTCATATATCAATATTAA ;<-<<6<;<<<6<<<<;7<6<<<<<<<<<<<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:3 H1:i:18
--EAS1_108:2:102:543:160 163 chr2 825 99 35M = 977 187 CAACAGGAACAAAACCTCATATATCAATATTAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_28:2:55:562:403 83 chr2 825 99 36M = 643 -218 CAACAGGAACAAAACCTCATATATCAATATTAACTT +<<&<<<<<<<<<<+<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--B7_593:1:19:695:59 99 chr2 826 99 36M = 988 198 AACAGGAACAAAACCTCATATATCAATATTAACTTT <<<<<<<<<<<;<<<<<<<<<;<<;;<;<<7<<<<; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS221_1:2:8:327:522 163 chr2 826 99 35M = 1001 210 AACAGGAACAAAACCTCATATATCAATATTAACTT <<<<<<<<<<:<<<<<<<<<<:<<<<<<<<<:<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS114_45:6:90:561:850 163 chr2 827 85 35M = 1004 212 ACAGGAACAAAACCTCATATATCAATATTAACTTT ;;;;;;;;;;;;;;;;;;;;;;;;9;9;6;77777 MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:2 H1:i:25
--EAS56_61:5:209:824:866 83 chr2 828 73 35M = 665 -198 CAGCAACAAAACCTCATATATCAATATTAACTTTG ;<:&<<:<<<<;<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:1 UQ:i:5 H0:i:1 H1:i:7
--EAS139_11:2:31:628:1820 83 chr2 828 98 35M = 675 -188 CAGGAACAAAACCTCATATATCAATATTAACTTTG <<<<<<:<<<<:6<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS220_1:4:6:1178:1105 147 chr2 830 93 35M = 657 -208 GGAACAAAACCTCATATATCAATATTAACTTTGAA <:<<9<<<<::7<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:11
--EAS114_28:4:305:707:258 99 chr2 831 58 36M = 992 197 GAACAAAACCTCATATATCAATATTAACTTTGAATA 9<<<<<<<<<<<<;<<-<<;;<;<<9<<;<<+99;7 MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:2 H1:i:9
--EAS54_67:3:114:736:433 163 chr2 832 63 35M = 998 201 AACAAAACCTCATATATCAATATTAACTTTGAATA ;<<9<8;<<<<8<8<;<<;;;0<<8;<;<<47;;; MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_591:7:157:447:758 99 chr2 833 99 36M = 994 197 ACAAAACCTCATATATCAATATTAACTTTGAATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_591:4:159:508:571 99 chr2 834 84 36M = 989 191 CAAAACCTCATATATCAATATTAACTTTGAATAAAA <<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_65:7:68:825:405 163 chr2 835 30 35M = 1015 215 AAAACCTCATATATCAATATTAACTTTGAATAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--B7_593:3:102:856:670 99 chr2 836 99 36M = 1025 225 AAACCTCATATATCAATATTAACTTTGAATAAAAAG <<<<<<<;<<<;<<;:<<<<<<<<<<:;;<<;<<<7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:260:827:289 163 chr2 836 99 35M = 999 198 AAACCTCATATATCAATATTAACTTTGAATAAAAA <<<<2<<<<;<<<<;<<<<<<:<<<&-<8<<88<3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_28:1:220:801:282 147 chr2 837 99 36M = 660 -213 AACCTCATATATCAATATTAACTTTGAATAAAAAGG ;7;87;===;==;====:===<==7=========== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:57:1675:720 147 chr2 841 99 35M = 684 -192 TCATATATCAATATTAACTTTGAATAAAAAGGGAT <,<<<<<<:<<<<<<<<:9<<<<<<<<;<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:297:949:26 83 chr2 842 99 35M = 676 -201 CATATATCAATATTAACTTTGAATAAAAAGGGATT 5<;<;<;:<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:76:34:691 89 chr2 843 58 35M * 0 0 ATATATCAATATTAACTTTGAATAAAAAGGGATTA <<<<<<16<<<<<916<<<499<966161919<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:98:995:929 83 chr2 844 99 35M = 680 -199 TATAACAATATTAACTTTGAATAAAAAGGGATTAA &<+<'7<<+<&<<<7+4<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:63 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS139_19:3:58:923:1915 163 chr2 846 99 40M = 1007 201 TATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCC <<<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<::::: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:181:476:394 83 chr2 847 99 35M = 666 -216 AACAATATTAACTTTGAATAAAAAGGGATTAAATT <+;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS112_32:7:322:391:742 147 chr2 847 99 35M = 667 -215 ATCAATATTAACTTTGAATAAAAAGGGATTAAATT <63<<<<9<<<:<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:17:437:1378 83 chr2 847 99 35M = 676 -206 ATCAATATTAACTTTGAATAAAAAGGGATTAAATT <<7<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:155:375:623 163 chr2 849 99 35M = 1029 215 CAATATTAACTTTGAATAAAAAGGGATTAAATTCC 0<<<<<;<<<<<<<<<<<<<4<<8<<<<<<<<;<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:29:729:70 163 chr2 850 51 35M = 1009 194 ANTATTANCTTTGANNAAAAAGGGATTAAATTCCC :!<:<<8!::::5:!!:.77::33888633:8777 MF:i:130 Aq:i:51 NM:i:3 UQ:i:0 H0:i:0 H1:i:0
--EAS54_65:7:117:452:744 83 chr2 850 99 35M = 676 -209 AATATTAACTTTGAATAAAAAGGGATTAAATTCCC <;;<;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:288:384:444 83 chr2 855 99 35M = 696 -194 TAACTTTGAATAAAAAGGGATTAAATTCCCCCACT ;=9;;<====<=;=/=9;<========<======= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:133:514:754 163 chr2 855 63 36M = 1036 217 TAAATTTGAATAAAAAGGGATTAAATTCCCCCACTT ***&,,,+(*,*********+*)*(***(**((*)( MF:i:18 Aq:i:19 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_19:5:68:306:409 147 chr2 856 99 40M = 682 -214 AACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG ::2:7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:155:758:710 163 chr2 859 98 35M = 1048 224 TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG =======8================6=:7===:=:= MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:39:208:644 147 chr2 859 99 35M = 704 -190 TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG 78899;;;;4;;;;;;;;;;;;;;;;;;8;;8;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:16:438:245 89 chr2 860 65 35M * 0 0 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA 8*8<5'<77;;;;;7<7<<7-<;<<<;;<<<;;79 MF:i:32 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:145:635:390 83 chr2 860 99 35M = 673 -222 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA +9;<<;<<<<<;;;<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:187:996:432 147 chr2 860 99 36M = 693 -203 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG ;<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:123:924:645 163 chr2 861 84 36M = 1045 220 TGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA <<<<<<<<<<<<;<<<<<<;<<<<<<<6:<7<1<+< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:146:961:63 163 chr2 861 86 35M = 1041 215 TGAATAAAAAGGGCTTAAATTCCCCCACTTAAGGG <<+<<<<::+1<;&<<88<<<<;;.<0;;85(;(8 MF:i:18 Aq:i:37 NM:i:2 UQ:i:12 H0:i:0 H1:i:1
--EAS114_30:6:4:665:771 69 chr2 862 0 * = 862 0 GTGCTTTATCTGATATCAATGCCGATAAACTGCCT <<<<<<<<<<<<%<8<3:7:77<(7,:3(:&2:(0 MF:i:192
--EAS114_30:6:4:665:771 137 chr2 862 71 35M = 862 0 GAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA <;<<;<18<;<8<<<<;<;;<<<<1<<<<6;;;;; MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:45:601:439 83 chr2 864 99 35M = 691 -208 ATAAAAAGGGATTAAATTCCCCCACTTAAGAGATA <8<<<<<<1<<<<<<<<)<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:126:966:514 163 chr2 865 99 35M = 1027 197 TAAAAAGGGATTAAATTCCCCCACTTAAGAGATAT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:76:1765:700 83 chr2 866 99 35M = 680 -221 AAAAAGGGATTAAATTCCCCCACTTAAGAGATATA 77777;;;;7;7;<;;;;+;;<9<<<79;<1<<77 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:155:807:19 99 chr2 867 99 35M = 1074 242 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<<<<<<<<<<<<<<9+<<<<<<9<<9;4<<<<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:226:885:729 99 chr2 867 98 35M = 1037 205 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<;<<<<<<;<;<<<<<<<:;<<;4;%;<<;<<. MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:1:156:196 99 chr2 867 77 40M = 1042 215 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGG <<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<:;9:9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:52:1144:509 147 chr2 867 99 35M = 706 -196 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<<:<<<<<<<<<<;::;:<;<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:73:735:329 99 chr2 868 99 35M = 1035 202 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA ================;==;====;=;=======; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:11:801:386 163 chr2 868 97 35M = 1061 228 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA <<<<<<<<<<8<<<<<:4<::<854:5<:::;4+4 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:150:94:843 99 chr2 868 75 35M = 1050 217 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA <<<<<<<<7<<<6<<<<<<<<<<<6<<62<<<<<2 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:255:796:239 147 chr2 869 99 35M = 692 -212 AAGGGATTAAATTCCCCCACTTAAGAGATAGAGAT <<3;;<7:<<<;(7<<7;<<;<<<<<<<<<7<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:22 H0:i:0 H1:i:1
--B7_589:5:147:405:738 163 chr2 870 99 35M = 1048 213 AGGGATTAAATTCCCCCACTTAAGAGATATAGATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:33:357:858 83 chr2 870 99 35M = 716 -189 AGGGATTAAATTCCCCCACTTAAGAGATATAGATT <;<:<<<<<<<<<;<9<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:122:398:994 83 chr2 871 99 35M = 708 -198 GGGATTAAATTCCCCCACTTAAGAGATATAGATTG 95:<9<<<<:9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_105:2:146:374:692 147 chr2 874 99 35M = 690 -219 ATTAAATTCCCCCACTTAAGAGATATAGATTGGCA <4:<<<1:<:<::<<<;<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:119:428:415 163 chr2 876 99 36M = 1037 197 TAAATTCCCCCACTTAAGAGATATAGATTGGCAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;<;;; MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:168:247:414 147 chr2 876 99 35M = 698 -213 TAAATTCCCCCACTTAAGAGATATAGATTGGCAGA ,;;;,146<6;6<<8<<<<1<8<<<<<<<<<<;1< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:130:609:467 147 chr2 877 99 35M = 728 -184 AAATTCCCCCACTTAAGAGATATAGATTGGCAGAA ===:2===;<====>==>=>=>=>>>==>>>=>>> MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:57:366:844 83 chr2 877 99 40M = 708 -209 AAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT ;;;7:8&555<,;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:236:475:254 163 chr2 880 99 35M = 1051 206 TTCCCCCACTTAAGAGATATAGATTGGCAGAACAG <<<<<<<<<<<<<<<<<<<<<<<<<:::<:;</;/ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:251:819:772 147 chr2 881 99 36M = 726 -191 TCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT 6+7++1<<%<<<<<<<+<+<9<<99<9<<<<<<9<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:36:481:1079 83 chr2 881 99 40M = 707 -214 TCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAA :11+)*<4;<<<<<<<<<;;<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:29:411:1208 147 chr2 882 99 40M = 698 -224 CCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAA 766+6<996<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:62:1076:540 99 chr2 882 99 35M = 1066 219 CCCCCACTTAAGAGATATAGATTGGCAGAACAGAT <<<<<<<<<<;<<<<<<<<<<<<<<<<;;<<;<7; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:189:530:40 83 chr2 883 99 36M = 698 -221 CCCCACTTAAGAGATATAGATTGGCAGAACAGATTT 883;<<<<<<<<<:<<<<<<<<3<;<<<<<<<<;<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:113:856:319 163 chr2 884 99 35M = 1067 216 CCCACTTAAGAGATATAGATTGGCAGAACAGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:55:296:1457 99 chr2 884 99 35M = 1061 212 CCCACTTAAGAGATATAGATTGGCAGAACAGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:15:881:1932 99 chr2 886 92 35M = 1061 210 CACTTAAGAGATATAGATTGGCAGAACAGATTTAA <<<<<<<<<<<<<<<;<<<<:<<<2<26<8<<;;. MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:116:157:612 147 chr2 889 99 35M = 707 -217 TTAAGAGATATAGATTGGCAGTACAGATTTAAAAA ;;<<<<<<<<<<<<<<<<;<</<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS114_28:7:215:863:521 83 chr2 890 99 36M = 732 -194 TAAGAGATATAGATTGGCAGAACAGATTTAAAAACA ;<<<<<<<<<<<<<;<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:254:572:431 163 chr2 891 97 35M = 1048 192 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<<<<<<<<<<<;<<<<<<<<<<<99;;;;; MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:273:424:207 163 chr2 891 99 35M = 1066 210 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <,<,<9<<9<<<<<<<<<<79<,599,<191<99+ MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:4:571:820 163 chr2 891 99 35M = 1071 215 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<<<<<<9<<;9<;;;<;6;:<<<3:;;;:6 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1231:1381 147 chr2 891 99 35M = 708 -218 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<;<<<<<<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:66:718:481 99 chr2 891 99 40M = 1072 221 AAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAAC <<<<<<<<<<<<<<;<<<<<<<<;<<<<<<<;<<<:1:;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:22:632:176 163 chr2 894 99 36M = 1091 233 AGATATAGATTGGCAGAACAGATTTAAAAACATGAA <<<<<;<<<<<<;<<;<:<<<:<<:<<<;<<<;;;: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:271:180:509 147 chr2 896 99 35M = 729 -202 ATATAGATTGGCAGAACAGATTTAAAAACATGAAC <<<<<<<<<9<:<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:198:564:731 163 chr2 898 99 35M = 1089 226 ATAGATTGGCAGAACAGATTTAAAAACATGAACTA <<<<<;<<<<<<;<<:<<;9<<<<<<<<1;<<58< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1467:1447 83 chr2 898 99 35M = 722 -211 ATAGATTGGCAGAACAGATTTAAAAACATGAACTA <<<<<::<<:<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:172:827:592 83 chr2 899 99 35M = 703 -231 TAGATTGGCAGAACAGATTTAAAAACATGAACTAA 8<<<<;7;7<<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:240:719:799 147 chr2 900 99 35M = 720 -215 AGATTGGCAGAACAGATTTAAAAACATGAACTAAC <:<<<<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:24:1345:1627 73 chr2 900 78 35M = 900 0 AGATTGGCAGAACAGATTTAAAAACATGAACTAAC <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<8<3 MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:24:1345:1627 133 chr2 900 0 * = 900 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS139_19:1:58:726:1746 163 chr2 900 99 40M = 1061 201 AGATTGGCAGAACAGATTTAAAAACATGAACTAACTATAT <<<<<<<<<<<<<<<<<<<6<<<<8<<<<<<<<:8:8:88 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:88:451:1773 147 chr2 902 99 35M = 742 -195 ATTGGCAGAACAGATTTAAAAACATGAACTAACTA 973776;;;;;;;;;::;;;;;;;;;;;;;;3;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:178:187:610 147 chr2 903 99 35M = 744 -194 TTGGCAGAACAGATTTAAAAACATGAACTAACTAT 66:,:<7<<<<<<<1<<<<<<<<<<<<<<<2<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:38:332:54 83 chr2 904 99 36M = 737 -203 TGGCAGAACAGATTTAAAAACATGAACTAACTATAT 8;;&<;<<7<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:210:674:911 147 chr2 904 99 35M = 740 -199 TGGCAGAACAGATTTAAAAACATGAACTAACTATA 27;2<;<<5<<<<;;<<<<<;<<<<<<;<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:82:963:128 83 chr2 905 99 35M = 719 -221 GGCAGAACAGATTTAAAAACATGAACTAACTATAT 585<;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:12:1335:1372 83 chr2 906 99 40M = 721 -225 GAAGAACAGATTTAAAAACATGAACTAACTATATGCTGTT :&;;;<*<<<9<<<<<<<<<<<<<<4<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_39:1:98:641:1040 163 chr2 907 99 35M = 1085 213 CAGAACAGATTTAAAAACATGAACTAACTATATGC <<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:41:530:663 83 chr2 908 99 35M = 730 -213 AGAACAGATTTAAAAACATGAACTAACTATATGCT =8=;*=5==;;=====:=====;===;======== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:87:430:995 147 chr2 909 67 35M = 731 -213 GAAAAGAGTTAAAAACATGAACTAACTATATGCTG 1<4%81<..1<<<<<0<<<<<0.<<9<<(<6<<6< MF:i:18 Aq:i:30 NM:i:2 UQ:i:17 H0:i:0 H1:i:1
--B7_595:3:85:964:950 163 chr2 910 99 35M = 1095 220 AACAGATTTAAAAACATGAACTAACTATATGCTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:68:570:705 99 chr2 910 99 35M = 1100 225 AACAGATTTAAAAACATGAACTAACTATATGCTGT <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:198:503:669 99 chr2 912 99 35M = 1107 230 CAGATTTAAAAACATGAACTAACTATATGCTGTTT <<<<<<<<<<;8<<<<<;<<<<<<;<;<8<<8<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:273:545:1001 163 chr2 913 99 35M = 1088 210 AGATTTAAAAACATGAACTAACTATATGCTGTTTA <<<<<<<<<<<<<<<;;<<<<<<;<8;28<8;<<8 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:152:778:228 83 chr2 915 99 35M = 739 -211 ATTTAAAAACATGAACTAACTATATGCTGTTTACA <;;7=<<<<<<;<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:53:463:1132 163 chr2 915 99 40M = 1109 234 ATTTAAAAACATGAACTAACTATATGCTGTTTACANGAAA <<<<<<<<<<<<<<<<<<<<<;<<<8<<<<<<<8<!1488 MF:i:18 Aq:i:71 NM:i:1 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:12:630:707 147 chr2 915 99 35M = 751 -199 ATTTAAAAACATGAACTAACTATATGCTGTTTACA <:<<<<<<<;<<<<<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:179:119:876 163 chr2 917 60 35M = 1112 230 TTAAAAACATGAACTAACTATATGCTGTTTACCAG <<<<<<<7<<<<<<<8<<<6<<<<<<7<<<:0&<0 MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:1
--EAS1_97:6:308:667:658 99 chr2 918 10 35M = 1116 233 TAAAAACATGAACTAACTATATCCTTCTTACAATA 9<96<<<;<96<<9<51<<<<<1:9++<9*%4;*5 MF:i:18 Aq:i:10 NM:i:4 UQ:i:45 H0:i:0 H1:i:0
--EAS114_28:5:163:832:715 163 chr2 918 99 36M = 1085 203 TAAAAACATGAACTAACTATATGCTGTTTACAAGAA <<0;<9<<<<<<<<<<<<9<<<<<<<<<<<<;;;<6 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:179:496:161 83 chr2 919 99 36M = 756 -199 AAAAACATGAACTAACTATATGCTGTTTACAAGAAA <<<<<9<<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:13:325:483 163 chr2 919 99 35M = 1101 217 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_103:7:139:578:951 163 chr2 919 98 35M = 1095 211 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<0;; MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_108:8:19:929:765 99 chr2 919 98 35M = 1069 185 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;77< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:5:214:644:390 163 chr2 919 72 35M = 1082 198 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:6:243:209:110 83 chr2 920 48 35M = 768 -187 AAAACATGAACTAACTATATGCTGTTTACAAGAAA ;<;;;:<:<:;<<;;<;<;<;7<<;<<;;<;<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:247:900:123 99 chr2 920 99 35M = 1123 238 AAAACATGAACTAACTATATGCTGTTTACAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;<; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_62:7:162:195:761 83 chr2 922 30 35M = 767 -190 AACATGAACTAACTATATGCTGTTTACAAGAAACT <<8<<:<<:<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_103:2:184:980:396 163 chr2 923 99 35M = 1092 204 ACATGAACTAACTATATGCTGTTTACAAGAAACTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:162:272:415 99 chr2 923 83 35M = 1112 224 ACATGAACTAACTATATGCTGTTTACAAGAAACTC <<<<<<<<<<<<<<<<<<<<<<;<<<<<9;<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:184:237:476 163 chr2 925 99 35M = 1101 211 ATGAACTAACTATATGCTGTTTACAAGAAACTCAT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;<;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:202:341:984 99 chr2 926 99 35M = 1094 203 TGAACTAACTATATGCTGTTTACAAGAAACTCATT =========================4;======== MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:107:738:484 99 chr2 926 75 35M = 1097 206 TGAACTAACTATATGCTGTTTACAAGAAACTCATT <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:7:492:1088 147 chr2 926 57 35M = 769 -192 TGAACTAACTATATGCTGTTTACAAGAAACTCATT 4;<<75<<::<:<<<-<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_11:1:81:1019:558 83 chr2 926 77 35M = 760 -201 TGAACTAACTATATGCTGTTTACAAGAAACTCATT <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:10:1312:1558 83 chr2 928 76 35M = 771 -192 AACTAACTATATGCTGTTTACAAGAAACTCATTAA <<:<<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:206:741:810 83 chr2 929 99 34M = 753 -210 ACTAACTATATGCTGTTTACAAGAAACTCATTAA <3<<;5<<<<<;:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:200:65:291 147 chr2 930 99 35M = 728 -237 CTAACTATATGCTGTTTACAAGAAACTCATTAATA ;9<;3<<9<7<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:38:670:564 147 chr2 930 73 35M = 770 -195 CTAACTATATGCTGTTTACAAGAAACTCATTAATA 3<<<3:<<<<<:;<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:57:1114:2032 99 chr2 931 99 35M = 1102 206 TAACTATATGCTGTTTACAAGAAACTCATTAATAA <7<<<<<<<<<<<<<<<<<777<<<7<<<<<3<<7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:125:137:58 83 chr2 932 76 35M = 772 -195 AACTATATGCTGTTTACAAGAAACTCATTAATAAA <<9;<<<<<;<;<<<<;<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:1:38:250:647 163 chr2 933 71 35M = 1100 202 ACTATATGCTGTTTACAAGAAACTCATTAATAAAT <<<<<<<9<<9<<<<<<<6<<<<<<<<<<8<779% MF:i:18 Aq:i:0 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS192_3:6:116:464:261 99 chr2 934 99 35M = 1107 208 CTATATGCTGTTTACAAGAAACTCATTAATAAAGA <<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<;;8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:168:69:249 163 chr2 936 99 35M = 1125 224 ATATGCTGTTTACAAGAAACTCATTAATAAAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:246:647:765 163 chr2 937 99 35M = 1119 217 TATGCTGTTTACAAGAAACTCATTAATAAAGACAT ;<<<<<<<<<;<&<<3+3<<<3<<9&</:/87</8 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:307:113:346 163 chr2 938 99 35M = 1123 220 ATGCTGTTTACAAGAAACTCATTAATAAAGACATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<8 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:159:493:275 147 chr2 939 72 35M = 760 -214 TGCTGTTTACAAGAAACTCATTAATAAAGACATGA 4949;<<<<<<<<<<<6<;<<<<;<<<<<*<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:257:288:731 99 chr2 939 99 34M = 1131 227 TGCTGTTTACAAGAAACTCATTAATAAAGACATG <<<<<<<<8<8<<;<;<<<;<<<5<;;88.8<6< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:231:815:626 163 chr2 940 99 35M = 1119 214 GCTGTTTACAAGAAACTCATTAATAAAGACATGAG <;<<<<9<<<<<<<<<<<<<<<<<;<<;5<<<;:; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:93:77:1338 163 chr2 940 10 35M = 1098 193 GCTGCTTACAAGAAGCGCATTAATAAAGACATGAG <<<<*<2<<<:<4<&<6<8<4<::<8<<<<82;;7 MF:i:18 Aq:i:0 NM:i:3 UQ:i:35 H0:i:0 H1:i:0
--EAS114_45:2:54:1886:719 99 chr2 941 99 35M = 1125 219 CTGTTTACAAGAAACTCATTAATAAAGACATGAGT ;;;9;;<;;;9;;;;;:;<9;:;;;;9;;;99799 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:94:273:165 99 chr2 945 99 35M = 1128 218 TTACAAGAAACTCATTAATAAAGACATGAGTTCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;:7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:32:461:154 147 chr2 945 71 35M = 769 -211 TTACAAGAAACTCATTAATAAAGACATGAGTTCAG ;;</<<<<<;:<.<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:303:131:673 163 chr2 947 99 36M = 1112 201 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:10:106:737 163 chr2 947 99 35M = 1106 194 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT <<<;<1<;<<<<<<9<<<<;;<<<<<99<<94008 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:214:950:32 163 chr2 947 99 35M = 1132 220 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT >>=>>>>==>=>>>==>=>=:=====;=:=6:::6 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:10:686:1024 163 chr2 947 99 35M = 1103 191 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT <:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:53:61:31 163 chr2 949 99 35M = 1122 208 AAGAAACTCATTAATAAAGACATGAGTTCAGATAA <<<7;<7<<<;7<;;<7<7<7<;5<73<<</%;/; MF:i:18 Aq:i:66 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS114_28:6:185:87:475 83 chr2 949 99 36M = 786 -199 AAGAAACTCATTAATAAAGACATGAGTTCAGGTAAA <<4<<<+<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:235:899:847 99 chr2 950 99 35M = 1112 197 AGAAACTCATTAATAAAGACATGAGTTCAGGTAAA <<3<;<<<<<<<<<;;<<<<<<<+<<<+6<8<3/< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:193:661:771 163 chr2 952 99 35M = 1129 212 AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG <<<<<<<<<;<<<;;;<<<<<;<<<=;<:;5:9:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:113:408:211 147 chr2 952 99 35M = 789 -198 AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG <:;:;:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:24:718:322 83 chr2 953 23 35M = 779 -209 AACTCATTAATAATGTCATGAGTTCAGGTAAAGGG 5:+:0;**&+<00&<&<<<5<28<<;;<83<<<<< MF:i:18 Aq:i:23 NM:i:2 UQ:i:10 H0:i:0 H1:i:0
--EAS56_61:5:263:314:696 163 chr2 953 99 35M = 1117 199 AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG <<<<<<<<<<<<<<;<<<<<<<<<<<<:<<;<775 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:93:312:331 163 chr2 953 99 35M = 1145 227 AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:181:93:694 83 chr2 954 99 35M = 783 -206 ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG <4;8<<+<<:<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:238:803:383 147 chr2 954 75 35M = 779 -210 ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG ;;<;;<<<<<<<<<<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:44:77:1255 163 chr2 955 99 35M = 1113 193 CTCATTAATAAAGACATGAGTTCAGGTAAAGGGGT ;;;;;;;8;;;7;8;;;;;;;;;;886;;;76777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:232:364:583 147 chr2 956 71 35M = 780 -211 TCATTAATAAAGACATGAGTTCAGGTAAAGGGGTG ;%;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:256:354:173 163 chr2 957 99 36M = 1121 200 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:138:211:582 147 chr2 957 99 35M = 788 -204 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG :<8;<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:61:631:567 99 chr2 957 99 35M = 1131 209 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:56:1757:1319 83 chr2 957 67 35M = 775 -217 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG &7778<<<<<8<;<<:::;<:<4<<:<:;8<8<;< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:154:26:712 147 chr2 959 99 35M = 786 -208 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:10:975:766 163 chr2 959 99 35M = 1166 242 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGAAA <<<<<<<<;<<<<;<:<<;<6;;<<<:6-:+1+;; MF:i:18 Aq:i:64 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_73:5:220:733:736 99 chr2 959 99 35M = 1143 219 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<5<<;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:46:1566:668 163 chr2 959 99 35M = 1148 224 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:59:871:351 83 chr2 963 99 35M = 808 -190 TAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAG ;<<<<<:<;<<<4;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:46:522:426 83 chr2 964 99 35M = 807 -192 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA <<<<<:<<<<<<1/<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:157:876:302 83 chr2 964 99 35M = 801 -198 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA ===:=8=;==:892=,28==88==28====8=;;8 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:61:1369:440 83 chr2 964 47 35M = 770 -229 AAAGACATGATTTCAGGTAAAGGGGTGGAAAAAGA <<<<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS221_1:6:57:1342:1166 147 chr2 964 99 35M = 796 -203 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA <<<<<;<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:310:287:420 147 chr2 965 99 35M = 794 -206 AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT <<<<;<;<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:262:53:888 83 chr2 965 99 35M = 787 -213 AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:542:428 83 chr2 965 99 35M = 797 -203 AAGACATGAGTTCAGGTACAGGGGTGGAAAAAGAT <<876</3<8874:<8:<)<5<<<;<<<<7<<<:< MF:i:18 Aq:i:41 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--B7_593:2:81:435:410 147 chr2 966 99 36M = 782 -220 AGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT ;<;;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:85:219:371 83 chr2 967 99 35M = 817 -185 GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT <<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:116:966:193 83 chr2 967 99 35M = 815 -187 GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT =================================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:432:228 163 chr2 967 99 35M = 1145 213 GACATGAGTTCAGGGAAAGGGGTGGAAAAAGATGT <<<<<<<<<<<<<<8<<<<<<<<<<<<:<<<<<;; MF:i:18 Aq:i:47 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--B7_610:1:12:88:200 163 chr2 968 99 35M = 1133 200 ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT <<<<<<<<<<<;<<<<<<<;<<<:<<<<<<9<<5< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:313:711:530 83 chr2 968 99 35M = 784 -219 ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT <7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:74:866:49 163 chr2 969 99 35M = 1143 209 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC ====================9==91==<=6==;:= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:248:17:435 99 chr2 969 99 35M = 1139 205 CATGAGTTCAGGAAAAGGGGTGGAAAAAGATGTTC <<<<8<<<888<+<<<<<;<:<<<<8<<<<<;3<3 MF:i:18 Aq:i:43 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS114_30:1:188:863:790 83 chr2 969 98 35M = 783 -221 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC ;<7<<<55<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:75:1503:1399 163 chr2 969 99 40M = 1130 201 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC <<<<<<<<<<<<<<<<<<9<<<;<<<<<<;<<<<:::711 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:56:155:49 99 chr2 970 99 35M = 1145 210 ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT <<<<<<<<<<<<<<<<<<<<<<;<<;<<<;<9<9; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:295:547:216 83 chr2 970 99 35M = 809 -196 ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:262:928:237 147 chr2 971 99 35M = 787 -219 TGAGTTCAGGTAAAGGTGTGGAAAAAGATGTTCTA ;<<<<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS219_1:1:50:257:341 83 chr2 971 99 35M = 813 -193 TGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:122:38:103 83 chr2 972 79 35M = 778 -229 GAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTAC ===;3<===:=======<================= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:82:670:302 99 chr2 973 99 35M = 1146 208 AGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:24:415:944 147 chr2 974 99 35M = 805 -204 GTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC <;;<<<<:<<<<<<<;<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:108:440:208 99 chr2 975 99 35M = 1142 202 TTCAGGTAAAGGGGAGGAAAAAGATGTTCTACGCA <<<;<<<<<<<<<</<<<<;<<<;<<;<;<64/:+ MF:i:18 Aq:i:43 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--B7_595:3:229:543:583 99 chr2 976 99 35M = 1139 198 TCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAA <<<<<<<<<<8<8<9<<<<8<<588<<<<*<2:2* MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:142:353:398 83 chr2 977 99 35M = 807 -205 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA =================================== MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:102:543:160 83 chr2 977 99 35M = 825 -187 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA 9==9=====;=====================<=== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:191:40:536 163 chr2 977 66 35M = 1167 225 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA <<<<<<<<8<<;<<8<<;<;;<<8<<<<<</<74/ MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:272:328:400 163 chr2 977 99 35M = 1151 209 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<7<;:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:69:1593:819 83 chr2 977 99 40M = 786 -231 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA );::7<<<<:;<<<<<<<<<<<<<<<9<<9<3<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:3:133:707:886 99 chr2 978 99 35M = 1146 203 AGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAAC <<<<7;<<<<<<<<<;<<<<<<<<<<<<<5<;66< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:4:92:411:955 99 chr2 979 99 36M = 1149 206 GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_61:8:60:358:494 99 chr2 979 44 35M = 1179 235 GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACA <<<<<<<<<<<<<<<<<<<<<<<<<<:<:<<;;4; MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:7:41:34:211 163 chr2 980 99 35M = 1164 219 GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3:;5; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:40:1291:1045 99 chr2 980 99 35M = 1167 222 GTAAAGGGGTGGAAAAAGATGTTCTACGCAACAAG <<<<<<<<<5<<5<<<<7<<<<<<<<<5<9<&%73 MF:i:18 Aq:i:39 NM:i:2 UQ:i:9 H0:i:1 H1:i:0
--EAS218_1:8:90:706:1276 83 chr2 980 99 35M = 814 -201 GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <;<<<<<<<;<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_32:4:5:396:292 163 chr2 981 99 35M = 1155 209 TAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGA <<<<<<<<<<<<<<;;<<<<:<<<<;;<;;3/&+8 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:176:653:957 83 chr2 982 82 35M = 819 -198 AAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA ===::=============<==<====<======== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_71:6:264:705:89 99 chr2 983 99 34M = 1155 207 AAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA <<<<<<<<<<;8<<<<<<<<<<<<<<<&<<,;;( MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:66:757:918 163 chr2 985 99 35M = 1143 193 GGGGTGGAAAAAGATGTTCTACGCAAACAGAAACC =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:114:506:971 163 chr2 986 99 35M = 1150 199 GGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA =================================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:220:809:850 99 chr2 986 60 35M = 1187 236 GGGGGGAAAAAGATGTGCTACACAAAAAGATTCCA <<;7;<<0::8<-6:<0624-*<&-93-,8+(&08 MF:i:130 Aq:i:60 NM:i:4 UQ:i:64 H0:i:0 H1:i:0
--B7_589:7:76:306:561 83 chr2 987 89 35M = 794 -228 GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA 9<7<<9<<<<<<7<<71<71*7<<<<<<<<<<1<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS192_3:6:235:505:553 83 chr2 987 99 35M = 808 -214 GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA ;8518<<<<<;<;<<<;<<;<.<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:19:695:59 147 chr2 988 99 36M = 826 -198 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAAT ;+;8<<<<<<<<<<<5<<+<:<<;<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:136:260:254 147 chr2 988 99 35M = 813 -210 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA ;:;;<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:5:266:133:789 147 chr2 988 99 35M = 810 -213 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA 9;;<<<<<<<<<<<<5<<;<5<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:4:159:508:571 147 chr2 989 84 36M = 834 -191 TGGAAAAAGATGTTCTACGCAAACAGAAACCAAATG 9<6<<<<<<<<<<<;<<;<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:166:84:766 163 chr2 990 99 35M = 1167 212 GGAAAAAGATGTTCTACGCAAACAGAAACCAAATG <<<<<<<<;<<<<<<<<;<<<<<<;<<<7<;::93 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_61:6:283:963:234 99 chr2 992 99 35M = 1157 200 AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG <<<<<<<<<<<<<<<;<<<<<<<<<<<;<<;<<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:4:184:659:377 99 chr2 992 99 35M = 1173 216 AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:305:707:258 147 chr2 992 58 36M = 831 -197 AAAAAGATGTTCTACGCAAGCAGAAACCAAATGAGA 3<<7<,;<<<<0<66<6+<%<<<.<<<<<<<<<9<< MF:i:18 Aq:i:17 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS219_1:7:20:1444:328 99 chr2 993 99 35M = 1149 191 AAAAGATGTTCTACGCAAACAGAAACCAAATGAGA <<<<;<<<<<<<<;<<<<<<<<;<<<<<;<;;8:7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:157:447:758 147 chr2 994 99 36M = 833 -197 AAAGATGTTCTACGCAAACAGAAACCAAATGAGAGA <<<;<<5<</<<6<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:37:763:1437 163 chr2 994 99 35M = 1191 232 AAAGATGTTCTACGCAAACAGAAACCAAATGAGAG ;;;;;6;;;;;;;;;:;6;5;5;;;;;76;767/7 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:94:1273:1462 163 chr2 995 99 35M = 1166 206 AAGATGTTCTACGCAAACAGAAACCAAATGAGAGA <<<<<<<<<<<<:<<<<<<<<:<<<<:6:7;744; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:74:213:877 147 chr2 996 99 35M = 816 -215 AGATGTTCTACGCAAACAGAAACCAAATGAGAGAA <<<<<<<&<<-<-<<<7<<<<<77<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:168:61:867 163 chr2 997 99 35M = 1188 226 GATGTTCTACGCAAACAGAAACCAAATGAGAGAAG ====7====================7======6== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:307:252:632 163 chr2 998 99 35M = 1142 179 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<;; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:37:604:389 99 chr2 998 99 35M = 1188 225 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<3<<<<<4<<<<<9<2;949<;35:95 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:147:687:428 99 chr2 998 99 35M = 1159 196 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:114:736:433 83 chr2 998 63 35M = 832 -201 ATGTTCTACGCAAACAGAAACCAAGTGAGAGAAGG <9<9+9;<6<9<<;9<<<<<;<<<99<<<<<<<<< MF:i:18 Aq:i:18 NM:i:1 UQ:i:24 H0:i:0 H1:i:1
--B7_597:8:35:118:589 163 chr2 999 99 35M = 1188 224 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<<9 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:127:288:655 83 chr2 999 99 35M = 803 -231 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA <<:<3<<:<.<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:260:827:289 83 chr2 999 99 35M = 836 -198 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA 6;99+<<<<<<<<<<<<<<6<<<<<7<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:82:843:1838 147 chr2 999 99 35M = 804 -230 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA 888829;;;;;;;;;;;;;;:;;;;;;;;;;;;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:64:350:174 163 chr2 1000 99 35M = 1166 201 GTTCTACGCAAACAGAAACCAAATGAGAGAAGGAG <<<<<<<<<<<<<<<<<<<<<:<<<<<6<<<<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:8:327:522 83 chr2 1001 99 35M = 826 -210 TTCTACGCAAACAGAAACCAAATGAGAGAAGGAGT ;;4;<-<-<<<7<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:126:361:250 147 chr2 1002 99 35M = 810 -227 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA 72:;7</<<<:<-7<<:<<<<<<<:<6<+:<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:571:366 163 chr2 1002 99 35M = 1194 227 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA <<<<<<<<<<<<<<<<<<<<<<<<<7<:<<99;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:202:275:776 163 chr2 1002 99 36M = 1196 230 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAG <<<<<<<<<<<<<<<<<<<<<;<<9<;;<<<;<;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:194:998:663 163 chr2 1002 99 35M = 1165 198 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:30:599:589 99 chr2 1003 99 36M = 1188 221 CTACGCAAACAGAAACCAAATGAGAGAAGGAGCAGC <<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;<&<<; MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS112_34:4:92:412:435 99 chr2 1003 89 35M = 1184 216 CTACGCAAACAGAAACCAANTGAGAGAAGGAGTAG <<<<<<<4<<<<<<<<<66!<<<<<<6<<77<<97 MF:i:18 Aq:i:43 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--B7_610:2:75:887:149 83 chr2 1004 99 35M = 823 -216 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC :<:<0<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:2:1422:1820 163 chr2 1004 99 35M = 1164 195 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC ;7;;;;;;;;:;;;;;;;;;;;;;;;;;;;77777 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:90:561:850 83 chr2 1004 85 35M = 827 -212 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC 78376<;;9<;<<;:9<<<6;<;<;;8;;<;/;;; MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:164:719:947 147 chr2 1005 99 35M = 813 -227 ACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCT ===,=========6====)================ MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:154:952:558 99 chr2 1007 99 35M = 1173 201 GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<:< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:58:923:1915 83 chr2 1007 99 40M = 846 -201 GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA :+;;;8<<<<<<,<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:253:175:31 99 chr2 1008 72 35M = 1187 214 CAAACAGAAACCAAATGAGAGAAGGAGTAGCTATA <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<:<;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:29:729:70 83 chr2 1009 51 35M = 850 -194 AAACAGAAACCAAATGAGAGAAGGAGTAGCTATAC <<<:<<<<<<7<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:174:157:573 163 chr2 1012 99 35M = 1191 214 CAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:197:399:319 163 chr2 1012 99 35M = 1189 212 TAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA +<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;;<<; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_65:7:68:825:405 83 chr2 1015 30 35M = 835 -215 AAACCAAATGAGAGAAGGAGTAGCTATACTTATAT <<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:13:701:55 99 chr2 1015 99 36M = 1187 208 AAACCAAATGAGAGAAGGAGTAGCTATACTTATATC <<<<<<<<<9<<<9<<<<<<6<<<<<<<6<<6<<6+ MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:128:555:941 153 chr2 1016 10 36M * 0 0 AACCAAAAGAGAGAAGGAGTAGTTATACACATATCA 55--555560355$55555555.57757$7555577 MF:i:32 Aq:i:10 NM:i:4 UQ:i:58 H0:i:0 H1:i:0
--EAS219_FC30151:1:53:140:421 163 chr2 1016 99 35M = 1185 204 AACCAAATGAGAGAAGGAGTAGCTATACTTATATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:64:526:339 83 chr2 1019 96 35M = 819 -235 CAAATGAGAGAAGGAGTATCTATACTTATATCAGA 3<<<7<<;<<<<<<<<<<<;<<<<;<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS192_3:3:194:378:230 163 chr2 1022 99 35M = 1198 211 ATGAGAGAAGGAGTAGCTATACTTATATCAGATAA <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:45:239:851 163 chr2 1023 61 35M = 1211 223 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA <<88;<208<9<;6<<<6269;94<&401-662&2 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:39:956:676 163 chr2 1023 99 35M = 1191 203 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA ;;;;;;;;;;;;9;;;;;;;;;;;;;;;9957777 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:15:1763:1143 99 chr2 1023 99 35M = 1193 205 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:309:109:987 163 chr2 1024 99 35M = 1194 205 GAGAGAAGGAGTAGCTATACTTATATCAGATAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<9<<<;<;;; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_593:3:102:856:670 147 chr2 1025 99 36M = 836 -225 AGAGAAGGAGTAGCTATACTTATATCAGATAAAGCA ;;<<<<:<<<:<<4<<<<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_610:6:107:252:533 163 chr2 1025 60 35M = 1173 183 AGAGAAGGAGTAGCTATACTTATATCAGATAAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:3
--EAS56_65:4:126:966:514 83 chr2 1027 99 35M = 865 -197 AGAAGAAGTAGCTATACTTATATCAGATAAAGCAC <4<<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:1 H1:i:1
--EAS114_26:1:171:527:247 163 chr2 1027 67 35M = 1194 202 AGAAGGAGTAGCTAGACTTATATCAGATAAAGCAC =4==4===8==99=&=8+9=19+.2.6'=99+999 MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:3
--EAS1_105:1:234:185:359 163 chr2 1029 46 35M = 1183 189 AAGGAGTAGCTATACTTATATCAGATAAAGCACAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;9--: MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:11
--EAS51_66:3:155:375:623 83 chr2 1029 99 35M = 849 -215 AAGGAGTAGCTATACTTATATCAGATAAAGCACAC ;;;;<<:<<<<;<<;<<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:5:4:939:2021 163 chr2 1031 99 40M = 1197 206 GGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAAT <<<<<<<<<<<<<<<<<<<<<97<<<;<<;<7;<<:48:: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS220_1:2:50:513:882 163 chr2 1031 99 35M = 1192 196 GGAGTAGCTATACTTATATCAGATAAAGCACACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS1_103:5:188:20:592 163 chr2 1032 95 35M = 1202 205 GAGTAGCTATACTTATATCAGATAAAGCACACTTT <<<<<<<<<<<<<<<<<<<<;;<<<<:<<<;<;;< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:3 H1:i:16
--EAS114_45:3:35:896:1588 163 chr2 1032 91 35M = 1205 208 GAGTAGCTATACTTATATCAGATAAAGCACACTTT ;;;;;;;;;;;;;;;;;;;;8;;;;;8;;;88989 MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:3 H1:i:18
--EAS1_108:6:73:735:329 147 chr2 1035 99 35M = 868 -202 TAGCTATACTTATATCAGATAAAGCACACTTTAAA ;;;9;<<7<<<<<<<<<<<<<<<<<<<2<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:133:514:754 83 chr2 1036 63 36M = 855 -217 AGCTATACTTATATCAGATAAAGCACACTTTAAATC ;;4;<;<;<<<<<<<<;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS218_1:4:62:561:531 163 chr2 1036 99 35M = 1203 202 AGCTATACTTATATCAGATAAAGCACACTTTAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_593:6:119:428:415 83 chr2 1037 99 36M = 876 -197 GCTATACTTATATCAGATAAAGCACACTTTAAATCA 84<<<<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:2:226:885:729 147 chr2 1037 98 35M = 867 -205 GCTGAACTTACATCAGATAAAGCACACTTTAAATC /*220%.(;<%<3.<<<4<<<<86;<8<<8<<<<< MF:i:18 Aq:i:30 NM:i:3 UQ:i:36 H0:i:0 H1:i:1
--EAS1_108:1:189:863:213 163 chr2 1039 99 35M = 1202 198 TATACTTATATCAGATAAAGCACACTTTAAATCAA <<<<<<<<<<<<<<<<<<<<;<<<;<<<<;7<9;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_597:4:146:961:63 83 chr2 1041 86 35M = 861 -215 TACTTATATCAGATAAAGCACACTTTAAATCAACA 7;;<<<<<;<<<7<<<<<<<<;;<<;<;<<;<<<7 MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:68:996:104 99 chr2 1041 70 35M = 1214 208 TACTTATATCAGATAAAGCACACTTTAAATCAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:47:1791:444 163 chr2 1041 74 35M = 1213 207 TACTTATATCAGATAAAGCACACTTTAAATCAACA ;3;;;;;;;;;;;;;;;;;;;;;;;;;;;877977 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:1:156:196 147 chr2 1042 77 40M = 867 -215 ACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTA :::::<<<<<<<<<<<<<4<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:70:1349:1788 163 chr2 1043 99 35M = 1203 195 ATTATATCAGATAAAGCACACTTTAAATCAACAAC &<8<<<85:580;<:0-><;>588>9<>7:<0<9; MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:2:30:644:942 99 chr2 1045 83 35M = 1229 219 TATATCAGATAAAGCACACTTTAAATCAACAACAG <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<9;<9< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_591:2:123:924:645 83 chr2 1045 84 36M = 861 -220 TATATCAGATAAAGCACACTTTAAATCAACAACAGT ;<<<<*<<<<<<</7<2<8<<<<<<<4<<<<<<<<< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_589:5:147:405:738 83 chr2 1048 99 35M = 870 -213 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA <9/<:<<<<<<<<7</<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_61:3:155:758:710 83 chr2 1048 98 35M = 859 -224 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA =46=4=5===:========:=7=7======11=== MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_73:7:254:572:431 83 chr2 1048 97 35M = 891 -192 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA <63<;<;<<<:7<:<7;<:<<<<:<<<<7<<<<:< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_57:7:33:954:724 163 chr2 1049 97 35M = 1210 196 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA ;<<<<<<<<<<<<<8<<<<:<;;<<;;<;<<;;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_63:6:102:816:260 99 chr2 1049 99 35M = 1225 211 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:5:197:914:256 99 chr2 1049 97 35M = 1204 190 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8;::: MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_65:4:150:94:843 147 chr2 1050 0 35M = 868 -217 CAGATACATCCCACTTTAAATCAACCACAGTAAAA 4<9<41*747*7<:9<:7:::<72;+<;::<7<<< MF:i:18 Aq:i:0 NM:i:4 UQ:i:47 H0:i:0 H1:i:0
--EAS1_108:5:321:712:224 163 chr2 1051 58 35M = 1220 204 AGATAAAGCACACTTTAAATCAACAACAGAAAAAT <<<<<<<<2<<<<<<<<<<<<<<<:<<<<(<<:<, MF:i:18 Aq:i:28 NM:i:1 UQ:i:7 H0:i:1 H1:i:2
--EAS114_32:3:236:475:254 83 chr2 1051 99 35M = 880 -206 AGATAAAGCACACTTTAAATCAACAACAGTAAAAT <:<<<<<;9<7<;<<<<<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:72:1288:1211 99 chr2 1052 84 35M = 1235 218 GATAAAGCACACTTTAAATCAACAACAGTAAAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_65:2:264:157:150 99 chr2 1054 30 35M = 1238 219 TAAAGCACACTTTAAATCAACAACAGTAAAATAAA <<<<<<9<9<<<<.9;<<9&<97<;9933309605 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_95:7:310:800:761 163 chr2 1055 99 35M = 1249 229 AAAGCACACTTTAAATCAACAACAGTAAAATAAAA ===========================+======= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:88:465:1877 99 chr2 1055 99 35M = 1212 192 AAAGCACACTTTAAATCAACAACAGTAAAATAAAA <<<<<<<<<<;<<<<<<<<<<<<<<<<7<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:66:891:294 163 chr2 1057 99 35M = 1233 211 AGCACACTTTAAATCAACAACAGTAAAATAAAACA <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:100:735:530 163 chr2 1058 99 35M = 1257 234 GCACACTTTAAATCAACAACAGTAAAATAAAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:68:440:424 99 chr2 1060 99 35M = 1237 212 ACACTTTAAATCAACAACAGTAAAATAAAACAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS220_1:8:66:1046:167 99 chr2 1060 99 35M = 1241 216 ACACTTTAAATCAACAACAGTAAAATAAAACAAAG <<<<<:<<<<<<<<<<<<<9<;77<9<7<<;<9;- MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_81:6:11:801:386 83 chr2 1061 97 35M = 868 -228 CACTATAAATCAACAACAGTAAAATAAAACAAAGG 5<2:$6<<<38<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:3 H0:i:1 H1:i:1
--EAS114_28:2:141:7:963 163 chr2 1061 85 36M = 1240 215 CACTTTAAATCAACAACAGTAAAATAAAACAAAGGA <<<<<<<<<<<<;<:<<<<<<1<<&<;<;<<;,<;5 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:55:296:1457 147 chr2 1061 99 35M = 884 -212 CACTTTAAATCAACAACAGTAAAATAAAACAAAGG -<%63<<<<<1<<<<<5<<<<<<<<<<<<<<<7<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:1:58:726:1746 83 chr2 1061 99 40M = 900 -201 CAATTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTC &:&::;<<<76<<:<<6<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS221_1:8:15:881:1932 147 chr2 1061 92 35M = 886 -210 CACTTTAAATCAACAACAGTAAAATAAAACAAAGG )<4<<<<<<<4<<4<<4<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_95:5:284:212:932 99 chr2 1063 10 35M = 1257 229 CTTTAAATCAACAACAATAAAAAAAAACAAAGGAG <<9<<<<<<<<<<<<<&&<<<<5<<<<8<<<1:<: MF:i:18 Aq:i:0 NM:i:2 UQ:i:25 H0:i:0 H1:i:0
--EAS139_19:4:18:1335:1514 99 chr2 1063 99 40M = 1235 212 CTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCAT <<<;<<<<<<<<<<<<<<<;<:<<;<<<<<<;<;<;;;9; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:273:424:207 83 chr2 1066 99 35M = 891 -210 TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:62:1076:540 147 chr2 1066 99 35M = 882 -219 TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC 6<<;:+=====5=:6===================2 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:113:856:319 83 chr2 1067 99 33M = 884 -216 AAATCAACAACAGTAAAATAAAACAAAGGAGGT <<<77<<:<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:19:929:765 147 chr2 1069 98 35M = 919 -185 ATCAACAACAGTAAAATAAAACAAAGGAGGTCATC <3+<<;<<;<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:88:54:900 163 chr2 1069 68 35M = 1257 223 ATCAACAACAGAAAAATAAAACAAAGGAGGTCATC .....&.....,....................... MF:i:18 Aq:i:19 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS56_63:7:109:22:383 163 chr2 1071 99 35M = 1244 208 CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<;<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:4:571:820 83 chr2 1071 99 35M = 891 -215 CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT &<<7<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:255:441:47 99 chr2 1072 99 35M = 1237 200 AACAACAGTAAAATAAAACAAAGGAGGTCATCATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<6<;:<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:66:718:481 147 chr2 1072 99 40M = 891 -221 AACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATG ::5::1<;;<<<<<<1<<<<<<<<<<<<7<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:155:807:19 147 chr2 1074 99 35M = 867 -242 CAACAGTAAAATAAAACAAAGGAGGTCATCATACA :==4=5:====:============:========== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:43:1229:1855 163 chr2 1074 99 35M = 1244 205 CAACAGTAAAATAAAACAAAGGAGGTCATCATACA <<<<<<<<<<<<<<<<<<<<<<<<<4<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:125:875:553 99 chr2 1075 99 36M = 1233 194 AACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:118:775:467 163 chr2 1075 99 35M = 1245 205 AACAGTAAAATAAAACAAAGGAGGTCATCATACAA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:301:161:195 99 chr2 1076 75 35M = 1239 198 ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:54:695:952 99 chr2 1076 99 35M = 1264 223 ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:77:589:741 163 chr2 1078 99 35M = 1263 220 AGTAAAATAAAACAAAGGAGGTCATCATACAATGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:200:263:280 163 chr2 1078 99 35M = 1236 193 AGTAAAATAAAACAAAGGAGGTCATCATACAATGA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;8<;1 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:64:199:1288 99 chr2 1079 77 35M = 1240 196 GTAAAATAAAACAAAGGAGGTCATCATACAATGAT <<<<<<<<<<<<<<;<<<<<<<<<<<<<<;<<<;< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:27:228:31 99 chr2 1082 99 35M = 1264 217 AAATAAAACAAAGGAGGTCATCATACAATGATAAA <<<<<<<<<<<<<<<<<;9<:;<<<<<<75<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:214:644:390 83 chr2 1082 72 35M = 919 -198 AAATAAAACAAAGGAGGTCATGATACAATGATAAA <<<;<<<<<<<<<<<<<<<<<&<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS114_45:2:79:554:354 99 chr2 1082 63 35M = 1242 195 AAATAAAACAAAGGAGGTCATCATACAATGATAAA 17;<;;+<<;;;;93;;:;3;;;;1;;;;<77744 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:303:542:924 163 chr2 1083 76 35M = 1242 194 AATAAAACAAAGGAGGTCATCATACAATGATAAAA <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:8:26:242:35 99 chr2 1084 99 35M = 1251 202 ATAAAACAAAGGAGGTCATCATACAATGATAAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:163:832:715 83 chr2 1085 99 36M = 918 -203 TAAAACAAAGGAGGTCATCATACAATGATAAAAAGA ;<<<<9<<<<<<<<;;<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:98:641:1040 83 chr2 1085 99 35M = 907 -213 TAAAACAAAGGAGGTCATCATACAATGATAAAAAG 4<<<<7<<<<<<<<<:<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:32:562:1695 99 chr2 1085 76 35M = 1258 208 TAAAACAAAGGAGGTCATCATACAATGATAAAAAG <<<<<<<<<<<<<<8<<<<<:<<<<<<<:<8<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:6:758:988 163 chr2 1087 99 35M = 1253 201 AAACAAAGGAGGTCATCATACAATGATAAAAAGAT 3+;0;0;;;0;;;;;;5;;;9;;;;90;;;57560 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:273:545:1001 83 chr2 1088 99 35M = 913 -210 AACAAAGGAGGTCATCATACAATGATAAAAAGATC <7(<<72;<2;27<;:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:74:656:272 163 chr2 1088 99 35M = 1245 192 AACAAAGGAGGTCATCATACAATGATAAAAAGATC <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:198:564:731 83 chr2 1089 99 35M = 898 -226 ACAAAGGAGGTCATCATACAATGATAAAAAGATCA <6<;<<<<<<:7<<;<<<8<<+<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:23:885:274 99 chr2 1089 99 35M = 1289 235 ACAAAGGAGGTCATCATACAATGATAAAAAGATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<;;< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:22:632:176 83 chr2 1091 99 36M = 894 -233 AAAGGAGGTCATCATACAATGATAAAAAGATCAATT <9<<<<<<<-;<;<<7;6;<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:184:980:396 83 chr2 1092 99 35M = 923 -204 AAGGAGGTCATCATACAATGATAAAAAGATCAATT <<;;<77;;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:110:984:98 99 chr2 1092 99 36M = 1270 214 AAGGAGGTCATCATACAATGATAAAAAGATCAATTC 98<<<<<<2<<<<<<;;<;;<<<5;5;<<;;<<<<+ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:202:341:984 147 chr2 1094 99 35M = 926 -203 GGAGGTCATCATACAATGATAAAAAGATCAATTCA <<<(<8&<92<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:219:40:833 163 chr2 1094 99 35M = 1278 219 GGAGGTCATCATACAATGATAAAAAGATCAATTCA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:23:1126:1886 99 chr2 1094 99 35M = 1268 209 GGAGGTCATCATACAATGATAAAAAGATCAATTCA 7<<<7<<<<<<<<7<<<<<<<<<<<<<;8<;<<5< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:85:964:950 83 chr2 1095 99 35M = 910 -220 GAGGTCATCATACAATGATAAAAAGATCAATTCAG <<8::<<;;<<<;<<6<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:139:578:951 83 chr2 1095 98 35M = 919 -211 GAGGTCATCATACAATGATAAAAAGATCAATTCAG ;<0;:&<:9<<<7<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:107:738:484 147 chr2 1097 75 35M = 926 -206 GGTCATCATACAATGATAAAAAGATCAATTCAGCA .8/<<<7<8<<<<<<<<<<<<<<<<9<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:4:93:77:1338 83 chr2 1098 10 35M = 940 -193 GTCATCATACAATGAAAAAAAGATCAATTCAGCAA <<7<7<<<<<1<7<<&97;;<1<;1<<7<;7<<;< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_610:8:68:570:705 147 chr2 1100 99 35M = 910 -225 CATCATACAATGATAAAAAGATCAATTCAGCAAGA 4<;4<;;:<<<<<<<<;<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS51_62:1:38:250:647 83 chr2 1100 71 35M = 933 -202 AATAATAAAATGATAAAAAGATCAATTCAGCAAGA +<&+<1<,<<7<<7<<<<<<<1,<<<<7<<2<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:34 H0:i:0 H1:i:3
--EAS1_93:8:13:325:483 83 chr2 1101 99 35M = 919 -217 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA ;:;<;=:========;==========;======== MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:128:584:952 163 chr2 1101 99 35M = 1277 211 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA <<<<<<<<<<<<<<+<;<<<<<<;<<<;<<<+<66 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:184:237:476 83 chr2 1101 99 35M = 925 -211 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA <;2<;<4<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--EAS51_64:6:300:622:86 163 chr2 1102 99 35M = 1264 197 TCATACAATGATAAAAAGATCAATTCAGCAAGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:57:1114:2032 147 chr2 1102 99 35M = 931 -206 TATTACAATGATAAAAAGATCAATTCAGCAAGAAG ;+!5<4<<<<<<<<<<<<<;<&<;7<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:10 H0:i:1 H1:i:6
--B7_593:3:310:193:629 163 chr2 1103 99 36M = 1267 200 CATACAATGATAAAAAGATCAATTCAGCAAGAAGAT <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:6:529:366 99 chr2 1103 99 35M = 1291 223 CATACAATGATAAAAAGATCAATTCAGCAAGAAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:10:686:1024 83 chr2 1103 99 35M = 947 -191 CATACAATGATAAAAAGATCAATTCAGCAAGAAGA &<<<3<<<<<<<<<<<<<<7<<<<<<<<<<7<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS114_45:7:14:978:1296 163 chr2 1104 90 35M = 1249 180 ATACAATGATAAAAAGATCAATTCAGCAAGAAGAT ;6;;;;;;;;;;;:;;;;;;;6;;;;;;;;77777 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS56_57:2:237:855:581 99 chr2 1105 87 35M = 1271 201 TACAATGATAAAAAGATCAATTCAGCAAGAAGATA <;4<7<<<;47<<74<:*<<2:<<7.799:2<<9: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--EAS139_19:7:85:262:751 163 chr2 1105 99 40M = 1305 240 TACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:::92 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:10:106:737 83 chr2 1106 99 35M = 947 -194 ACAATGATAAAAAGATCAATTCAGCAAGAAGATAT <-<<;<<<<<<<<<<<;<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--B7_610:6:143:620:158 163 chr2 1107 99 35M = 1283 211 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA <<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_67:6:198:503:669 147 chr2 1107 99 35M = 912 -230 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA 5<<:<<;<<<<<<<;;<<9<<<<<<<<;<<<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:6:116:464:261 147 chr2 1107 99 35M = 934 -208 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA ;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_73:5:263:557:988 99 chr2 1108 84 35M = 1289 216 AATGATAAAAAGATCAATTCAGCAAGAAGATATAA <<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<;<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:8
--EAS139_19:1:53:463:1132 83 chr2 1109 99 40M = 915 -234 ATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCC ;::;:<<<<<<<<:<<;<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:1528:799 99 chr2 1109 96 35M = 1306 232 ATGATAAAAAGATCAATTCAGCAAGAAGATATAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:7
--EAS54_81:7:324:472:791 99 chr2 1110 89 35M = 1274 199 TGATAAAAAGATCAATTCAGCAAGAAGATATAACC <<<<<<<<:<<<<<<<<<<<<<<:<<<<<<<<<:3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_61:8:4:173:814 163 chr2 1111 99 35M = 1289 213 GATAAAAAGATCAATTCAGCAAGAAGATATAACCA =====================<==========;== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_593:3:303:131:673 83 chr2 1112 99 36M = 947 -201 ATAAAAAGATCAATTCAGCAAGAAGATATAACCATC <;<<<<<<<<:<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:235:899:847 147 chr2 1112 99 35M = 950 -197 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT <7<<<<<<<<:<<<<:<</<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_105:8:179:119:876 83 chr2 1112 60 35M = 917 -230 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT <<<<<<<7<<<<<<;;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_59:2:162:272:415 147 chr2 1112 83 35M = 923 -224 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT =7=======;5==<<6==1==<============= MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_45:6:44:77:1255 83 chr2 1113 99 35M = 955 -193 TAAAAAGATCAATTCAGCAAGAAGATATAACCATC 79998;;;9:;<696<;.<;;<<;<;<;<;;;<8; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:162:257:203 163 chr2 1114 99 35M = 1301 222 AAAAAGATCAATTCAGCAAGAAGATATAACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:55:464:146 99 chr2 1114 99 35M = 1295 216 AAAAAGATCAATTCAGCAAGAAGATATAACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:308:667:658 147 chr2 1116 34 35M = 918 -233 AAAGATCACTTCAGCAATAAGATATAACCATCCTA <9;;;45;&<;&.<5683;84+<;<;+8<;<<8;< MF:i:18 Aq:i:10 NM:i:2 UQ:i:23 H0:i:0 H1:i:0
--EAS56_57:4:98:862:154 163 chr2 1116 99 35M = 1290 209 AAAGATCAATTCAGCAAGAAGATATAACCATCCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<9<:99<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_61:5:263:314:696 83 chr2 1117 99 35M = 953 -199 AAGATCAATTCAGCAAGAAGATATAACCATCCTAC <<;<;:<<<<7<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:83:1456:1854 163 chr2 1117 99 35M = 1275 193 AAGATCAATTCAGCAAGAAGATATAACCATCCTAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:231:815:626 83 chr2 1119 99 35M = 940 -214 GATCAATACAGCAAGAAGATATAACCATCCTACTA '<4%<<<22<<,<<;<<4;<<<<<<<<<<<<<<7< MF:i:18 Aq:i:41 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS114_32:4:246:647:765 83 chr2 1119 99 35M = 937 -217 GATCAATTCAGCAAGAAGATATAACCATCCTACTA 9<+,<<&,39<,<;<<<<<<<&<<<<;0<<3;<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:256:354:173 83 chr2 1121 99 36M = 957 -200 TCAATTCAGCAAGAAGATATAACCATCCTACTAAAT -9<<:9<<;6<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:53:61:31 83 chr2 1122 99 35M = 949 -208 CAATTCAGCAAGAAGATATAACCATCCTACTAAAT 5;;<95<<5<<<<<<<<<<:5;<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:308:509:948 99 chr2 1123 99 36M = 1298 211 AATTCAGCAAGAAGATATAACCATCCTACTAAATAC <9<<<<<<<;<7<<;<<<<<<<;<<<<7<<;2;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:247:900:123 147 chr2 1123 99 35M = 920 -238 AATTCAGCAAGAAGATATAACCATCCTACTAAATA ;;;;.<<4<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:307:113:346 83 chr2 1123 99 35M = 938 -220 AATTCAGCAAGAAGATATAACCATCCTACTAAATA <<<<9<<1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:168:69:249 83 chr2 1125 99 35M = 936 -224 TTCAGCAAGAAGATATAACCATCCTACTAAATACA ;0;<;;<<<<<<<<<<<<<;<<<8<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:54:1886:719 147 chr2 1125 99 35M = 941 -219 TTCAGCAAGAAGATATAACCATCCTACTAAATACA 883777;;:;;;;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:94:273:165 147 chr2 1128 99 35M = 945 -218 AGAAAGAAGATATAACCATCCTACTAAATACATAT ;3&;;:<<:<-<-<<8:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_95:7:155:530:532 163 chr2 1128 99 35M = 1319 226 AGCAAGAAGATATAACCATCCTACTAAATACATAT =================================== MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:61:1885:163 163 chr2 1128 99 40M = 1281 193 AGCAAGAAGATATAACCATCCTACTAAATACATATGCACC <<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<9::::4 MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:193:661:771 83 chr2 1129 99 35M = 952 -212 GCAAGAAGATATAACCATCCTACTAAATACATATG :&<<<<<<<<<<<<<;<<<;<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:75:1503:1399 83 chr2 1130 99 40M = 969 -201 CAAGAAGATATAACCATCCTACTAAATACATATGCACCTA &;;8;<<<;<<<<,6<<70<<7<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:42:28:552 163 chr2 1131 99 35M = 1294 198 AAGAAGATATAACCATCCTACTAAATACATATGCA <<<<<<<<<<<<<<<<<<<<<<<<;<;<3<:;9;8 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:61:631:567 147 chr2 1131 99 35M = 957 -209 AAGAAGATATAACCATCCTACTAAATACATATGCA <<7<<<<<<<<</<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:257:288:731 147 chr2 1131 99 35M = 939 -227 AAGAAGATATAACCATCCTACTAAATACATATGCA <<:<<7<<<<<;<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:214:950:32 83 chr2 1132 99 35M = 947 -220 AGAAGATATAACCATCCTACTAAATACATATGCAC =&==4======:;==6<==:=============== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:1:12:88:200 83 chr2 1133 99 35M = 968 -200 GAAGATATAACCATCCTACTAAATACATATGCACC 9<<;<<<;<;6;<;:<<<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:256:444:399 163 chr2 1133 99 35M = 1289 191 GAAGATATAACCATCCTACTAAATACATATGCACC <<<<<<<<<<<<<<<<<<<<<<<<<;;<<<-;<<8 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:174:753:617 99 chr2 1136 75 35M = 1299 198 GATATAACCATCCTACTAAATACATATGCACCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:115:226:443 99 chr2 1137 99 35M = 1314 212 ATATAACCATCCTACTAAATACATATGCACCTAAC <<<<<<<<<<<<<<<<;<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:26:1867:162 163 chr2 1137 70 35M = 1299 197 ATATAACCATCCTACTAAATACATATGCACCTAAC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78698 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:308:66:538 99 chr2 1138 99 35M = 1321 218 TATAACCATCCTACTAAATACATATGCACCTAACA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:229:543:583 147 chr2 1139 99 35M = 976 -198 ATAACCATCCTACTAAATACATATGCACCTAACAC </<;+5<855;<6<<<<;<<<<<<9<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:17:595:863 163 chr2 1139 89 35M = 1289 185 ATAACCATCCTACTAAATACACATGCACCTAACTC :<4:<<1:<<<9<+<+1<%<7&&9-71<17)7</4 MF:i:18 Aq:i:33 NM:i:2 UQ:i:19 H0:i:0 H1:i:1
--EAS51_62:7:248:17:435 147 chr2 1139 99 35M = 969 -205 ATAACCATCCTACTAAATACATATGCACCTAACAC <1<<88++<:<<:;<;<<<:<<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:35:186:412 99 chr2 1139 99 35M = 1306 202 ATAACCATCCTACTAAATACATATGCACCTAACAC <<<<<<<<4<<<<<:<<<<<<:<<<<<<<<<;;<: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:307:252:632 83 chr2 1142 99 35M = 998 -179 ACCATCCTGCTAAATACATATGCACCTAACACAAG <77<;,5<,9<<<<<<;<<<<<7<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS1_108:7:108:440:208 147 chr2 1142 99 35M = 975 -202 CCCATCCTACTAAATACATATGCACCTAACACAAG +35:486<<4<<<<<<<<<<<-<<<<<7<<)<<<- MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS1_95:7:74:866:49 83 chr2 1143 99 35M = 969 -209 CCAACCTACTAAATACATATGCACCTAACACAAGA :8<&<<<<7<<<<:<<<<<<8<5<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_61:2:66:757:918 83 chr2 1143 99 35M = 985 -193 CCATCCTACTAAATACATATGCACCTAACACAAGA <9<45;<<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:220:733:736 147 chr2 1143 99 35M = 959 -219 CCATCCTACTAAATACATATGCACCTAACACAAGA :;<77;<<9<<<<<9;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:175:289:351 99 chr2 1144 99 35M = 1319 210 CATCCTACTAAATACATATGCACCTAACACAAGAC <<<<<<<<<<;<<<<<<<<;<<<<<<<<<<<9<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:56:155:49 147 chr2 1145 99 35M = 970 -210 ATCCTACTAAATACATATGCACCTAACACAAGACT ;:5;;<5<<<<<<<<<<<<<<<<<<<<<<<<<<<= MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:299:336:613 99 chr2 1145 99 35M = 1293 183 ATCCTACTAAATACATATGCACCTAACACAAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:432:228 83 chr2 1145 99 35M = 967 -213 ATCCTACTAAATACATATGCACCTAACACAAGACT <76<<<:<<<<<<<;<:<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:93:312:331 83 chr2 1145 99 35M = 953 -227 ATCCTACTAAATACATATGCACCTAACACAAGACT <;;:;<6<<<<;<:<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:133:707:886 147 chr2 1146 99 35M = 978 -203 ACCTAATAAATACATATGCACCTAACACAAGACTA %5-2;&6<<<<<;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:9 H0:i:1 H1:i:0
--EAS51_62:3:50:312:219 163 chr2 1146 99 35M = 1288 177 TCCTACTAAATACATATGCACCTAACACAAGACTA <<<<<<<<<<<;<<<<<;<;<<<;<<<<<<;;;;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:82:670:302 147 chr2 1146 99 35M = 973 -208 TCCTACTAAATACATATGCACCTAACACAAGACTA %448<7<<<<<<7<<<<<&<<7<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:47:591:698 99 chr2 1146 99 35M = 1313 202 TCCTACTAAATACATATGCACCTAACACAAGACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:122:430:882 99 chr2 1147 99 35M = 1338 226 CCTACTAAATACATATGCACCTAACACAAGACTAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:46:1566:668 83 chr2 1148 99 35M = 959 -224 CTACTAAATACATATGCACCTAACACAAGACTACC 5<<:<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:92:411:955 147 chr2 1149 99 36M = 979 -206 TACTAAATACATATGCACCTAACACAAGACTACCCA 2<+<<<<9<<<<<<<;+<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:96:419:327 99 chr2 1149 99 35M = 1331 217 TACTAAATACATATGCACCTAACACAAGACTACCC <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;;9<9 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:20:1444:328 147 chr2 1149 99 35M = 993 -191 TACTAAATACATATGCACCTAACACAAGACTACCC 9<3<<==;=<===;=<=====<<===========< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:198:59:675 163 chr2 1150 99 35M = 1315 200 ACTAAATACATATGCACCTAACACAAGACTATCCT <.<<<<<<;<<<<<<<<<<<**<;<;2<;6;&*2& MF:i:18 Aq:i:45 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS54_61:7:114:506:971 83 chr2 1150 99 35M = 986 -199 ACTAAATACATATGCACCTAACACAAGACTACCCA ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:94:356:809 163 chr2 1151 99 35M = 1334 218 CTAAATACATATGCACCTAACACAAGACTACCCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:155:541:234 163 chr2 1151 99 35M = 1319 203 CTAAATACATATGCACCTAACACAAGACTACCCAG <<7<<<<<<<<<<<<<<<4<<<<<<<<<<<;;;08 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:272:328:400 83 chr2 1151 99 35M = 977 -209 CTAAATACATATGCACCTAACACAAGACTACCCAG 4;<<<<<7<;<<<-<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:283:186:707 163 chr2 1154 99 36M = 1321 203 AATACATATGCACCTAACACAAGACTACCCAGATTC <<<<<<<<<<<<<<<<<<<<<<;<<<<<;<;<<<<8 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:86:660:932 99 chr2 1154 99 35M = 1338 219 AATACATATGCACCTAACACAAGACTACCCAGATT ================================9:= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:264:705:89 147 chr2 1155 99 35M = 983 -207 AAACATATGCACCTAACACAAGACTACCCAGATTC <(<2<&<)<<<7<8<<<<<<<<<<.<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS114_32:4:5:396:292 83 chr2 1155 99 35M = 981 -209 ATACATATGCACCTAACACAAGACTACCCAGATTC <:<6<7<:<:;;;<<<;<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:178:342:866 163 chr2 1155 72 35M = 1311 191 ATACATATGCACCTAACACAAGACTACCCAGATTC ;<<<<<;<<<8<<;<;<3<8/<<<<6<<</<8;<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:155:809:543 163 chr2 1156 99 35M = 1352 231 TACATATGCACCTAACACAAGACTACCCAGATTCA <<<<<<<<<<<<<<<<7<;<<<<<<<<<<<1<;<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:119:880:781 99 chr2 1157 99 35M = 1312 190 ACATATGCACCTAACACAAGACTACCCAGATTCAT <<<<<<<<<<<<<<<<<<<<<<<<+<<<<7<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:283:963:234 147 chr2 1157 99 35M = 992 -200 ACATATGCACCTAACACAAGACTACCCAGATTCAT <5<;<;97;;:;<<7<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:28:745:352 99 chr2 1159 99 35M = 1329 205 ATATGCACCTAACACAAGACTACCCAGATTCATAA <<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:147:687:428 147 chr2 1159 99 35M = 998 -196 ATATGCACCTAACACAAGACTACCCAGATTCATAA ;1<''48;4)<<:<<<<;<<6;<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:101:809:776 99 chr2 1160 99 35M = 1326 201 TATGCACCTAACACAAGACTACCCAGATTCATAAA <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:35:538:1882 163 chr2 1160 98 35M = 1337 212 TATGCACCTAACACAAGACTACCCAGATTCATAAA ;);43.50;3;93;;4;3;;;9-7.;*;;966*75 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:41:34:211 83 chr2 1164 99 35M = 980 -219 CACCTAACACAAGACTACCCAGATTCATAAAACAA 7</::<<7<<<<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:2:1422:1820 83 chr2 1164 99 35M = 1004 -195 CACCTAACACAAGACTACCCAGATTCATAAAACAA *4617;;4;1;;79;/7&,4;9;;;7<;;<<<;<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:194:998:663 83 chr2 1165 99 35M = 1002 -198 ACCTAACACAAGACTACCCAGATTCATAAAACAAA ;</<<<7<<<<;<<8<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:10:975:766 83 chr2 1166 99 35M = 959 -242 AATAACACAAGACTACCCAGATTCATAAAACAAAT ++4<<+<+<<<<8<<22;<<<<<2<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:2 UQ:i:24 H0:i:1 H1:i:0
--EAS114_39:6:94:1273:1462 83 chr2 1166 99 35M = 995 -206 CCTAACACAAGACTACCCAGATTCATAAAACAAAT 8.<<<;<:<<<<;<<;;;<<<;<;<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:64:350:174 83 chr2 1166 99 35M = 1000 -201 CCTAACACAAGACTACCCAGATTCATAAAACAAAT 709<<;<;<<<<<<<;7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:166:84:766 83 chr2 1167 99 35M = 990 -212 ATAACACAAGACTACCCAGATTCATAAAACAAATA %8<=+<-<<<</<<<<8<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_108:2:85:580:481 163 chr2 1167 99 35M = 1359 227 CTAACACAAGACTACCCAGATTCATAAAACAAATA <<<<<<<<<<<<<:<<<<<<<<<<<<;<<<<6:<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:191:40:536 83 chr2 1167 66 35M = 977 -225 ATAAAAAAAGACTACCCAGATTCATAAAACAAATA +1<<,<&<<:<.;<7/7<<<<;.<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:27 H0:i:1 H1:i:0
--EAS218_1:2:40:1291:1045 147 chr2 1167 99 35M = 980 -222 CTAACACAAGACTACCCAGATTCATAAAACAAATA *<<<9<<<<<<:0<9<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:221:881:916 99 chr2 1168 96 35M = 1327 194 TAACACAAGACTACCCAGATTCATAAAACAAATAC <<;<<8<<;<<<<<<<;<<<<28<:<8<:;<;;;< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:35:392:2042 163 chr2 1168 99 35M = 1332 199 TAACACAAGACTACCCAGATTCATAAAACNAATAC ======;==========<<=======7=;!<7;;; MF:i:18 Aq:i:72 NM:i:1 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:192:714:341 163 chr2 1170 99 35M = 1346 211 ACACAAGACTACCCAGATTCATAAAACAAATACTA <<9<<<<<<<<<<<8<<<<<;<<;8<<<88;;;;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:189:876:833 163 chr2 1173 99 36M = 1349 212 CAAGACTACCCAGATTCATAAAACAAATACTACTAG <<<<<<<<<<<8<8<<<<<;<;;<<;<<<<<;<<<6 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:299:743:762 163 chr2 1173 99 36M = 1345 208 CAAGACTACCCAGATTCATAAAACAAATACTACTAG <<<;<<<<<<<<<:;<<<.<:<<<<<<<<<<;;;;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:107:252:533 83 chr2 1173 60 35M = 1025 -183 CAAGACTACCCAGATTCATAAAACAAATACTACTA 3<<<<+<<96<<<<<<;<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS1_97:5:154:952:558 147 chr2 1173 99 35M = 1007 -201 AAAGACTACCCAGATTCATAAAACAAATACTACTA %<<9;;<<;;;<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_63:4:184:659:377 147 chr2 1173 99 35M = 992 -216 CAAAACTACCCAGATTCATAAAACAAATACTACTA 1;<+<;<6;66<<;<<<<;;<<<8<<<<8<<;<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--B7_595:6:137:811:130 163 chr2 1175 99 35M = 1351 211 AGACTACCCAGATTCATAAAACAAATACTACTAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:124:367:72 163 chr2 1175 99 35M = 1377 237 AGACTACCCAGATTCATAAAACAAATACTACTAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:8:60:358:494 147 chr2 1179 44 35M = 979 -235 TACCCAGATTCATAAAACAAATACTACTAGACCTA 7<77;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:6 H1:i:36
--EAS114_30:7:319:11:255 163 chr2 1179 92 35M = 1337 193 TACCCAGATTCATAAAACAAATACTACTAGACCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<: MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:10
--B7_610:7:26:749:174 99 chr2 1183 78 35M = 1357 209 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <<<<<<<<<<<<<<<<<<<<<<;<9<8<<<9<;94 MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:6 H1:i:31
--EAS1_103:7:112:578:782 99 chr2 1183 89 35M = 1366 218 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:5 H1:i:25
--EAS1_105:1:234:185:359 83 chr2 1183 46 35M = 1029 -189 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:9
--EAS112_34:4:92:412:435 147 chr2 1184 89 35M = 1003 -216 AGATTCATAAAACAAATACTACTAGACCTAAGAGG <;<52:=,====:=========<============ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:24:105:1046 99 chr2 1184 99 35M = 1377 228 AGATTCATAAAACAAATACTACTAGACCTAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:4 H1:i:2
--EAS1_97:2:128:629:484 163 chr2 1185 96 35M = 1359 209 GATTCATAAAACAAATACTACTAGACCTAAGAGGG <<49<<<<<9<<<<99<<<<<<<<<<<<+<-)7)) MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:4 H1:i:45
--EAS219_FC30151:1:53:140:421 83 chr2 1185 99 35M = 1016 -204 GATTCATAAAACAAATACTACTAGACCTAAGAGGG <<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:99:557:427 163 chr2 1186 99 35M = 1342 191 ATTCATAAAACAAATACTACTAGACCTAAGAGGGA <<<<<<<<<<<<<<<<<<<<<<:<<<<+;<7:8:; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:253:175:31 147 chr2 1187 72 35M = 1008 -214 TTCATAAAACAAATACTACTAGACCTAAGAGGGAT ;+;<;<<<<<<<<9<<9<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:13:701:55 147 chr2 1187 99 36M = 1015 -208 TTCATAAAACAAATACTACTAGACCTAAGAGGGATG 0:+<7<;9<;<<<<<<<3<<<<<;;<<<:<<3<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:220:809:850 147 chr2 1187 60 35M = 986 -236 TTCATAAAACAAATACTACTAGACCTAAGAGGGAT 9+5<;*<<<2:0<<8:<*00<<<:<*<<<<<<<<& MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:30:599:589 147 chr2 1188 99 36M = 1003 -221 TCATAAAACAAATACTACTAGACCTAAGAGGGATGA 90<;<<<<<<<<+<<<;;<;<;<<<<<<<<6<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:35:118:589 83 chr2 1188 99 35M = 999 -224 TCATAAAACAAATACTACTAGACCTAAGAGGGATG 67<<<<<;<<<<<<<:7<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:37:604:389 147 chr2 1188 99 35M = 998 -225 TCATAAAACAAATACTACTAGACCTAAGAGGGATG 00;:;========9========<9========<== MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:168:61:867 83 chr2 1188 99 35M = 997 -226 TCATAAAACAAATACTACTAGACCTAAGAGGGATG ;7<<<<<<<<<<<<<7<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:197:399:319 83 chr2 1189 99 35M = 1012 -212 CAAAAAACAAATACTACTAGACCTAAGAGGGATGA &<+==<<5<<<8<89;;<<<<<<8<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS114_32:5:267:170:250 163 chr2 1189 99 35M = 1377 223 CATAAAACAAATACTACTAGACCTAAGAGGGATGA <<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:174:157:573 83 chr2 1191 99 35M = 1012 -214 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 8<<<<4<<<<<<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:39:956:676 83 chr2 1191 99 35M = 1023 -203 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 899985;;<;:9;;:9<;:9:5;<;;;<;<;<<<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:37:763:1437 83 chr2 1191 99 35M = 994 -232 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 79979;<;<;;;<;;;;;;6:;<:;<:8;<<<<;< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:50:513:882 83 chr2 1192 99 35M = 1031 -196 AAAACAAATACTACTAGACCTAAGAGGGATGAGAA <<<<:<<<<<:<<:<<<<::<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:15:1763:1143 147 chr2 1193 99 35M = 1023 -205 AAACAAATACTACTAGACCTAAGAGGGATGAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:571:366 83 chr2 1194 99 35M = 1002 -227 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<;<<<<<:<<<;<<<;;;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:166:532:438 99 chr2 1194 99 35M = 1386 227 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<<<<<<<<<<<<<<;<<;<<;<<<<;<;:;;<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:309:109:987 83 chr2 1194 99 35M = 1024 -205 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<<<<<:<<;<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:171:527:247 83 chr2 1194 67 35M = 1027 -202 AACAAATGCTACTAGACCTAAGAGGGATGAGAAAT <547*9)&&7+;+<<7<<<;<<<;3<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:8:139:727:808 163 chr2 1195 99 35M = 1363 203 ACAAATACTACTAGACCTAAGAGGGATGAGAAATT <<<<<<<<<<<<<:<;<<<<<<<<9;<;9<6;<<9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:202:275:776 83 chr2 1196 99 36M = 1002 -230 CAAATACTACTAGACCTAAGAGGGATGAGAAATTAC ;<<<<;;<<<<<<<;<<<<<<<;<<<<<<<<<<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:12:484:836 163 chr2 1197 99 35M = 1372 210 AAATACTACTAGACCTAAGAGGGATGAGAAATTAC <<<<<<<<<<<<<<<<<7<:<<<<<<9<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:21:553:57 99 chr2 1197 99 35M = 1358 196 AAATACTACTAGACCTAAGAGGGATGAGAAATTAC <<<<<<<<<<<;;<<<;<<;<<;<<<;;9<;<;<9 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:4:939:2021 83 chr2 1197 99 40M = 1031 -206 AAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAAT ;;;;:8;<5:<<<7/<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:194:378:230 83 chr2 1198 99 35M = 1022 -211 AATACTACTAGACCTAAGAGGGATGAGAAATTACC <<;<8<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:68:242:834 163 chr2 1200 99 36M = 1386 222 TACTACTAGACCTAAGAGGGATGAGAAATTACCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:2:22:471:500 163 chr2 1200 99 35M = 1365 200 TACTACTAGACCTAAGAGGGATGAGAAATTACCTA =======<=<====:<2===9==;=;9;;=;;;;5 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:139:989:144 163 chr2 1201 99 35M = 1387 221 ACTACTAGACCTAAGAGGGATGAGAAATTACCTAA <<<<<<<<<<<<6<<<<<<<<<;<<<<<<<;;<;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:188:20:592 83 chr2 1202 95 35M = 1032 -205 CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT 2<<7;<<<<,;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:189:863:213 83 chr2 1202 99 35M = 1039 -198 CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT 7:<7<<<<44;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:62:561:531 83 chr2 1203 99 35M = 1036 -202 TACTAGACCTAAGAGGGATGAGAAATTACCTAATT <<7<<<<:<8<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:70:1349:1788 83 chr2 1203 99 35M = 1043 -195 TACTAGACCTAAGAGGGATGAGAAATTACCTAATT <7;<<8<74;;<1<<71<;7<;;<;<7<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:197:914:256 147 chr2 1204 97 35M = 1049 -190 ACTAGACCTAAGAGGGATGAGAAATTACCTAATTG <5;<8<5/;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:35:896:1588 83 chr2 1205 91 35M = 1032 -208 CTAGACCTAAGAGGGATGAGAAATTACCTAATTGG 77999:.:<<;<;;;<<;<;<<<<<;<;;<<<<;; MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:43:47:279 163 chr2 1206 99 35M = 1405 234 TAGACCTAAGAGGGATGAGAAGTTACCTAATTGGT <<<<<<<<<<<<<;:<-<<<<<<<<<<<<:;;+7; MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:2:211:954:174 99 chr2 1207 99 35M = 1393 221 AGACCTAAGAGGGATGAGAAATTACCTAATTGGTA ===============================777= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:5:1219:137 99 chr2 1209 99 35M = 1384 210 ACCTAAGAGGGATGAGAAATTACATAATTGGTACA <<<<<<<<<<<<<<<<<<<<<<<(<<<<<<:9<;= MF:i:18 Aq:i:45 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS56_57:7:33:954:724 83 chr2 1210 97 35M = 1049 -196 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA ;<;<;<<-7;<<;<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:176:402:458 163 chr2 1210 99 36M = 1376 202 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;;<; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:81:687:1379 163 chr2 1210 99 35M = 1366 191 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:45:239:851 83 chr2 1211 61 35M = 1023 -223 CTAAGAGGGATGAGAAATTACCTAATTGGTACAAT *2*0<<<<<<<<<<<<<<<<9<<3<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_65:5:312:985:871 163 chr2 1212 99 35M = 1369 192 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<9<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:38:557:1441 163 chr2 1212 99 35M = 1381 204 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:88:465:1877 147 chr2 1212 99 35M = 1055 -192 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<:<<<<<<<<:<<<<<<<<<<<<7;<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:149:123:265 163 chr2 1213 99 35M = 1395 217 AAGAGGGATGAGAAATTACCTAATTGGTACAATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:47:1791:444 83 chr2 1213 74 35M = 1041 -207 AAGAGGGATGAGAAATTACCTAATTGGTACAATGT 978879;:;;<:;;<<;:<9<<<<;6;;;;<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--EAS51_62:3:68:996:104 147 chr2 1214 70 35M = 1041 -208 AGAGGGATGAGAAATTACCTAATTGGTACAATGTA <1<8<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_593:2:68:140:542 99 chr2 1217 95 36M = 1398 217 GGGATGAGAAATTACCTAATTGGTACAATGTACAAT <<<8;<<;<<<<<;<<;<<<<<8;<-<8<82;;;-8 MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--EAS188_7:7:67:719:786 163 chr2 1218 43 35M = 1383 200 GGATGAGAAATTACCTAATTGGTACACTGTACAAT ;;<<<<<<&<<:13&<1<<<:<<<)/&/))<'6-< MF:i:18 Aq:i:13 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_108:5:321:712:224 83 chr2 1220 58 35M = 1051 -204 ATGAGAAATTACCTAATTGGTACAATGTACAATAT =;===7;===7=========;=:;=========;= MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_26:4:100:238:596 163 chr2 1220 56 35M = 1403 218 ATGAGAAATTACCTAATTGGTACAATGTACAATAT ======9=====;=======5===;====/=;=== MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:13
--EAS51_62:7:312:236:655 163 chr2 1222 99 35M = 1412 225 GAGAAATTACCTAATTGGTACAATGTACAATATTC <<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS56_63:6:102:816:260 147 chr2 1225 99 35M = 1049 -211 AAATTACCTAATTGGTACAATGTACAATATTCTGA <<<<<<::<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:34:144:868 163 chr2 1226 76 35M = 1412 221 AATTACCTAATTGGTACAATGTACAATATTCTGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:215:516:299 99 chr2 1226 99 35M = 1406 215 AATTACCTAATTGGTACAATGTACAATATTCTGAT <<<<<<;<<<<;;;;<;;<<<<;<<9<;<<1;7/; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:81:12:1231 163 chr2 1228 99 35M = 1391 198 TTACCTAATTGGTACAATGTACAATATTCTGATGA <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<4<<6 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:30:644:942 147 chr2 1229 83 35M = 1045 -219 TACCTAATTGGTACAATGTACAATATTCTGATGAT 85%+;<<9;<9<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:41:519:609 163 chr2 1229 99 35M = 1401 207 TACCTAATTGGTACAATGGACAATATTCTGATGAT 1<<<<<<<<<<<<<<<4<-:<+6<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--B7_591:7:116:814:89 99 chr2 1231 99 36M = 1408 213 CCTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<<<<<<<<<<<<<<<<<<:<<<<;<<;<<66< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:169:714:644 163 chr2 1231 99 35M = 1437 241 CCTAATTGGTACAATGTACAATATTCTGATGATGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:73:420:812 99 chr2 1232 66 35M = 1414 217 CTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<1<<<<::1<7<:<96<9<:<<:4<70:11< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:17:1179:393 99 chr2 1232 99 35M = 1412 215 CTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<:4< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:118:829:36 99 chr2 1233 99 35M = 1417 219 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<<<<<<<:<2<<<<<<:<<<<<<<<<<<<71;< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:125:875:553 147 chr2 1233 99 36M = 1075 -194 TAATTGGTACAATGTACAATATTCTGATGATGGTTA -;<;:;<<;6<<<<<<6<;<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_32:4:7:282:424 99 chr2 1233 83 35M = 1397 199 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<3<<<9<<<<3<<<<<9<<<9,<;;9;&*;3,. MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:447:488 163 chr2 1233 99 35M = 1412 214 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:66:891:294 83 chr2 1233 99 35M = 1057 -211 TAATTGGTACAATGTACAATATTCTGATGATGGTT :<<5;;<<<4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:8:72:44:435 99 chr2 1235 76 35M = 1392 192 ATTGGTACAATGTACAATATTCTGATGATGGTTAA <<<<<<<<<<<2;<;<<;<<<;<<8<82<;22<8& MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS139_19:4:18:1335:1514 147 chr2 1235 99 40M = 1063 -212 ATTGGTACAATGTACAATATTCTGATGATGGTTACACTAA ::/::<<;<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:72:1288:1211 147 chr2 1235 84 35M = 1052 -218 ATTGGTACAATGTACAATATTCTGATGATGGTTAC <);<:<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:200:263:280 83 chr2 1236 99 35M = 1078 -193 TTGGTACAATGTACAATATTCTGATGATGGTTACA )<<<8<:<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:68:440:424 147 chr2 1237 99 35M = 1060 -212 TGGTACAATGTACAATATTCTGATGATGGTTACAC <<2<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:255:441:47 147 chr2 1237 99 35M = 1072 -200 TGGTACAATGTACAATATTCTGATGATGGTTACAC ;;7<;:<<<<<<<<<<;<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:174:557:872 163 chr2 1237 99 35M = 1423 221 TGGTACAATGTACAATATTCTGATGATGGTTACAC <<<<<<<<<<<<<:<<<<<<<7<<;<<6:<<2117 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_64:3:255:45:399 163 chr2 1238 99 35M = 1404 201 GGTACAATGTACAATATTCTGATGATGGTTACACT <<3<8<<8<0<<;<<<0<<<</+8<611<<;71;7 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:264:157:150 147 chr2 1238 30 35M = 1054 -219 GGAAAAATGGACAAGATTCTGATGAGGGTTACACT .3%:+<<*;*<2<<1<1*,*<<7<<+<<<&<<<<< MF:i:130 Aq:i:30 NM:i:3 UQ:i:35 H0:i:0 H1:i:0
--EAS139_19:5:95:944:247 99 chr2 1238 99 40M = 1424 226 GGTACAATGTACAATATTCTGATGATGGTTACACTAAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:;::: MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:301:161:195 147 chr2 1239 75 35M = 1076 -198 GTACAATGTACAATATTCTGATGATGGTTACACTA ''6%6<6<<<4<<<<<<<<)<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:141:7:963 83 chr2 1240 85 36M = 1061 -215 TACAATGTACAATATTCTGATGATGGTTACACTAAA 95+<<9<<5<;;<<;<<;'<<<<<;<<<7<9<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:6:76:282:1668 99 chr2 1240 99 35M = 1401 196 TACAATGTACAATATTCTGATGATGGTTACACTAA <<<<<<<<<<<<<<<<<<;<<;<<<<<<;<;<<<8 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:64:199:1288 147 chr2 1240 77 35M = 1079 -196 TACAATGTACAATATTCTGATGATGGTTACACTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:49:911:980 163 chr2 1241 99 35M = 1434 228 ACAATGTACAATATTCTGATGATGGTTACACTAAA <<<<<<<<<<;<<<<<<<8<<<<;<;<<88-<;33 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:66:1046:167 147 chr2 1241 99 35M = 1060 -216 ACAATGTACAATATTCTGATGATGGTTACACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:303:542:924 83 chr2 1242 76 35M = 1083 -194 CAATGTACAATATTCTGATGATGGTTACACTAAAA +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:2:79:554:354 147 chr2 1242 63 35M = 1082 -195 CAATGTACAATATTCTGATGATGGTTACACTAAAA 98988;7;;;;:;;;;;;;;;;:;;;:;;;;;9;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:248:122:558 163 chr2 1243 99 35M = 1436 228 AATGTACAATATTCTGATGATGGTTACACTAAAAG <<<<:<<<<<<<<<<<<<;<<<<:<6:4<<::6:6 MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:109:22:383 83 chr2 1244 99 35M = 1071 -208 ATGTACAATATTCTGATGATGGTTACACTAAAAGC <;9;<8<<<<<<;<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:43:1229:1855 83 chr2 1244 99 35M = 1074 -205 ATGTACAATATTCTGATGATGGTTACACTAAAAGC 8<<<<;8<<<;;5<<28<<<<<<<<<<<<7;;<<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:74:656:272 83 chr2 1245 99 35M = 1088 -192 TGTACAATATTCTGATGATGGTTACACTAAAAGCC ;;;</<<<<<5;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_65:7:118:775:467 83 chr2 1245 99 35M = 1075 -205 TGTACAATATTCTGATGATGGTTACACTAAAAGCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_593:7:15:244:876 99 chr2 1246 43 36M = 1440 230 GTACAATATTCTGATGATGGTTACACTAAAAGCCCA <<<<<<;<<<<<<<<;<<;;;<<<<<:<<<9;<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:63:28:1549 163 chr2 1247 77 35M = 1439 227 TACAATATTCTGATGATGGTTACACTAAAAGCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7;<<<<7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:310:800:761 83 chr2 1249 99 35M = 1055 -229 CAATATTCTGATGATGGTTACACTAAAAGCCCATA 1<<:<:<:<<<<:<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:978:1296 83 chr2 1249 90 35M = 1104 -180 CAATATTCTGATGATGGTTACACTAAAAGCCCATA 77177;9;2:;;:;;(;;9;<;;;;:;;;:7;<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:8:26:242:35 147 chr2 1251 99 35M = 1084 -202 ATATTTTGATGATGGTTACACTAAAAGCCCATACT <<<77!!7<;<<<;;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:0 H0:i:1 H1:i:8
--EAS114_45:7:6:758:988 83 chr2 1253 99 35M = 1087 -201 ATTCTGATGATGGTTACACTAAAAGCCCATACTTT 3-7*73;;399:9;9;7<-(<;;<;;:;9::;;7; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:315:412:921 99 chr2 1254 99 35M = 1424 205 TTCTGATGATGGTTACACTACAAGCCCATACTGTA <;<;<<<<<<<;<<<<<<<<8<<<;<<:<<;;+<8 MF:i:18 Aq:i:45 NM:i:2 UQ:i:33 H0:i:0 H1:i:1
--EAS114_30:3:215:840:760 163 chr2 1256 99 35M = 1416 195 CTGATGATGGTTACACTAAAAGCCCATACTTTCCT <<<<<<<<<<<<<<<;<<<88<+<<:<;3585,+: MF:i:18 Aq:i:66 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS1_95:5:284:212:932 147 chr2 1257 10 35M = 1063 -229 TGATGATGGTTACGCTAAAAGTCCATGCTTTACTG 82%<8:<-:<<:**:<-<<8<)/2/<:/<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:42 H0:i:0 H1:i:0
--EAS1_97:4:290:121:79 163 chr2 1257 99 35M = 1420 198 TGATGATGGTTACACTAAAAGCCCATACTTTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<7;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:88:54:900 83 chr2 1257 68 35M = 1069 -223 TGATGATGGTTACACTAAAAGCCCATACTTCACTG ============;=================;9=== MF:i:18 Aq:i:19 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS188_7:3:100:735:530 83 chr2 1257 99 35M = 1058 -234 TGATGATGGTTACACTAAAAGCCCATACTTTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:32:562:1695 147 chr2 1258 76 35M = 1085 -208 GATGATGGTTACACTAAAAGCCCATACTTTACTGC :5:::<88/<:<<<<<<<<<7<9<<&<959<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:173:627:465 163 chr2 1260 99 36M = 1444 220 TGATGGTTACACTAAAAGCCCATACTTTACTGCTAC <<<<<<<<<<<<<<<<<<<<<<<;<<<<<2;;4;;7 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_95:1:77:589:741 83 chr2 1263 99 35M = 1078 -220 TGGTTACACTAAAAGCCCATACTTTACTGCTACTC 8=;;==606;========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:27:228:31 147 chr2 1264 99 35M = 1082 -217 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA 99;;;<<<<<<:<<;<;<<;<<<<;<<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:54:695:952 147 chr2 1264 99 35M = 1076 -223 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA 277%<9<4)<<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:300:622:86 83 chr2 1264 99 35M = 1102 -197 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA <:<<<:<6;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:71:62:254 163 chr2 1264 99 35M = 1438 209 GGTTACACTAAAAGCCCATACTTTCCTGCTACTCA <<<<<<7<<<<7<<<<<3<<<<<<&<<.<<::<:% MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS114_28:1:168:609:646 99 chr2 1264 99 36M = 1436 208 GGTTACACTAAAAGCCCATACTTTACTGCTACTCAA <<<<<<<<<<<;<<<<<:<8<<<<;<<<<<4<<<9< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:84:92:1246 163 chr2 1265 99 35M = 1437 207 GTTACACTAAAAGCCCATACTTTACTGCTACTCAA <<<<<<<<<<<<<<<<5<:<<5<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:310:193:629 83 chr2 1267 99 36M = 1103 -200 TACACTAAAAGCCCATACTTTACTGCTACTCAATAT 9<9<6;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:111:379:700 73 chr2 1268 0 35M = 1268 0 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT 7<<:<<<<02<<6&<</<<</+9/98*<966/3/< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:111:379:700 133 chr2 1268 0 * = 1268 0 CGCACTGGCAATATTTGTGTGTTTACTTTTTTGCA :1+&;;6;:;918;);;):,19.9:).):::.&3( MF:i:192
--EAS114_30:6:137:741:866 163 chr2 1268 99 35M = 1429 196 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT <<<<8<<;;;<<<<;<<<;;;<;4<<8;<<;%<8; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:23:1126:1886 147 chr2 1268 99 35M = 1094 -209 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT 5*.:.5<<::<<<<<<<<:5<<<<<<<<<<:2<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:21:423:169 99 chr2 1270 99 35M = 1468 233 ACTAAAAGCCCATACTTTACTGCTACTCAATATAT <<<<<;<<<<<<;<<<<<;;<<<<<<<<9+:5<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:110:984:98 147 chr2 1270 99 36M = 1092 -214 ACTAAAACCCCATACTTTACTGCTACTCAATATATC :81<<<<+;;8<+<8<<<<<;<<<8;<<<<<<<<8; MF:i:18 Aq:i:70 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS219_FC30151:5:54:1351:910 99 chr2 1270 99 35M = 1448 213 ACTAAAAGCCCATACTTTACTGCTACTCAATATAT <<<<<<8<<<<<<<<<<<<<<<<<<<<<<18<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:237:855:581 147 chr2 1271 87 35M = 1105 -201 CTAAACGCCCATACTTTACTGCTACTCAATATATC /+<<<&)2;66;/;;+<;;3133<3<3;9;<999< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_59:8:80:542:549 163 chr2 1271 99 35M = 1443 207 CTAAAAGCCCATACTTTACTGCTACTCAATATATC <<<<<<<<;<<<<<<<<:<<<<-<;;<;7<;3;9; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:7:1347:375 163 chr2 1271 99 35M = 1436 200 CTAAAAGCCCATACTTTACTGCTACTCAATATATC ;;;;;;;;;;;;;;;;;;;;9;;;8;;;;;97777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:191:540:493 99 chr2 1273 99 35M = 1432 194 AAAAGCCCATACTTTACTGCTACTCAATATATCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:324:472:791 147 chr2 1274 89 35M = 1110 -199 AAAGCCAATACTTTACTGCTACTCAATATATCCAT <<.)5*&;;11<<<,5<33:-<<6<<<<:<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS220_1:8:83:1456:1854 83 chr2 1275 99 35M = 1117 -193 AAGCCCATACTTTACTGCTACTCAATATATCCATG <<67<:<8<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:290:247:509 163 chr2 1276 99 35M = 1450 209 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<<<<<<<<<4<<<<<<92<;;;<;96;19 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:90:629:652 99 chr2 1276 99 35M = 1456 215 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<<<<<<<<<<<<<<<<<:<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:39:1671:1928 163 chr2 1276 99 35M = 1453 212 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<;<<<<;<<<<<4<<<;3<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:128:584:952 83 chr2 1277 99 35M = 1101 -211 GCCCATACTTTACTGCTACTCAATATATCCATGTA 7<;9;0:<<<:<<:<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:28:979:519 163 chr2 1278 99 35M = 1439 196 CCCATACTTTACTGCTACTCAATATATCCATGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:219:40:833 83 chr2 1278 99 35M = 1094 -219 CCCATACTTTACTGCTACTCAATATATCCATGTAA <<*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:289:207:323 163 chr2 1279 99 35M = 1462 218 CCATACTTTACTGCTACTCAATATATCCATGTAAC <<<:<<<<<:<<<<<<<<<<;<<899<<13)939; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:45:758:616 163 chr2 1280 99 35M = 1473 228 CATACTTTACTGCTACTCAATATATCCATGTAACA <<<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<;;< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:42:804:114 163 chr2 1281 99 35M = 1452 206 ATACTTTACTGCTACTCAATATATCCATGTAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<:<:<;;<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:61:1885:163 83 chr2 1281 99 40M = 1128 -193 ATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG ;:;;;;<<8<<:<<:<;<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:282:962:46 99 chr2 1282 99 35M = 1437 190 TACTTTACTGCTACTCAATATATCCATGTAACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:143:620:158 83 chr2 1283 99 35M = 1107 -211 ACTTTACTGCTACTCAATATATCCATGTAACAAAT <4;<;<;<;6<<7<;<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:50:312:219 83 chr2 1288 99 35M = 1146 -177 ACTGCTACTCAATATATCCATGTAACAAATCTGCG <,;83:<::6<<<<<<<;:<;<<<<;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:256:444:399 83 chr2 1289 99 35M = 1133 -191 CTGCTACTCAATATATCCATGTAACAAATCTGCGC ;+549<:<.<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:17:595:863 83 chr2 1289 89 35M = 1139 -185 AAGCTACTCAATATATCCATGTAACAAATCTGCGC ))55))+2&<<,:5<,0657<<<<:<:<:<<<<<< MF:i:18 Aq:i:33 NM:i:2 UQ:i:16 H0:i:1 H1:i:0
--EAS1_105:6:23:885:274 147 chr2 1289 99 35M = 1089 -235 CTACTACTCAATATATCCATGTAACAAATCTGCGC 2+*27==;;==<<.;:<=<=<============== MF:i:18 Aq:i:51 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_61:8:4:173:814 83 chr2 1289 99 35M = 1111 -213 CTGCTACTCAATATATCCATGTAACAAATCTGCGC <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:263:557:988 147 chr2 1289 84 35M = 1108 -216 CTGCTACTCAATATATCCATGTAACAAATCTGCGC 1-41:<15+<<<<<<599<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:2:326:153:231 163 chr2 1290 43 35M = 1477 222 TGCTACTCAATATATCCATGTAACAAATCTGCGCT <<<<<<<<<9<<<<<<<<<,<<<<<<8<<8.;.;4 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:98:862:154 83 chr2 1290 99 35M = 1116 -209 TGCTACTCAATATATCCATGTAACAAATCTGCGCT 856:;7<:<<9<<<9<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:6:529:366 147 chr2 1291 99 35M = 1103 -223 GCTACTCAATATATCCATGTAACAAATCTGCGCTT 9;8;8<:<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:299:336:613 147 chr2 1293 99 35M = 1145 -183 TACTCAATATATCCATGTAACAAATCTGCGCTTGT 1;4(+<<5<4<1<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_597:2:42:28:552 83 chr2 1294 99 35M = 1131 -198 ACTCAATATATCCATGTAACAAATCTGCGCTTGTA </8:<<:<<<;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_39:3:55:464:146 147 chr2 1295 99 35M = 1114 -216 CTCAATATATCCATGTAACAAATCTGCGCTTGTAC ;(;;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_67:6:109:953:668 99 chr2 1297 99 35M = 1485 223 CAATATATCCATGTAACAAATCTGCGCTTGTACTT ;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<8<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:1:82:946:392 163 chr2 1297 99 40M = 1493 236 CAATATATCCATGTAACAAATCTGCGCTTGTACTTCAAAA <<<<<<<<<<<<<<<<<<<<<<<<<8<<<8<<8<<:4488 MF:i:18 Aq:i:74 NM:i:1 UQ:i:19 H0:i:1 H1:i:0
--EAS114_28:3:308:509:948 147 chr2 1298 99 36M = 1123 -211 AATATATCCATGTAACAAATCTGCGCTTGTACTTCT ;;+;;;.8<<;;;<<<<<<<<<<<<<8<<<<<;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:174:753:617 147 chr2 1299 75 35M = 1136 -198 ATATATCCATGTAACAAATCTGCGCTTGTACTTCT <;<;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:26:1867:162 83 chr2 1299 70 35M = 1137 -197 ATATATCCATGTAACAAATCTGCGCTTGTACTTCT 97999:;<<9;;<:<<;;;<;;<<<<<<<;;<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:162:257:203 83 chr2 1301 99 35M = 1114 -222 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA <;<;:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:62:841:1994 121 chr2 1301 70 35M = 1301 0 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA 87878;;6:;;:<<<<:<:;;;<;<<<;<;;<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:62:841:1994 181 chr2 1301 0 * = 1301 0 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS139_19:7:44:1807:833 99 chr2 1301 99 40M = 1449 188 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<<<<<<<<<<<<<<<<<<;<;<<<;<<9<<<<<89;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:280:607:113 163 chr2 1303 99 35M = 1468 200 ATCCATGTAACAAATCTGCGCTTGTACTTCTAAAT ===================;===;=====<=7=9: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:260:147:818 163 chr2 1303 82 35M = 1497 229 ATCCATGTAACAAATCTGCGCTTTTACTTCTAAAT <<<<<<3<<<<<;<<<<)<1<<<&<7<<<;<4/9< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_71:7:194:867:616 99 chr2 1303 99 34M = 1481 213 ATCCATGTAACAAATCTGCGCTTGTACTTCTATT <8<<<<<<<<<<<8<<4<<<<<<8<<3<<5<&(+ MF:i:18 Aq:i:67 NM:i:2 UQ:i:23 H0:i:1 H1:i:0
--EAS139_19:7:85:262:751 83 chr2 1305 99 40M = 1105 -240 CCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAC 22;99;<<8<<<<<<<;<;<<<<<;<<;<<<<<<<<<<<+ MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_81:6:35:186:412 147 chr2 1306 99 35M = 1139 -202 CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<4:6<;<&<:4<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:1528:799 147 chr2 1306 96 35M = 1109 -232 CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:124:978:501 163 chr2 1307 99 36M = 1499 228 ATGTAACAAATCTGCGCTTGTACTTCTAAATCTATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:88:866:774 163 chr2 1307 99 35M = 1478 206 ATGTAACAAATCTGCTCTTGTACTTCTAAATCTAT <<<;<<<<<;<<<<<<<<<<<<<<<<<68<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:6:4:1131:104 163 chr2 1307 99 35M = 1487 215 ATGTAACAAATCTGCGCTTGTACTTCTAAATCTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:178:342:866 83 chr2 1311 72 35M = 1155 -191 AACAAATCTGCGCTTGTACTTCTAAATCTATAAAA <<9<<<&;;<<<<77<;<<<5;:<<<:<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:119:880:781 147 chr2 1312 99 35M = 1157 -190 ACAAATCTGCGCTTGTACTTCTAAATCTATAACAA ;8<<;<<<<:<84<<<<:<<<<<<<<<<<<<5<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_591:2:46:220:58 99 chr2 1313 99 36M = 1483 206 CAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<:<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:47:591:698 147 chr2 1313 99 35M = 1146 -202 CAAATCTGCGCTTGTACTTCTAAATCTATAACAAA 7;;;;:<<:<:<<<<<7<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:1:115:226:443 147 chr2 1314 99 35M = 1137 -212 AAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA <<;;<;<<<<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:198:59:675 83 chr2 1315 99 35M = 1150 -200 AATCTGCGCTTGTACTTCTAAATCTATAACAAAAT <<<<<4<4<:<<<;7<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_3:2:76:1729:813 163 chr2 1317 99 35M = 1506 224 TCTGCGCTTGTACTTCTAAATCTATAAAAAAATTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:147:360:141 99 chr2 1319 47 35M = 1501 218 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA <<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<7 MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:7:155:530:532 83 chr2 1319 99 35M = 1128 -226 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA :<<<><<8<<<<<><<<<<><<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_62:4:308:614:911 99 chr2 1319 90 35M = 1493 209 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<8< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_65:3:155:541:234 83 chr2 1319 99 35M = 1151 -203 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 78;<7<<<<<<<<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:175:289:351 147 chr2 1319 99 35M = 1144 -210 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 9;;:+<<<<<;<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:283:186:707 83 chr2 1321 99 36M = 1154 -203 CGCTTGTACTTCTAAATCTATAACAAAATTAAAATT 889;<7;<7<<7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:3:308:66:538 147 chr2 1321 99 35M = 1138 -218 CGCTTGTACTTCTAAATCTATAACAAAATTAAAAT 996999;<9;<:<<<<<:<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:5:11:555:330 163 chr2 1321 99 35M = 1492 206 CGCTTGTACTTCTAAATCTATAAAAAAATTAAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<4<;< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:84:411:336 73 chr2 1322 75 35M * 0 0 GCTTGTACTTCTAAATCTATAAAAAAATTAAAATT <<<;<<<;<<<<<<<<<<<<:<<;<<<<<<;8<;< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:52:1278:1478 163 chr2 1322 47 35M = 1513 226 GCTTGTACTTCTAAATCTATAACAAAATTAAAATT <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<9<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_53:3:101:809:776 147 chr2 1326 99 35M = 1160 -201 GTACTTCTAAATCTATAAAAAAATTAAAATTTAAC <<<-<;7;<<<<:;<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:221:881:916 147 chr2 1327 96 35M = 1168 -194 TAATTCTAAATCTAGAACAAAATTAAAATTTAACA 44%-4(5<;9/,:<68:1<:8<:<<84;<<<<<;< MF:i:18 Aq:i:24 NM:i:3 UQ:i:41 H0:i:0 H1:i:0
--EAS1_105:1:28:745:352 147 chr2 1329 99 35M = 1159 -205 CTTCTAAATCTATAACAAAATTAAAATTTAACAAA 4;;*;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_45:2:23:1754:796 99 chr2 1329 99 35M = 1488 194 CTTCTAAATCTATAAAAAAATTAAAATTTAACAAA ;<<;<;<;<;<;<<;;;;;<<<<;;<<<<<97999 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:96:419:327 147 chr2 1331 99 35M = 1149 -217 TCTAAATCTATAACAAAATTAAAATTTAACAAAAG ;1<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_97:4:274:287:423 163 chr2 1332 75 35M = 1515 218 CTAAATCTATAAAAAAATTAAAATTTAACAAAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:35:392:2042 83 chr2 1332 99 35M = 1168 -199 ATAAATCTATAAAAAAATTAAAATTTAACAAAAGT +<<<<</<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:2:94:356:809 83 chr2 1334 99 35M = 1151 -218 AAATCTATAACAAAATTAAAATTTAACAAAAGTAA <<<<3<<<<;;<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS114_30:7:319:11:255 83 chr2 1337 92 35M = 1179 -193 TCTATAAAAAAATTAAAATTTAACAAAAGTAAATA ;8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:35:538:1882 83 chr2 1337 98 35M = 1160 -212 TCTATAACAAAATTAAAATTTAACAAAAGTAAATA 73797;;3<;;<6;;<<<;8:;:;<;:<:;<<;;; MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS51_66:1:64:182:741 153 chr2 1338 10 35M * 0 0 AAAAAAACAAATTAAACTCTAACAAAAGTAAATAA (+;1&(9*%0<*(*&<*5,/+<,&<&<<6<<<<<< MF:i:32 Aq:i:10 NM:i:6 UQ:i:63 H0:i:0 H1:i:0
--EAS54_61:4:86:660:932 147 chr2 1338 99 35M = 1154 -219 ATATAAAAAAATTAAAATTTAACAAAAGTAAATAA &<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_53:8:122:430:882 147 chr2 1338 99 35M = 1147 -226 CTATAAAAAAATTAAAATTTAACAAAAGTAAATAA 0<<:<<<<<<<:3<<<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:99:557:427 83 chr2 1342 99 35M = 1186 -191 AACAAAATTAAAATTTAACAAAAGTAAATAAAACA <<-<<<<9<<<<<:<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--B7_593:5:299:743:762 83 chr2 1345 99 36M = 1173 -208 AAAATTAAAATTTAACAAAAGTAAATAAAACACATA ;<<<1<<<<<+<;<;7<<;<<<<<<<<<;<<;;<<7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:303:428:326 99 chr2 1345 74 35M = 1515 205 AAAATTAAAATTTAACAAAAGTAAATAAAACACAT <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:192:714:341 83 chr2 1346 99 35M = 1170 -211 AAATTAAAATTTAACAAAAGTAAATAAAACACATA <<<3;<<<<9:<<</<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:189:876:833 83 chr2 1349 99 36M = 1173 -212 TTAAAATTTAACAAAAGTAAATAAAACACATAGCTA 7;<<<<:;;<</<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:37:79:581 163 chr2 1349 68 35M = 1533 219 TTAAAATTTAAAAAAAGTAAATAAAACACATAGCT <>4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1> MF:i:18 Aq:i:27 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_19:2:82:154:1333 99 chr2 1349 77 40M = 1511 202 TTAAAATTTAACAAAAGTAAATAAAACACACAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;:;: MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS188_7:1:290:286:763 99 chr2 1349 75 35M = 1515 201 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<8<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:3:248:1491 73 chr2 1349 99 35M * 0 0 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8:< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:6:1064:1805 99 chr2 1350 99 35M = 1502 187 TAAAATTTAACAAAAGTAAATAAAACACATAGCTA <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:137:811:130 83 chr2 1351 99 35M = 1175 -211 AAAATTTAACAAAAGTAAATAAAACACATAGCTAA <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:155:809:543 83 chr2 1352 99 35M = 1156 -231 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<+0<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:41:468:459 99 chr2 1352 75 35M = 1513 196 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<;;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:31:622:216 73 chr2 1354 99 35M * 0 0 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<96<7 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:105:854:975 163 chr2 1354 71 35M = 1523 202 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<7:<;;;;5 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:26:749:174 147 chr2 1357 78 35M = 1183 -209 TAACAAAAGTAAATAAAACACATAGCTAAAACTAA (<<)<<<<6<<<<<<<<<<&:<3<<<6<<<)<:<< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:21:553:57 147 chr2 1358 99 35M = 1197 -196 AACAAAAGTAAATAAAACACATAGCTAAAACTAAA <<+<<<<<<<<<;<<<<8<<<<<<8<<<<<;<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:128:629:484 83 chr2 1359 96 35M = 1185 -209 AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA :(::<</*;<<99<<<-<;<<<<4<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS1_108:2:85:580:481 83 chr2 1359 99 35M = 1167 -227 AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA =)====77========8=3====3=========== MF:i:18 Aq:i:71 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--B7_589:8:139:727:808 83 chr2 1363 99 35M = 1195 -203 AAGTAAATAAAACACATAGCTAAAACTAAAAAAGC <<;<<<<<<<<<;<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:2:22:471:500 83 chr2 1365 99 35M = 1200 -200 GTAAATAAAACACATAGCTAAAACTAAAAAAGCAA =9===0====;=77<==8;====;=========== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:112:578:782 147 chr2 1366 89 35M = 1183 -218 AAAATAAAACACATAGCTAAAACTAAAAAAGCAAA +<<<%<<<<6<;<<<<6:<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS221_3:4:81:687:1379 83 chr2 1366 99 35M = 1210 -191 TAAATAAAACACATAGCTAAAACTAAAAAAGCAAA <<<<<<<<<<<:<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:320:20:250 99 chr2 1367 77 35M = 1532 200 AAATAAAACACATAGCTAAAACTAAAAAAGCAAAA <<<<<<<<<<<<<<<<<;<<<<<<<<<;+:<;<<3 MF:i:18 Aq:i:6 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:312:985:871 83 chr2 1369 99 35M = 1212 -192 ATAAAACACATAGCTAAAACTAAAAAAGCAAAAAC <8<<<<.<.<<<<:<<<<<.<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:12:484:836 83 chr2 1372 99 35M = 1197 -210 AAACACATAGCTAAAACTAAAAAAGCAAAAACAAA <<<<</<4<<&7<<<<;<<<<<<<<<<<<<1<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:176:402:458 83 chr2 1376 99 36M = 1210 -202 AAATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA </<+<4&;<<<<7<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS139_11:7:50:1229:1313 163 chr2 1376 77 35M = 1528 187 ACATAGCTAAAACTAAAAAAGCAAAAACAAAAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:124:367:72 83 chr2 1377 99 35M = 1175 -237 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA ,<<<8,<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:267:170:250 83 chr2 1377 99 35M = 1189 -223 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA -<;<5-:<<<<;<<<<<<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:24:105:1046 147 chr2 1377 99 35M = 1184 -228 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +<<<</<<<<<.<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:38:557:1441 83 chr2 1381 99 35M = 1212 -204 GATAAAAATAAAAAAGCAAAAACAAAAACTATGCT <&<<<<<,<<<<<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:2 UQ:i:16 H0:i:0 H1:i:1
--EAS188_7:7:67:719:786 83 chr2 1383 43 35M = 1218 -200 TAAAAAAAAAAAAGCAAAAACAAAAACTATGCTAA $<<;<-1<<<8<<*&<;<;,<<3<<<<33<<<33< MF:i:18 Aq:i:13 NM:i:2 UQ:i:28 H0:i:1 H1:i:0
--EAS114_39:2:5:1219:137 147 chr2 1384 99 35M = 1209 -210 AAAACTAAAAAAGCAAAAACAAAAACTATGCTAAG <<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:68:242:834 83 chr2 1386 99 36M = 1200 -222 AAATAAAAAAGCAAAAACAAAAACTATGCTAAGTAT <<68<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS51_66:3:166:532:438 147 chr2 1386 99 35M = 1194 -227 AACTAAAAAAGCAAAAACAAAAACTATGCTAAGTA <<&7<<<<<<<+<<<<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:139:989:144 83 chr2 1387 99 35M = 1201 -221 ACTAAAAAAGCAAAAACAAAAACTATGCTAAGTAT <&<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:81:12:1231 83 chr2 1391 99 35M = 1228 -198 AAAAAGCAAAAACAAAAACTATGCTAAGTATTGGT <<<<<<<7<<<<<<<5<'<6/<<<5<<<<<<2<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:8:72:44:435 147 chr2 1392 76 35M = 1235 -192 AAAAGCAAAAACAAAAACTATGCTAAGTATTGGTA <<<<;7;<<<<;<<<<<<<<<<;<<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:211:954:174 147 chr2 1393 99 35M = 1207 -221 AAAGAAAAAACAAAAACTATGCTAAGTATTGGTAA ====*=====6======================== MF:i:18 Aq:i:75 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--B7_595:7:149:123:265 83 chr2 1395 99 35M = 1213 -217 AGCAAAAACAAAAACTATGCTAAGTATTGGTAAAG <;&<<<<<:<<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:7:282:424 147 chr2 1397 83 35M = 1233 -199 CAAAAACAAAAACTATGCTAAGTATTGTTAAAGAT 1<<<<<9<<<<<31<77;;;;7<3<<2+;<3<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--B7_593:2:68:140:542 147 chr2 1398 95 36M = 1217 -217 AAAAACAAAAACTATGCTAAGTATTGGTAAAGATGT ;;<<;7<<<<<<:<<<:<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:76:282:1668 147 chr2 1401 99 35M = 1240 -196 AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG <<<<<:<<<8<8<<<<<::<<<<7<<<<<<2<<<8 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:41:519:609 83 chr2 1401 99 35M = 1229 -207 AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG <4;<;<<<<<<<<;4:<<;<<<<<<<<<<<;<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:100:238:596 83 chr2 1403 56 35M = 1220 -218 CAAAAACTATTCTAAGTATTGGTAAAGATGTGGGG 4<<<<;<3<3&<3<1<5<31<<3<<<<<<2<<;<, MF:i:18 Aq:i:17 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS51_64:3:255:45:399 83 chr2 1404 99 35M = 1238 -201 AAAAACTATGCTAAGTATTGGTAAAGATGTGGGGA <5<5<4$;;7/<<<177&7;<<<<<<;<<4<<<<< MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:43:47:279 83 chr2 1405 99 35M = 1206 -234 AAAACTATGCTAAGTATTGGTAAAGATGTGGGGAA <:<<79<<<19<<<1<<9<<+<<<<<3<3<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:215:516:299 147 chr2 1406 99 35M = 1226 -215 AAGCTATGCTAAGTATTGGTAAAGATGTGGGGAAA ;;))7<8:855<<4<;:<<87<<<7<<;<<<*3<< MF:i:18 Aq:i:64 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--B7_591:7:116:814:89 147 chr2 1408 99 36M = 1231 -213 ACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAA :38<;<;<<<<;<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:34:144:868 83 chr2 1412 76 35M = 1226 -221 AGCTAAGGAATGGGAAAGGTGTGGGGAAAAAAGTA &9+&7<&&0&<6<.0<<7<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:4 UQ:i:50 H0:i:0 H1:i:0
--EAS51_62:7:312:236:655 83 chr2 1412 99 35M = 1222 -225 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<8;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:17:1179:393 147 chr2 1412 99 35M = 1232 -215 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:447:488 83 chr2 1412 99 35M = 1233 -214 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<3<<<<<<6<<<<<<<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:73:420:812 147 chr2 1414 66 35M = 1232 -217 CTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAA 5'<<<,<&,<<,<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:215:840:760 83 chr2 1416 99 35M = 1256 -195 AAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACT <<<8<::<;;<<<:<7<7<;;;<<<<<<<<<<;<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:118:829:36 147 chr2 1417 99 35M = 1233 -219 AGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTC <8<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:290:121:79 83 chr2 1420 99 35M = 1257 -198 ATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCA <1<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:174:557:872 83 chr2 1423 99 35M = 1237 -221 GGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAAT .77<:<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:315:412:921 147 chr2 1424 99 35M = 1254 -205 GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATA 4-<79;<<<4:;:<<<<<<<<4<<<38<<;<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:95:944:247 147 chr2 1424 99 40M = 1238 -226 GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCT :7::;<<<<<;;<<<<<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:137:741:866 83 chr2 1429 99 35M = 1268 -196 GATGAGGGGAAAAAAGTAAACTCTCAAATATTGCT <;0:%<:9<<<:<<<<;<<:<<;0;<<<<<::<<6 MF:i:18 Aq:i:70 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS188_7:6:191:540:493 147 chr2 1432 99 35M = 1273 -194 GTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGT <<9<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:49:911:980 83 chr2 1434 99 35M = 1241 -228 GGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGG 44:7<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:248:122:558 83 chr2 1436 99 35M = 1243 -228 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA <;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:609:646 147 chr2 1436 99 36M = 1264 -208 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ;;<<<<=======;;:;======;==<========= MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:7:1347:375 83 chr2 1436 99 35M = 1271 -200 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA 47999<<<;;;;;;:5;:;<;;<;;;;;<;;;;;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:282:962:46 147 chr2 1437 99 35M = 1282 -190 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG 69<<<<<:<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:169:714:644 83 chr2 1437 99 35M = 1231 -241 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ;<<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:84:92:1246 83 chr2 1437 99 35M = 1265 -207 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG <<<<<<<<<<<<<<<8<<<<<<5<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:71:62:254 83 chr2 1438 99 35M = 1264 -209 AAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGT <<<<<<;8<<<<;<:<<<<<<<;<<;<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:28:979:519 83 chr2 1439 99 35M = 1278 -196 AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA <<<<<6<<<<<<<<<<<<<<<8<<<<<<<<6<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:63:28:1549 83 chr2 1439 77 35M = 1247 -227 AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:15:244:876 147 chr2 1440 43 36M = 1246 -230 AAAAGTAAACTCTCAAATATTGCTAGTGTGAGTATA ;<<<7<<<<<.2<-<<<<<<<<<:<<<<<<<<<2<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_59:8:80:542:549 83 chr2 1443 99 35M = 1271 -207 AGTAAACTCTCAAATATTGCTAGTGGGAGTATAAA =9====7=;=======;;==;========<===== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:173:627:465 83 chr2 1444 99 36M = 1260 -220 GTAAACTCTCAAATATTGCTAGTGGGAGTATAAATT :<<<<;<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:54:1351:910 147 chr2 1448 99 35M = 1270 -213 ACTCTCAAATATTGCTAGTGGGAGTATAAATTGTT <7<7;;<<<<<;<<;;<<;<<<<<<<<<<<<<<;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:44:1807:833 147 chr2 1449 99 40M = 1301 -188 CTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCAC :6:9:<<<6<88<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:290:247:509 83 chr2 1450 99 35M = 1276 -209 TCTCAAATATTGCTAGTGGGAGTATAAATTGTTTT 49';<<<<<8;<;;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:42:804:114 83 chr2 1452 99 35M = 1281 -206 TCAAATATTGCTAGTGGGAGTATAAATTGTTTTCC ;9<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:39:1671:1928 83 chr2 1453 99 35M = 1276 -212 CAAATATTGCTAGTGGGAGTATAAATTGTTTTCCA <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:90:629:652 147 chr2 1456 99 35M = 1276 -215 ATATTGCTAGTGGGAGTATAAATTGTTTTCCACTT <:<7::<:<<<<<8<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:289:207:323 83 chr2 1462 99 35M = 1279 -218 CTAGTGGGAGTATAAATTGATTTCCACTTTGGAAA &</<7<<:<7::<<<<+3<-7<<:<7<<<<<<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS1_95:7:280:607:113 83 chr2 1468 99 35M = 1303 -200 GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT 18<-<<<<<<<<<<<<<8<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:21:423:169 147 chr2 1468 99 35M = 1270 -233 GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT ;376;0<<<<99<<<<<<-;<4<<<<<<<<<;<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:45:758:616 83 chr2 1473 99 35M = 1280 -228 ATAAATTGTTTTCCACTTTGGAAAACAATTTGGTA <<;<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:2:326:153:231 83 chr2 1477 43 35M = 1290 -222 ATTGTTTTCAACTTTGGAAAACAATTTGGTAATTT ::6=68=<*$;*=========6============= MF:i:18 Aq:i:0 NM:i:1 UQ:i:3 H0:i:0 H1:i:1
--EAS192_3:3:88:866:774 83 chr2 1478 99 35M = 1307 -206 TTGTTTTCCACTTTGGAAAACAATTTGGTAATTTC <<<;<<<<:<<<<<:<8<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:194:867:616 147 chr2 1481 99 35M = 1303 -213 TTTTCCACTTTGGAAAACAATTTGGTAATTTCGTT 38:;;:<:<<<<;<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:46:220:58 147 chr2 1483 99 36M = 1313 -206 TTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTT 98<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:109:953:668 147 chr2 1485 99 35M = 1297 -223 CCACTTTGGAAAACAATTTGGTAATTTCGTTTTTT <:)9<<<<<<<<8:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:4:1131:104 83 chr2 1487 99 35M = 1307 -215 ACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTT 61;;;<<<<<<<<<;:<<<:<<;<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:23:1754:796 147 chr2 1488 99 35M = 1329 -194 CTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTT 88897;;;;:;:;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:11:555:330 83 chr2 1492 99 35M = 1321 -206 GGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTT 6;6;9766+<<<<9:2=<===6============= MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:308:614:911 147 chr2 1493 90 35M = 1319 -209 AAAAACAATTTGGTAATTTAGTTTTTTTTTTTTTC %<<<;:<::<6,<<<<<<:<:<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:2 UQ:i:31 H0:i:0 H1:i:1
--EAS139_19:1:82:946:392 83 chr2 1493 99 40M = 1297 -236 GAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTC :;:;:,::<:;<<<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:260:147:818 83 chr2 1497 82 35M = 1303 -229 AAAATTTGGTAATTTAGTTTTTTTTTTTTTCTTTT 6.=..++==6=76==&===========99====== MF:i:18 Aq:i:41 NM:i:2 UQ:i:18 H0:i:0 H1:i:1
--B7_591:5:124:978:501 83 chr2 1499 99 36M = 1307 -228 AATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTC <9<;<<::<;<<;<4<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:147:360:141 147 chr2 1501 47 13M1D22M = 1319 -218 TTTGGTAATTTAGTTTTTTTTTTTTCTTTTCTCTT <86<<<<73<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:0
--EAS114_39:3:6:1064:1805 147 chr2 1502 99 35M = 1350 -187 TTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTT ;88<;<;;<<;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:76:1729:813 83 chr2 1506 99 35M = 1317 -224 TAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTT <+6<<<&1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS54_65:6:326:71:741 153 chr2 1509 0 35M * 0 0 TCTCGTTTTTTTTTCTTTCTTTTCTCTTTTTTTTT !!<66<<<<<<<<<&<<7&<<<<:<*<<<<<<<<1 MF:i:32 Aq:i:0 NM:i:2 UQ:i:22 H0:i:1 H1:i:12
--EAS112_34:6:145:144:263 73 chr2 1509 0 35M * 0 0 TTTCGTTTTTTTTTTTTTTTTTTCCCCTTTCTTTT <<<<<<<<<<<<<<<<+4+4&+&(&&*2&8&&&)& MF:i:32 Aq:i:0 NM:i:4 UQ:i:29 H0:i:0 H1:i:0
--EAS1_105:1:329:407:872 73 chr2 1510 0 35M * 0 0 TTCGTTTTTTTTTTTTTTTTTTCCCTTTTTTTTTT <<<<<<<<<<<<<<<<<<6;<<&4::<++<(&;<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:46 H0:i:0 H1:i:0
--EAS139_19:2:82:154:1333 147 chr2 1511 77 40M = 1349 -202 TTTTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTT :5'::<<<;<<<<<<</3<<<&4&7<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS56_63:3:41:468:459 147 chr2 1513 0 35M = 1352 -196 TTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTT +;<<<<<<<<<<<;&<<;;88&<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS114_28:6:11:151:750 153 chr2 1513 5 36M * 0 0 GTTTTTATTTTTTTCCTCTCTCTTTTTTTTTTTTTT :'1:%4;4<<<+;6;&9+6;/<<<<<<<<<<<<<<< MF:i:32 Aq:i:5 NM:i:3 UQ:i:41 H0:i:0 H1:i:3
--EAS139_11:5:52:1278:1478 83 chr2 1513 47 35M = 1322 -226 GTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTT .8::<<<<<<<;<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:9 H1:i:85
--B7_591:2:309:798:997 153 chr2 1514 0 36M * 0 0 TTTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 466;<<744077+&7097&%&4<9<<<9<<<::<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:5 H0:i:12 H1:i:85
--EAS1_93:6:218:144:794 121 chr2 1514 0 35M = 1514 0 TTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT ;92/;5:<6)+<5)67</9<&<&<<<:<<<57<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:22 H1:i:85
--EAS1_93:6:218:144:794 181 chr2 1514 0 * = 1514 0 GGGTGCATTGCTATGTTGCGGTCGCTTTGCCTCCT ++(3:&)5<9035<3):-<53<+&&-+)<<&)&<6 MF:i:192
--EAS1_97:6:222:305:337 153 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTTTTTTCCCTTTTTTTTTTTTTT ;;;;;<<';<<<<*;<<<78;7<7<;<<<<<<<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:32 H0:i:0 H1:i:37
--EAS1_105:3:7:35:528 89 chr2 1514 0 35M * 0 0 TTTTTTTTTTGTTCTTTACTCTTTTTTTTTTTTTT <<<<<<<<<<5<<<(<<%<<-8<<<<<<<<<8<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:24 H0:i:0 H1:i:0
--EAS54_65:2:182:924:833 137 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTATTTGCGCTTTTTTTTTTTTTT <<<<<<<<<<<<<)7<<)3/:07<<9<9<<==<7< MF:i:32 Aq:i:0 NM:i:3 UQ:i:30 H0:i:0 H1:i:0
--EAS54_81:8:78:735:536 153 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTCATTTCTCTTTTTTTTTTTTTT ;9<<<<<<<.7<9'%1<<)2::<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:4 H0:i:0 H1:i:15
--EAS56_59:5:232:336:46 137 chr2 1514 0 35M * 0 0 ATTTTTTTTTTTTCTTTTCTCTTGTTTCTTTTTTT +<<<<<<<<<<<<6<<<<;<6<<&&<,3<<<<3,, MF:i:32 Aq:i:0 NM:i:3 UQ:i:50 H0:i:0 H1:i:0
--EAS188_4:5:308:552:77 89 chr2 1514 0 35M * 0 0 TTTTCTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT 1;-<%<;8<<<<<&<5-<58:5:<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:4 H0:i:30 H1:i:85
--B7_597:5:125:957:753 137 chr2 1515 0 35M * 0 0 TTTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTT <8<<<;<8;8//++(,(+++&++(/+008880;;/ MF:i:32 Aq:i:0 NM:i:2 UQ:i:14 H0:i:0 H1:i:1
--EAS1_97:4:274:287:423 83 chr2 1515 0 35M = 1332 -218 TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 7<<<<9<<9<<<.<<<<90-<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:12 H1:i:85
--EAS54_71:8:234:21:950 89 chr2 1515 0 33M * 0 0 TTTTTTTTTTTTCTCCTCTCTTTTTTTTTTTTT <<<<<<<<<&<;2;&-<,<+;<<<7<<<;<;<; MF:i:32 Aq:i:0 NM:i:2 UQ:i:17 H0:i:0 H1:i:7
--EAS56_61:6:256:67:461 117 chr2 1515 0 * = 1515 0 TCATGTTTGTGTCTTTCTATGCATTTTTTTTTTTT !!7181!63:6-:!-163(-1%-18<<4<<<<<<< MF:i:192
--EAS56_61:6:256:67:461 185 chr2 1515 0 35M = 1515 0 TTGTTTTTTCTTCTTTTCTCTTTTTTTTTTTTTTT *.%53.:)1+9;3397;1795507+335;.&51)5 MF:i:64 Aq:i:0 NM:i:2 UQ:i:14 H0:i:2 H1:i:85
--EAS56_65:8:317:83:500 153 chr2 1515 0 35M * 0 0 TTTTTTTTTTTTCTTTTCTCCTTTTTTTTTTGTTT ;;;;;<<<<<<<3<<<)-;31<<)97<;9<<:<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:41 H0:i:0 H1:i:0
--EAS114_30:2:303:428:326 147 chr2 1515 0 35M = 1345 -205 TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 4<;<<;<;<4<<8;;;;.8+;<<;<8<;<;<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:11 H1:i:85
--EAS188_7:1:290:286:763 147 chr2 1515 75 35M = 1349 -201 TTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTT <<<<;<<<<<<<&<<<<&77<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:29 H1:i:85
--B7_591:7:89:67:709 89 chr2 1516 0 36M * 0 0 TTTTTTTTTTTGTCTTCTCTTTTTTTTTTTTTTTTT :7:::9:7:<<7<'<<477<<<<<<<<<:<<<<<:< MF:i:32 Aq:i:0 NM:i:2 UQ:i:28 H0:i:0 H1:i:17
--EAS56_65:3:47:64:359 89 chr2 1516 0 35M * 0 0 TTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTTT <<<6<<<<<<<4<4</9<4@<<;<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:33 H0:i:0 H1:i:6
--EAS56_65:4:296:78:421 121 chr2 1518 0 35M = 1518 0 TCTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTT !!<<<:<<<<..<::<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:1 UQ:i:4 H0:i:85 H1:i:85
--EAS56_65:4:296:78:421 181 chr2 1518 0 * = 1518 0 TGTTGGTGTTCGTTTTTTCTCCTGTTTCTTTTTCT <<*<4<<<;:<0<<<<<<<<+;<9<<1<<;<<<+: MF:i:192
--EAS1_95:4:238:124:196 89 chr2 1519 0 35M * 0 0 TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT <0<9.<5.5<<<<9<1<<5<<85<5<<<9<:<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS54_65:7:56:57:985 117 chr2 1519 0 * = 1519 0 TTCTGTCTTCTCTCCTGTCTTCTTTTCTCTTCTTT <9'<.<7<<2<<;77<7<<<<7<7<<<<7<<<2<< MF:i:192
--EAS54_65:7:56:57:985 185 chr2 1519 0 35M = 1519 0 TTTTTTCTCTTTTCTCTTTTTTTTTTTTTTTTTTT 666666*6&1666+64666666666&266666666 MF:i:64 Aq:i:0 NM:i:1 UQ:i:9 H0:i:85 H1:i:85
--EAS56_61:3:5:45:441 89 chr2 1519 0 35M * 0 0 TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT ;;58:<:<(:<<11<&<1<<;<<<<><<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:82 H1:i:85
--B7_589:6:33:356:636 73 chr2 1520 0 35M * 0 0 TTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTT <<<<<<<8;<<<<<<<<<<<<<7<<<<<<<;;3&3 MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:14 H1:i:85
--EAS114_45:6:86:859:1779 137 chr2 1520 0 35M * 0 0 TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT ;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699 MF:i:32 Aq:i:0 NM:i:1 UQ:i:26 H0:i:0 H1:i:15
--EAS54_71:8:105:854:975 83 chr2 1523 71 33M = 1354 -202 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTG <<<<;<:<<;<&<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS51_62:4:187:907:145 153 chr2 1524 28 35M * 0 0 TTTCTTCTCTCTCTTTTTTTTTTTTTTTATTGCAT <<<+;;,6<<<<6<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:28 NM:i:3 UQ:i:59 H0:i:0 H1:i:0
--EAS54_71:4:284:269:882 73 chr2 1524 0 34M * 0 0 TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA <;<<<<<8<7<8;<<<;<7<<<<<;272;73&&) MF:i:32 Aq:i:0 NM:i:1 UQ:i:17 H0:i:0 H1:i:85
--EAS56_63:4:141:9:811 137 chr2 1524 10 35M * 0 0 TTTCTTTTCTCCTTTTTTTTTTTTTTTTTCTACAT <<<;<<<<<<<;<;<:<<<;<<<<<<<<..));;. MF:i:32 Aq:i:0 NM:i:3 UQ:i:47 H0:i:2 H1:i:27
--EAS114_30:6:277:397:932 73 chr2 1524 0 35M * 0 0 TTTCTTTTCACTTTTTTTTTTTTTTTTTTTTACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<:8(,0%( MF:i:32 Aq:i:0 NM:i:3 UQ:i:42 H0:i:2 H1:i:85
--EAS139_11:7:50:1229:1313 83 chr2 1528 77 35M = 1376 -187 TTTTTTCTTTTTTTTTTTTTTTTTTTTGCATGCCA <<<<,<&<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:11 H0:i:3 H1:i:7
--EAS54_65:3:320:20:250 147 chr2 1532 77 35M = 1367 -200 TTTTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAA +'''/<<<<7:;+<;::<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:6 NM:i:2 UQ:i:24 H0:i:1 H1:i:2
--EAS114_26:7:37:79:581 83 chr2 1533 68 35M = 1349 -219 TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA 3,,,===6===<===<;=====-============ MF:i:18 Aq:i:27 NM:i:2 UQ:i:23 H0:i:0 H1:i:1
---- python-pysam.orig/tests/pysam_data/example_user_header.sam
-+++ /dev/null
-@@ -1,8 +0,0 @@
--@HD VN:1.0
--@SQ SN:chr1 LN:1575
--@SQ SN:chr2 LN:1584
--@x1 A:2 B:5
--@x2 A:4 B:5
--@x3 A:6 B:5
--read_28833_29006_6945 99 chr1 33 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 RG:Z:L1
--read_28701_28881_323b 147 chr2 88 30 35M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 RG:Z:L2
---- python-pysam.orig/tests/pysam_data/Makefile
-+++ python-pysam/tests/pysam_data/Makefile
-@@ -14,7 +14,6 @@
- $(BAM) $(BAI) \
- $(CRAM) $(CRAI) \
- example_bai.bam \
-- rg_with_tab.bam \
- ex2_truncated.bam \
- empty.bam empty.bam.bai \
- explicit_index.bam explicit_index.cram \
---- python-pysam.orig/pysam/alternatives.py.obsolete
-+++ python-pysam/pysam/alternatives.py.obsolete
-@@ -12,7 +12,6 @@
- int bam_merge(int argc, char *argv[])
- int bam_index(int argc, char *argv[])
- int bam_sort(int argc, char *argv[])
-- int bam_tview_main(int argc, char *argv[])
- int bam_mating(int argc, char *argv[])
- int bam_rmdup(int argc, char *argv[])
- int bam_rmdupse(int argc, char *argv[])
---- python-pysam.orig/tests/AlignmentFile_test.py
-+++ python-pysam/tests/AlignmentFile_test.py
-@@ -1382,19 +1382,19 @@
- os.unlink(tmpfilename)
-
-
--class TestDeNovoConstructionUserTags(TestDeNovoConstruction):
--
-- '''test de novo construction with a header that contains lower-case tags.'''
--
-- header = {'HD': {'VN': '1.0'},
-- 'SQ': [{'LN': 1575, 'SN': 'chr1'},
-- {'LN': 1584, 'SN': 'chr2'}],
-- 'x1': {'A': 2, 'B': 5},
-- 'x3': {'A': 6, 'B': 5},
-- 'x2': {'A': 4, 'B': 5}}
--
-- bamfile = os.path.join(BAM_DATADIR, "example_user_header.bam")
-- samfile = os.path.join(BAM_DATADIR, "example_user_header.sam")
-+# class TestDeNovoConstructionUserTags(TestDeNovoConstruction):
-+#
-+# '''test de novo construction with a header that contains lower-case tags.'''
-+#
-+# header = {'HD': {'VN': '1.0'},
-+# 'SQ': [{'LN': 1575, 'SN': 'chr1'},
-+# {'LN': 1584, 'SN': 'chr2'}],
-+# 'x1': {'A': 2, 'B': 5},
-+# 'x3': {'A': 6, 'B': 5},
-+# 'x2': {'A': 4, 'B': 5}}
-+#
-+# bamfile = os.path.join(BAM_DATADIR, "example_user_header.bam")
-+# samfile = os.path.join(BAM_DATADIR, "example_user_header.sam")
-
-
- class TestEmptyHeader(unittest.TestCase):
---- python-pysam.orig/tests/samtools_test.py
-+++ python-pysam/tests/samtools_test.py
-@@ -78,7 +78,7 @@
- # ("view -bT ex1.fa -o %(out)s_ex1.view2 ex1.sam",
- "sort ex1.bam -o %(out)s_ex1.sort.bam",
- "mpileup ex1.bam > %(out)s_ex1.pileup",
-- "depth ex1.bam > %(out)s_ex1.depth",
-+ #"depth ex1.bam > %(out)s_ex1.depth",
- # TODO: issues with file naming
- # "faidx ex1.fa; %(out)s_ex1.fa.fai",
- "index ex1.bam %(out)s_ex1.bam.fai",
-@@ -100,8 +100,8 @@
- "cat -o %(out)s_ex1.cat.bam ex1.bam ex1.bam",
- "targetcut ex1.bam > %(out)s_ex1.targetcut",
- "phase ex1.bam > %(out)s_ex1.phase",
-- "import ex1.fa.fai ex1.sam.gz %(out)s_ex1.bam",
-- "bam2fq ex1.bam > %(out)s_ex1.bam2fq",
-+ #"view -bt ex1.fa.fai -o %(out)s_ex1.bam ex1.sam.gz",
-+ #"bam2fq ex1.bam > %(out)s_ex1.bam2fq",
- # TODO: not the same
- # "pad2unpad -T ex1.fa ex2.bam > %(out)s_ex2.unpad",
- # TODO: command line option problem
+++ /dev/null
-Author: Michael R. Crusoe <michael.crusoe@gmail.com>
-Description: sync with samtools 1.10
-
-use devtools/import.py and the contents of the samtools
-Debian package with its patches fully applied
-
---- python-pysam.orig/samtools/LICENSE
-+++ python-pysam/samtools/LICENSE
-@@ -1,6 +1,6 @@
- The MIT/Expat License
-
--Copyright (C) 2008-2018 Genome Research Ltd.
-+Copyright (C) 2008-2019 Genome Research Ltd.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
---- python-pysam.orig/samtools/README
-+++ python-pysam/samtools/README
-@@ -9,7 +9,7 @@
- The typical simple case of building Samtools using the HTSlib bundled within
- this Samtools release tarball is done as follows:
-
-- cd .../samtools-1.9 # Within the unpacked release directory
-+ cd .../samtools-1.10 # Within the unpacked release directory
- ./configure
- make
-
-@@ -21,7 +21,7 @@
- installation using the HTSlib bundled within this Samtools release tarball,
- and building the various HTSlib utilities such as bgzip is done as follows:
-
-- cd .../samtools-1.9 # Within the unpacked release directory
-+ cd .../samtools-1.10 # Within the unpacked release directory
- ./configure --prefix=/path/to/location
- make all all-htslib
- make install install-htslib
-@@ -48,7 +48,7 @@
- To build with plug-ins, you need to use the --enable-plugins configure option
- as follows:
-
-- cd .../samtools-1.9 # Within the unpacked release directory
-+ cd .../samtools-1.10 # Within the unpacked release directory
- ./configure --enable-plugins --prefix=/path/to/location
- make all all-htslib
- make install install-htslib
-@@ -66,8 +66,8 @@
- the source distribution instead of installing the package. In that case
- you can use:
-
-- cd .../samtools-1.9 # Within the unpacked release directory
-- ./configure --enable-plugins --with-plugin-path=$PWD/htslib-1.9
-+ cd .../samtools-1.10 # Within the unpacked release directory
-+ ./configure --enable-plugins --with-plugin-path=$PWD/htslib-1.10
- make all all-htslib
-
- It is possible to override the built-in search path using the HTS_PATH
---- python-pysam.orig/samtools/bam.c
-+++ python-pysam/samtools/bam.c
-@@ -1,6 +1,6 @@
- /* bam.c -- BAM format.
-
-- Copyright (C) 2008-2013, 2015 Genome Research Ltd.
-+ Copyright (C) 2008-2013, 2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -30,7 +30,6 @@
- #include <errno.h>
- #include "bam.h"
- #include "htslib/kstring.h"
--#include "sam_header.h"
-
- char *bam_format1(const bam_header_t *header, const bam1_t *b)
- {
-@@ -59,7 +58,7 @@
- char *s;
-
- if (b->core.tid < -1 || b->core.mtid < -1) return 0;
-- if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0;
-+ if (header && (b->core.tid >= sam_hdr_nref(header) || b->core.mtid >= sam_hdr_nref(header))) return 0;
-
- if (b->data_len < b->core.l_qname) return 0;
- s = memchr(bam1_qname(b), '\0', b->core.l_qname);
-@@ -77,9 +76,8 @@
- // FIXME: we should also check the LB tag associated with each alignment
- const char *bam_get_library(bam_header_t *h, const bam1_t *b)
- {
-- // Slow and inefficient. Rewrite once we get a proper header API.
- const char *rg;
-- char *cp = h->text;
-+ kstring_t lib = { 0, 0, NULL };
- rg = (char *)bam_aux_get(b, "RG");
-
- if (!rg)
-@@ -87,50 +85,18 @@
- else
- rg++;
-
-- // Header is guaranteed to be nul terminated, so this is valid.
-- while (*cp) {
-- char *ID, *LB;
-- char last = '\t';
--
-- // Find a @RG line
-- if (strncmp(cp, "@RG", 3) != 0) {
-- while (*cp && *cp != '\n') cp++; // skip line
-- if (*cp) cp++;
-- continue;
-- }
--
-- // Find ID: and LB: keys
-- cp += 4;
-- ID = LB = NULL;
-- while (*cp && *cp != '\n') {
-- if (last == '\t') {
-- if (strncmp(cp, "LB:", 3) == 0)
-- LB = cp+3;
-- else if (strncmp(cp, "ID:", 3) == 0)
-- ID = cp+3;
-- }
-- last = *cp++;
-- }
--
-- if (!ID || !LB)
-- continue;
--
-- // Check it's the correct ID
-- if (strncmp(rg, ID, strlen(rg)) != 0 || ID[strlen(rg)] != '\t')
-- continue;
--
-- // Valid until next query
-- static char LB_text[1024];
-- for (cp = LB; *cp && *cp != '\t' && *cp != '\n'; cp++)
-- ;
-- strncpy(LB_text, LB, MIN(cp-LB, 1023));
-- LB_text[MIN(cp-LB, 1023)] = 0;
-+ if (sam_hdr_find_tag_id(h, "RG", "ID", rg, "LB", &lib) < 0)
-+ return NULL;
-
-- // Return it; valid until the next query.
-- return LB_text;
-- }
-+ static char LB_text[1024];
-+ int len = lib.l < sizeof(LB_text) - 1 ? lib.l : sizeof(LB_text) - 1;
-+
-+ memcpy(LB_text, lib.s, len);
-+ LB_text[len] = 0;
-+
-+ free(lib.s);
-
-- return NULL;
-+ return LB_text;
- }
-
- int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func)
---- python-pysam.orig/samtools/bam.c.pysam.c
-+++ python-pysam/samtools/bam.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam.c -- BAM format.
-
-- Copyright (C) 2008-2013, 2015 Genome Research Ltd.
-+ Copyright (C) 2008-2013, 2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -32,7 +32,6 @@
- #include <errno.h>
- #include "bam.h"
- #include "htslib/kstring.h"
--#include "sam_header.h"
-
- char *bam_format1(const bam_header_t *header, const bam1_t *b)
- {
-@@ -61,7 +60,7 @@
- char *s;
-
- if (b->core.tid < -1 || b->core.mtid < -1) return 0;
-- if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0;
-+ if (header && (b->core.tid >= sam_hdr_nref(header) || b->core.mtid >= sam_hdr_nref(header))) return 0;
-
- if (b->data_len < b->core.l_qname) return 0;
- s = memchr(bam1_qname(b), '\0', b->core.l_qname);
-@@ -79,9 +78,8 @@
- // FIXME: we should also check the LB tag associated with each alignment
- const char *bam_get_library(bam_header_t *h, const bam1_t *b)
- {
-- // Slow and inefficient. Rewrite once we get a proper header API.
- const char *rg;
-- char *cp = h->text;
-+ kstring_t lib = { 0, 0, NULL };
- rg = (char *)bam_aux_get(b, "RG");
-
- if (!rg)
-@@ -89,50 +87,18 @@
- else
- rg++;
-
-- // Header is guaranteed to be nul terminated, so this is valid.
-- while (*cp) {
-- char *ID, *LB;
-- char last = '\t';
--
-- // Find a @RG line
-- if (strncmp(cp, "@RG", 3) != 0) {
-- while (*cp && *cp != '\n') cp++; // skip line
-- if (*cp) cp++;
-- continue;
-- }
--
-- // Find ID: and LB: keys
-- cp += 4;
-- ID = LB = NULL;
-- while (*cp && *cp != '\n') {
-- if (last == '\t') {
-- if (strncmp(cp, "LB:", 3) == 0)
-- LB = cp+3;
-- else if (strncmp(cp, "ID:", 3) == 0)
-- ID = cp+3;
-- }
-- last = *cp++;
-- }
--
-- if (!ID || !LB)
-- continue;
--
-- // Check it's the correct ID
-- if (strncmp(rg, ID, strlen(rg)) != 0 || ID[strlen(rg)] != '\t')
-- continue;
--
-- // Valid until next query
-- static char LB_text[1024];
-- for (cp = LB; *cp && *cp != '\t' && *cp != '\n'; cp++)
-- ;
-- strncpy(LB_text, LB, MIN(cp-LB, 1023));
-- LB_text[MIN(cp-LB, 1023)] = 0;
-+ if (sam_hdr_find_tag_id(h, "RG", "ID", rg, "LB", &lib) < 0)
-+ return NULL;
-
-- // Return it; valid until the next query.
-- return LB_text;
-- }
-+ static char LB_text[1024];
-+ int len = lib.l < sizeof(LB_text) - 1 ? lib.l : sizeof(LB_text) - 1;
-+
-+ memcpy(LB_text, lib.s, len);
-+ LB_text[len] = 0;
-+
-+ free(lib.s);
-
-- return NULL;
-+ return LB_text;
- }
-
- int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func)
---- python-pysam.orig/samtools/bam.h
-+++ python-pysam/samtools/bam.h
-@@ -1,6 +1,6 @@
- /* bam.h -- BAM API.
-
-- Copyright (C) 2008-2014 Genome Research Ltd.
-+ Copyright (C) 2008-2014, 2019 Genome Research Ltd.
- Portions copyright (C) 2010-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -38,7 +38,7 @@
- @copyright Genome Research Ltd.
- */
-
--#define BAM_VERSION "1.9"
-+#define BAM_VERSION "1.10"
-
- #include <stdint.h>
- #include <stdlib.h>
-@@ -224,16 +224,6 @@
- // int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b);
-
- /*!
-- @abstract Read header information from a TAB-delimited list file.
-- @param fn_list file name for the list
-- @return a pointer to the header structure
--
-- @discussion Each line in this file consists of chromosome name and
-- the length of chromosome.
-- */
-- bam_header_t *sam_header_read2(const char *fn_list);
--
-- /*!
- @abstract Read header from a SAM file (if present)
- @param fp SAM file handler
- @return pointer to header struct; 0 if no @SQ lines available
-@@ -252,13 +242,13 @@
- @abstract Initialize a header structure.
- @return the pointer to the header structure
- */
-- static inline bam_header_t *bam_header_init(void) { return bam_hdr_init(); }
-+ static inline bam_header_t *bam_header_init(void) { return sam_hdr_init(); }
-
- /*!
- @abstract Destroy a header structure.
- @param header pointer to the header
- */
-- static inline void bam_header_destroy(bam_header_t *header) { bam_hdr_destroy(header); }
-+ static inline void bam_header_destroy(bam_header_t *header) { sam_hdr_destroy(header); }
-
- /*!
- @abstract Read a header structure from BAM.
-@@ -277,7 +267,7 @@
- @param header pointer to the header structure
- @return always 0 currently
- */
-- static inline int bam_header_write(bamFile fp, const bam_header_t *header) { return bam_hdr_write(fp, header); }
-+ static inline int bam_header_write(bamFile fp, bam_header_t *header) { return bam_hdr_write(fp, header); }
-
- /*!
- @abstract Read an alignment from BAM.
---- python-pysam.orig/samtools/bam2bcf.c
-+++ python-pysam/samtools/bam2bcf.c
-@@ -1,7 +1,7 @@
- /* bam2bcf.c -- variant calling.
-
- Copyright (C) 2010-2012 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2015 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
---- python-pysam.orig/samtools/bam2bcf.c.pysam.c
-+++ python-pysam/samtools/bam2bcf.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bam2bcf.c -- variant calling.
-
- Copyright (C) 2010-2012 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2015 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
---- python-pysam.orig/samtools/bam2bcf.h
-+++ python-pysam/samtools/bam2bcf.h
-@@ -1,7 +1,7 @@
- /* bam2bcf.h -- variant calling.
-
- Copyright (C) 2010-2012 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2014, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -99,7 +99,8 @@
- } bcf_callret1_t;
-
- typedef struct {
-- int tid, pos;
-+ int tid;
-+ hts_pos_t pos;
- bcf_hdr_t *bcf_hdr;
- int a[5]; // alleles: ref, alt, alt2, alt3
- float qsum[5]; // for the QS tag
-@@ -128,7 +129,7 @@
- int bcf_call_combine(int n, const bcf_callret1_t *calls, bcf_callaux_t *bca, int ref_base /*4-bit*/, bcf_call_t *call);
- int bcf_call2bcf(bcf_call_t *bc, bcf1_t *b, bcf_callret1_t *bcr, int fmt_flag,
- const bcf_callaux_t *bca, const char *ref);
-- int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref,
-+ int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, hts_pos_t pos, bcf_callaux_t *bca, const char *ref,
- const void *rghash);
- void bcf_callaux_clean(bcf_callaux_t *bca, bcf_call_t *call);
-
---- python-pysam.orig/samtools/bam2bcf_indel.c
-+++ python-pysam/samtools/bam2bcf_indel.c
-@@ -1,7 +1,7 @@
- /* bam2bcf_indel.c -- indel caller.
-
- Copyright (C) 2010, 2011 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2014, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -87,9 +87,10 @@
- kh_destroy(rg, hash);
- }
-
--static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos)
-+static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, hts_pos_t tpos, hts_pos_t is_left, hts_pos_t *_tpos)
- {
-- int k, x = c->pos, y = 0, last_y = 0;
-+ int k, y = 0, last_y = 0;
-+ hts_pos_t x = c->pos;
- *_tpos = c->pos;
- for (k = 0; k < c->n_cigar; ++k) {
- int op = cigar[k] & BAM_CIGAR_MASK;
-@@ -124,9 +125,10 @@
- return q < qh? q : qh;
- }
-
--static inline int est_indelreg(int pos, const char *ref, int l, char *ins4)
-+static inline int est_indelreg(hts_pos_t pos, const char *ref, int l, char *ins4)
- {
-- int i, j, max = 0, max_i = pos, score = 0;
-+ int j, max = 0, score = 0;
-+ hts_pos_t i, max_i = pos;
- l = abs(l);
- for (i = pos + 1, j = 0; ref[i]; ++i, ++j) {
- if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1;
-@@ -146,11 +148,12 @@
- - 8: estimated sequence quality .. (aux>>8)&0xff
- - 8: indel quality .. aux&0xff
- */
--int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref,
-+int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, hts_pos_t pos, bcf_callaux_t *bca, const char *ref,
- const void *rghash)
- {
-- int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2;
-+ int s, k, t, n_types, *types, max_rd_len, max_ins, *score1, *score2, max_ref2;
- int N, K, l_run, ref_type, n_alt;
-+ hts_pos_t i, j, left, right;
- char *inscns = 0, *ref2, *query, **ref_sample;
- khash_t(rg) *hash = (khash_t(rg)*)rghash;
- if (ref == 0 || bca == 0) return -1;
-@@ -225,7 +228,7 @@
- free(aux);
- // TODO revisit how/whether to control printing this warning
- if (hts_verbose >= 2)
-- fprintf(stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1);
-+ fprintf(stderr, "[%s] excessive INDEL alleles at position %"PRIhts_pos". Skip the position.\n", __func__, pos + 1);
- return -1;
- }
- types = (int*)calloc(n_types, sizeof(int));
-@@ -274,7 +277,7 @@
- bam1_t *b = p->b;
- uint32_t *cigar = bam_get_cigar(b);
- uint8_t *seq = bam_get_seq(b);
-- int x = b->core.pos, y = 0;
-+ hts_pos_t x = b->core.pos, y = 0;
- for (k = 0; k < b->core.n_cigar; ++k) {
- int op = cigar[k]&0xf;
- int j, l = cigar[k]>>4;
-@@ -382,7 +385,8 @@
- // align each read to ref2
- for (i = 0; i < n_plp[s]; ++i, ++K) {
- bam_pileup1_t *p = plp[s] + i;
-- int qbeg, qend, tbeg, tend, sc, kk;
-+ int qbeg, qend, sc, kk;
-+ hts_pos_t tbeg, tend;
- uint8_t *seq = bam_get_seq(p->b);
- uint32_t *cigar = bam_get_cigar(p->b);
- if (p->b->core.flag&4) continue; // unmapped reads
---- python-pysam.orig/samtools/bam2bcf_indel.c.pysam.c
-+++ python-pysam/samtools/bam2bcf_indel.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bam2bcf_indel.c -- indel caller.
-
- Copyright (C) 2010, 2011 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2014, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -89,9 +89,10 @@
- kh_destroy(rg, hash);
- }
-
--static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, int32_t tpos, int is_left, int32_t *_tpos)
-+static int tpos2qpos(const bam1_core_t *c, const uint32_t *cigar, hts_pos_t tpos, hts_pos_t is_left, hts_pos_t *_tpos)
- {
-- int k, x = c->pos, y = 0, last_y = 0;
-+ int k, y = 0, last_y = 0;
-+ hts_pos_t x = c->pos;
- *_tpos = c->pos;
- for (k = 0; k < c->n_cigar; ++k) {
- int op = cigar[k] & BAM_CIGAR_MASK;
-@@ -126,9 +127,10 @@
- return q < qh? q : qh;
- }
-
--static inline int est_indelreg(int pos, const char *ref, int l, char *ins4)
-+static inline int est_indelreg(hts_pos_t pos, const char *ref, int l, char *ins4)
- {
-- int i, j, max = 0, max_i = pos, score = 0;
-+ int j, max = 0, score = 0;
-+ hts_pos_t i, max_i = pos;
- l = abs(l);
- for (i = pos + 1, j = 0; ref[i]; ++i, ++j) {
- if (ins4) score += (toupper(ref[i]) != "ACGTN"[(int)ins4[j%l]])? -10 : 1;
-@@ -148,11 +150,12 @@
- - 8: estimated sequence quality .. (aux>>8)&0xff
- - 8: indel quality .. aux&0xff
- */
--int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, int pos, bcf_callaux_t *bca, const char *ref,
-+int bcf_call_gap_prep(int n, int *n_plp, bam_pileup1_t **plp, hts_pos_t pos, bcf_callaux_t *bca, const char *ref,
- const void *rghash)
- {
-- int i, s, j, k, t, n_types, *types, max_rd_len, left, right, max_ins, *score1, *score2, max_ref2;
-+ int s, k, t, n_types, *types, max_rd_len, max_ins, *score1, *score2, max_ref2;
- int N, K, l_run, ref_type, n_alt;
-+ hts_pos_t i, j, left, right;
- char *inscns = 0, *ref2, *query, **ref_sample;
- khash_t(rg) *hash = (khash_t(rg)*)rghash;
- if (ref == 0 || bca == 0) return -1;
-@@ -227,7 +230,7 @@
- free(aux);
- // TODO revisit how/whether to control printing this warning
- if (hts_verbose >= 2)
-- fprintf(samtools_stderr, "[%s] excessive INDEL alleles at position %d. Skip the position.\n", __func__, pos + 1);
-+ fprintf(samtools_stderr, "[%s] excessive INDEL alleles at position %"PRIhts_pos". Skip the position.\n", __func__, pos + 1);
- return -1;
- }
- types = (int*)calloc(n_types, sizeof(int));
-@@ -276,7 +279,7 @@
- bam1_t *b = p->b;
- uint32_t *cigar = bam_get_cigar(b);
- uint8_t *seq = bam_get_seq(b);
-- int x = b->core.pos, y = 0;
-+ hts_pos_t x = b->core.pos, y = 0;
- for (k = 0; k < b->core.n_cigar; ++k) {
- int op = cigar[k]&0xf;
- int j, l = cigar[k]>>4;
-@@ -384,7 +387,8 @@
- // align each read to ref2
- for (i = 0; i < n_plp[s]; ++i, ++K) {
- bam_pileup1_t *p = plp[s] + i;
-- int qbeg, qend, tbeg, tend, sc, kk;
-+ int qbeg, qend, sc, kk;
-+ hts_pos_t tbeg, tend;
- uint8_t *seq = bam_get_seq(p->b);
- uint32_t *cigar = bam_get_cigar(p->b);
- if (p->b->core.flag&4) continue; // unmapped reads
---- python-pysam.orig/samtools/bam2depth.c
-+++ python-pysam/samtools/bam2depth.c
-@@ -1,7 +1,7 @@
- /* bam2depth.c -- depth subcommand.
-
- Copyright (C) 2011, 2012 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2016, 2018, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -39,20 +39,19 @@
- #include <unistd.h>
- #include "htslib/sam.h"
- #include "samtools.h"
-+#include "bedidx.h"
- #include "sam_opts.h"
-
-+#define BAM_FMAX ((BAM_FSUPPLEMENTARY << 1) - 1)
-+
- typedef struct { // auxiliary data structure
- samFile *fp; // the file handle
-- bam_hdr_t *hdr; // the file header
-+ sam_hdr_t *hdr; // the file header
- hts_itr_t *iter; // NULL if a region not specified
- int min_mapQ, min_len; // mapQ filter; length filter
-+ uint32_t flags; // read filtering flags
- } aux_t;
-
--void *bed_read(const char *fn); // read a BED or position list file
--void bed_destroy(void *_h); // destroy the BED data structure
--int bed_overlap(const void *_h, const char *chr, int beg, int end); // test if chr:beg-end overlaps
--int bed_query(const void *_h, const char *chr, int pos, int *beg, int *end);
--
- // This function reads a BAM alignment from one BAM file.
- static int read_bam(void *data, bam1_t *b) // read level filters better go here to avoid pileup
- {
-@@ -62,7 +61,7 @@
- {
- ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b);
- if ( ret<0 ) break;
-- if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue;
-+ if ( b->core.flag & aux->flags) continue;
- if ( (int)b->core.qual < aux->min_mapQ ) continue;
- if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue;
- break;
-@@ -79,15 +78,21 @@
- fprintf(stderr, " -a output all positions (including zero depth)\n");
- fprintf(stderr, " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n");
- fprintf(stderr, " -b <bed> list of positions or regions\n");
-+ fprintf(stderr, " -X use customized index files\n");
- fprintf(stderr, " -f <list> list of input BAM filenames, one per line [null]\n");
-+ fprintf(stderr, " -H print a file header\n");
- fprintf(stderr, " -l <int> read length threshold (ignore reads shorter than <int>) [0]\n");
- fprintf(stderr, " -d/-m <int> maximum coverage depth [8000]. If 0, depth is set to the maximum\n"
- " integer value, effectively removing any depth limit.\n"); // the htslib's default
-+ fprintf(stderr, " -o FILE where to write output to [stdout]\n");
- fprintf(stderr, " -q <int> base quality threshold [0]\n");
- fprintf(stderr, " -Q <int> mapping quality threshold [0]\n");
- fprintf(stderr, " -r <chr:from-to> region\n");
-+ fprintf(stderr, " -g <flags> include reads that have any of the specified flags set [0]\n");
-+ fprintf(stderr, " -G <flags> filter out reads that have any of the specified flags set"
-+ " [UNMAP,SECONDARY,QCFAIL,DUP]\n");
-
-- sam_global_opt_help(stderr, "-.--.-");
-+ sam_global_opt_help(stderr, "-.--.--.");
-
- fprintf(stderr, "\n");
- fprintf(stderr, "The output is a simple tab-separated table with three columns: reference name,\n");
-@@ -95,21 +100,27 @@
- fprintf(stderr, "omitted by default; see the -a option.\n");
- fprintf(stderr, "\n");
-
-- return 1;
-+ return EXIT_FAILURE;
- }
-
- int main_depth(int argc, char *argv[])
- {
-- int i, n, tid, reg_tid, beg, end, pos, *n_plp, baseQ = 0, mapQ = 0, min_len = 0;
-+ int i, n, tid, reg_tid, *n_plp, baseQ = 0, mapQ = 0, min_len = 0, has_index_file = 0;
-+ hts_pos_t beg, end, pos, last_pos = -1;
- int all = 0, status = EXIT_SUCCESS, nfiles, max_depth = -1;
- const bam_pileup1_t **plp;
- char *reg = 0; // specified region
- void *bed = 0; // BED data structure
- char *file_list = NULL, **fn = NULL;
-- bam_hdr_t *h = NULL; // BAM header of the 1st input
-+ sam_hdr_t *h = NULL; // BAM header of the 1st input
- aux_t **data;
- bam_mplp_t mplp;
-- int last_pos = -1, last_tid = -1, ret;
-+ int last_tid = -1, ret;
-+ int print_header = 0;
-+ char *output_file = NULL;
-+ FILE *file_out = stdout;
-+ uint32_t flags = (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP);
-+ int tflags = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-@@ -118,19 +129,41 @@
- };
-
- // parse the command line
-- while ((n = getopt_long(argc, argv, "r:b:q:Q:l:f:am:d:", lopts, NULL)) >= 0) {
-+ while ((n = getopt_long(argc, argv, "r:b:Xq:Q:l:f:am:d:Ho:g:G:", lopts, NULL)) >= 0) {
- switch (n) {
- case 'l': min_len = atoi(optarg); break; // minimum query length
- case 'r': reg = strdup(optarg); break; // parsing a region requires a BAM header
- case 'b':
- bed = bed_read(optarg); // BED or position list file can be parsed now
-- if (!bed) { print_error_errno("depth", "Could not read file \"%s\"", optarg); return 1; }
-+ if (!bed) {
-+ print_error_errno("depth", "Could not read file \"%s\"", optarg);
-+ return EXIT_FAILURE;
-+ }
- break;
-+ case 'X': has_index_file = 1; break;
- case 'q': baseQ = atoi(optarg); break; // base quality threshold
- case 'Q': mapQ = atoi(optarg); break; // mapping quality threshold
- case 'f': file_list = optarg; break;
- case 'a': all++; break;
- case 'd': case 'm': max_depth = atoi(optarg); break; // maximum coverage depth
-+ case 'H': print_header = 1; break;
-+ case 'o': output_file = optarg; break;
-+ case 'g':
-+ tflags = bam_str2flag(optarg);
-+ if (tflags < 0 || tflags > BAM_FMAX) {
-+ print_error_errno("depth", "Flag value \"%s\" is not supported", optarg);
-+ return 1;
-+ }
-+ flags &= ~tflags;
-+ break;
-+ case 'G':
-+ tflags = bam_str2flag(optarg);
-+ if (tflags < 0 || tflags > BAM_FMAX) {
-+ print_error_errno("depth", "Flag value \"%s\" is not supported", optarg);
-+ return 1;
-+ }
-+ flags |= tflags;
-+ break;
- default: if (parse_sam_global_opt(n, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return usage();
-@@ -139,18 +172,40 @@
- if (optind == argc && !file_list)
- return usage();
-
-+ /* output file provided by user */
-+ if (output_file != NULL && strcmp(output_file,"-")!=0) {
-+ file_out = fopen( output_file, "w" );
-+ if (file_out == NULL) {
-+ print_error_errno("depth", "Cannot open \"%s\" for writing.", output_file);
-+ return EXIT_FAILURE;
-+ }
-+ }
-+
-+
- // initialize the auxiliary data structures
- if (file_list)
- {
-- if ( read_file_list(file_list,&nfiles,&fn) ) return 1;
-+ if (has_index_file) {
-+ print_error("depth", "The -f option cannot be combined with -X");
-+ return 1;
-+ }
-+ if ( read_file_list(file_list,&nfiles,&fn) ) return EXIT_FAILURE;
- n = nfiles;
- argv = fn;
- optind = 0;
- }
-- else
-- n = argc - optind; // the number of BAMs on the command line
-+ else if (has_index_file) { // Calculate # of input BAM files
-+ if ((argc - optind) % 2 != 0) {
-+ fprintf(stderr, "Error: Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ n = (argc - optind) / 2;
-+ } else {
-+ n = argc - optind;
-+ }
- data = calloc(n, sizeof(aux_t*)); // data[i] for the i-th input
-- reg_tid = 0; beg = 0; end = INT_MAX; // set the default region
-+ reg_tid = 0; beg = 0; end = HTS_POS_MAX; // set the default region
-+
- for (i = 0; i < n; ++i) {
- int rf;
- data[i] = calloc(1, sizeof(aux_t));
-@@ -163,24 +218,32 @@
- rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ;
- if (baseQ) rf |= SAM_QUAL;
- if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-- fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-- return 1;
-+ print_error_errno("depth", "Failed to set CRAM_OPT_REQUIRED_FIELDS value");
-+ status = EXIT_FAILURE;
-+ goto depth_end;
- }
- if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) {
-- fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-- return 1;
-+ print_error_errno("depth", "Failed to set CRAM_OPT_DECODE_MD value");
-+ status = EXIT_FAILURE;
-+ goto depth_end;
- }
- data[i]->min_mapQ = mapQ; // set the mapQ filter
- data[i]->min_len = min_len; // set the qlen filter
- data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header
- if (data[i]->hdr == NULL) {
-- fprintf(stderr, "Couldn't read header for \"%s\"\n",
-- argv[optind+i]);
-+ print_error_errno("depth", "Couldn't read header for \"%s\"",
-+ argv[optind+i]);
- status = EXIT_FAILURE;
- goto depth_end;
- }
- if (reg) { // if a region is specified
-- hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (has_index_file) {
-+ idx = sam_index_load2(data[i]->fp, argv[optind+i], argv[optind+i+n]); // load the index
-+ } else {
-+ idx = sam_index_load(data[i]->fp, argv[optind+i]);
-+ }
- if (idx == NULL) {
- print_error("depth", "can't load index for \"%s\"", argv[optind+i]);
- status = EXIT_FAILURE;
-@@ -194,8 +257,16 @@
- goto depth_end;
- }
- }
-+ data[i]->flags = flags;
- }
--
-+ if (print_header) {
-+ fputs("#CHROM\tPOS", file_out);
-+ for (i = 0; i < n; ++i) {
-+ fputc('\t', file_out);
-+ fputs(argv[optind+i], file_out);
-+ }
-+ fputc('\n', file_out);
-+ }
- h = data[0]->hdr; // easy access to the header of the 1st BAM
- if (reg) {
- beg = data[0]->iter->beg; // and to the parsed region coordinates
-@@ -211,21 +282,22 @@
- bam_mplp_set_maxcnt(mplp,INT_MAX);
- n_plp = calloc(n, sizeof(int)); // n_plp[i] is the number of covering reads from the i-th BAM
- plp = calloc(n, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp)
-- while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
-+ while ((ret=bam_mplp64_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
- if (pos < beg || pos >= end) continue; // out of range; skip
-- if (tid >= h->n_targets) continue; // diff number of @SQ lines per file?
-+ if (tid >= sam_hdr_nref(h)) continue; // diff number of @SQ lines per file?
- if (all) {
- while (tid > last_tid) {
- if (last_tid >= 0 && !reg) {
- // Deal with remainder or entirety of last tid.
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- // Horribly inefficient, but the bed API is an obfuscated black box.
-- if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[last_tid], stdout); printf("\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, last_tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- putchar('\t'), putchar('0');
-- putchar('\n');
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
- }
- last_tid++;
-@@ -237,19 +309,21 @@
- // Deal with missing portion of current tid
- while (++last_pos < pos) {
- if (last_pos < beg) continue; // out of range; skip
-- if (bed && bed_overlap(bed, h->target_name[tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[tid], stdout); printf("\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- putchar('\t'), putchar('0');
-- putchar('\n');
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
-
- last_tid = tid;
- last_pos = pos;
- }
-- if (bed && bed_overlap(bed, h->target_name[tid], pos, pos + 1) == 0) continue;
-- fputs(h->target_name[tid], stdout); printf("\t%d", pos+1); // a customized printf() would be faster
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, tid), pos, pos + 1) == 0) continue;
-+ fputs(sam_hdr_tid2name(h, tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, pos+1); // a customized printf() would be faster
- for (i = 0; i < n; ++i) { // base level filters have to go here
- int j, m = 0;
- for (j = 0; j < n_plp[i]; ++j) {
-@@ -258,9 +332,9 @@
- else if (p->qpos < p->b->core.l_qseq &&
- bam_get_qual(p->b)[p->qpos] < baseQ) ++m; // low base quality
- }
-- printf("\t%d", n_plp[i] - m); // this the depth to output
-+ fprintf(file_out, "\t%d", n_plp[i] - m); // this the depth to output
- }
-- putchar('\n');
-+ fputc('\n', file_out);
- }
- if (ret < 0) status = EXIT_FAILURE;
- free(n_plp); free(plp);
-@@ -268,19 +342,20 @@
-
- if (all) {
- // Handle terminating region
-- if (last_tid < 0 && reg && all > 1) {
-+ if (last_tid < 0 && reg) {
- last_tid = reg_tid;
- last_pos = beg-1;
- }
-- while (last_tid >= 0 && last_tid < h->n_targets) {
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (last_tid >= 0 && last_tid < sam_hdr_nref(h)) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- if (last_pos >= end) break;
-- if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[last_tid], stdout); printf("\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, last_tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- putchar('\t'), putchar('0');
-- putchar('\n');
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
- last_tid++;
- last_pos = -1;
-@@ -290,8 +365,17 @@
- }
-
- depth_end:
-+ if (fclose(file_out) != 0) {
-+ if (status == EXIT_SUCCESS) {
-+ print_error_errno("depth", "error on closing \"%s\"",
-+ (output_file && strcmp(output_file, "-") != 0
-+ ? output_file : "stdout"));
-+ status = EXIT_FAILURE;
-+ }
-+ }
-+
- for (i = 0; i < n && data[i]; ++i) {
-- bam_hdr_destroy(data[i]->hdr);
-+ sam_hdr_destroy(data[i]->hdr);
- if (data[i]->fp) sam_close(data[i]->fp);
- hts_itr_destroy(data[i]->iter);
- free(data[i]);
---- python-pysam.orig/samtools/bam2depth.c.pysam.c
-+++ python-pysam/samtools/bam2depth.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bam2depth.c -- depth subcommand.
-
- Copyright (C) 2011, 2012 Broad Institute.
-- Copyright (C) 2012-2014 Genome Research Ltd.
-+ Copyright (C) 2012-2016, 2018, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -41,20 +41,19 @@
- #include <unistd.h>
- #include "htslib/sam.h"
- #include "samtools.h"
-+#include "bedidx.h"
- #include "sam_opts.h"
-
-+#define BAM_FMAX ((BAM_FSUPPLEMENTARY << 1) - 1)
-+
- typedef struct { // auxiliary data structure
- samFile *fp; // the file handle
-- bam_hdr_t *hdr; // the file header
-+ sam_hdr_t *hdr; // the file header
- hts_itr_t *iter; // NULL if a region not specified
- int min_mapQ, min_len; // mapQ filter; length filter
-+ uint32_t flags; // read filtering flags
- } aux_t;
-
--void *bed_read(const char *fn); // read a BED or position list file
--void bed_destroy(void *_h); // destroy the BED data structure
--int bed_overlap(const void *_h, const char *chr, int beg, int end); // test if chr:beg-end overlaps
--int bed_query(const void *_h, const char *chr, int pos, int *beg, int *end);
--
- // This function reads a BAM alignment from one BAM file.
- static int read_bam(void *data, bam1_t *b) // read level filters better go here to avoid pileup
- {
-@@ -64,7 +63,7 @@
- {
- ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b);
- if ( ret<0 ) break;
-- if ( b->core.flag & (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) ) continue;
-+ if ( b->core.flag & aux->flags) continue;
- if ( (int)b->core.qual < aux->min_mapQ ) continue;
- if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue;
- break;
-@@ -81,15 +80,21 @@
- fprintf(samtools_stderr, " -a output all positions (including zero depth)\n");
- fprintf(samtools_stderr, " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n");
- fprintf(samtools_stderr, " -b <bed> list of positions or regions\n");
-+ fprintf(samtools_stderr, " -X use customized index files\n");
- fprintf(samtools_stderr, " -f <list> list of input BAM filenames, one per line [null]\n");
-+ fprintf(samtools_stderr, " -H print a file header\n");
- fprintf(samtools_stderr, " -l <int> read length threshold (ignore reads shorter than <int>) [0]\n");
- fprintf(samtools_stderr, " -d/-m <int> maximum coverage depth [8000]. If 0, depth is set to the maximum\n"
- " integer value, effectively removing any depth limit.\n"); // the htslib's default
-+ fprintf(samtools_stderr, " -o FILE where to write output to [samtools_stdout]\n");
- fprintf(samtools_stderr, " -q <int> base quality threshold [0]\n");
- fprintf(samtools_stderr, " -Q <int> mapping quality threshold [0]\n");
- fprintf(samtools_stderr, " -r <chr:from-to> region\n");
-+ fprintf(samtools_stderr, " -g <flags> include reads that have any of the specified flags set [0]\n");
-+ fprintf(samtools_stderr, " -G <flags> filter out reads that have any of the specified flags set"
-+ " [UNMAP,SECONDARY,QCFAIL,DUP]\n");
-
-- sam_global_opt_help(samtools_stderr, "-.--.-");
-+ sam_global_opt_help(samtools_stderr, "-.--.--.");
-
- fprintf(samtools_stderr, "\n");
- fprintf(samtools_stderr, "The output is a simple tab-separated table with three columns: reference name,\n");
-@@ -97,21 +102,27 @@
- fprintf(samtools_stderr, "omitted by default; see the -a option.\n");
- fprintf(samtools_stderr, "\n");
-
-- return 1;
-+ return EXIT_FAILURE;
- }
-
- int main_depth(int argc, char *argv[])
- {
-- int i, n, tid, reg_tid, beg, end, pos, *n_plp, baseQ = 0, mapQ = 0, min_len = 0;
-+ int i, n, tid, reg_tid, *n_plp, baseQ = 0, mapQ = 0, min_len = 0, has_index_file = 0;
-+ hts_pos_t beg, end, pos, last_pos = -1;
- int all = 0, status = EXIT_SUCCESS, nfiles, max_depth = -1;
- const bam_pileup1_t **plp;
- char *reg = 0; // specified region
- void *bed = 0; // BED data structure
- char *file_list = NULL, **fn = NULL;
-- bam_hdr_t *h = NULL; // BAM header of the 1st input
-+ sam_hdr_t *h = NULL; // BAM header of the 1st input
- aux_t **data;
- bam_mplp_t mplp;
-- int last_pos = -1, last_tid = -1, ret;
-+ int last_tid = -1, ret;
-+ int print_header = 0;
-+ char *output_file = NULL;
-+ FILE *file_out = samtools_stdout;
-+ uint32_t flags = (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP);
-+ int tflags = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-@@ -120,19 +131,41 @@
- };
-
- // parse the command line
-- while ((n = getopt_long(argc, argv, "r:b:q:Q:l:f:am:d:", lopts, NULL)) >= 0) {
-+ while ((n = getopt_long(argc, argv, "r:b:Xq:Q:l:f:am:d:Ho:g:G:", lopts, NULL)) >= 0) {
- switch (n) {
- case 'l': min_len = atoi(optarg); break; // minimum query length
- case 'r': reg = strdup(optarg); break; // parsing a region requires a BAM header
- case 'b':
- bed = bed_read(optarg); // BED or position list file can be parsed now
-- if (!bed) { print_error_errno("depth", "Could not read file \"%s\"", optarg); return 1; }
-+ if (!bed) {
-+ print_error_errno("depth", "Could not read file \"%s\"", optarg);
-+ return EXIT_FAILURE;
-+ }
- break;
-+ case 'X': has_index_file = 1; break;
- case 'q': baseQ = atoi(optarg); break; // base quality threshold
- case 'Q': mapQ = atoi(optarg); break; // mapping quality threshold
- case 'f': file_list = optarg; break;
- case 'a': all++; break;
- case 'd': case 'm': max_depth = atoi(optarg); break; // maximum coverage depth
-+ case 'H': print_header = 1; break;
-+ case 'o': output_file = optarg; break;
-+ case 'g':
-+ tflags = bam_str2flag(optarg);
-+ if (tflags < 0 || tflags > BAM_FMAX) {
-+ print_error_errno("depth", "Flag value \"%s\" is not supported", optarg);
-+ return 1;
-+ }
-+ flags &= ~tflags;
-+ break;
-+ case 'G':
-+ tflags = bam_str2flag(optarg);
-+ if (tflags < 0 || tflags > BAM_FMAX) {
-+ print_error_errno("depth", "Flag value \"%s\" is not supported", optarg);
-+ return 1;
-+ }
-+ flags |= tflags;
-+ break;
- default: if (parse_sam_global_opt(n, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return usage();
-@@ -141,18 +174,40 @@
- if (optind == argc && !file_list)
- return usage();
-
-+ /* output file provided by user */
-+ if (output_file != NULL && strcmp(output_file,"-")!=0) {
-+ file_out = fopen( output_file, "w" );
-+ if (file_out == NULL) {
-+ print_error_errno("depth", "Cannot open \"%s\" for writing.", output_file);
-+ return EXIT_FAILURE;
-+ }
-+ }
-+
-+
- // initialize the auxiliary data structures
- if (file_list)
- {
-- if ( read_file_list(file_list,&nfiles,&fn) ) return 1;
-+ if (has_index_file) {
-+ print_error("depth", "The -f option cannot be combined with -X");
-+ return 1;
-+ }
-+ if ( read_file_list(file_list,&nfiles,&fn) ) return EXIT_FAILURE;
- n = nfiles;
- argv = fn;
- optind = 0;
- }
-- else
-- n = argc - optind; // the number of BAMs on the command line
-+ else if (has_index_file) { // Calculate # of input BAM files
-+ if ((argc - optind) % 2 != 0) {
-+ fprintf(samtools_stderr, "Error: Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ n = (argc - optind) / 2;
-+ } else {
-+ n = argc - optind;
-+ }
- data = calloc(n, sizeof(aux_t*)); // data[i] for the i-th input
-- reg_tid = 0; beg = 0; end = INT_MAX; // set the default region
-+ reg_tid = 0; beg = 0; end = HTS_POS_MAX; // set the default region
-+
- for (i = 0; i < n; ++i) {
- int rf;
- data[i] = calloc(1, sizeof(aux_t));
-@@ -165,24 +220,32 @@
- rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ;
- if (baseQ) rf |= SAM_QUAL;
- if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-- fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-- return 1;
-+ print_error_errno("depth", "Failed to set CRAM_OPT_REQUIRED_FIELDS value");
-+ status = EXIT_FAILURE;
-+ goto depth_end;
- }
- if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) {
-- fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-- return 1;
-+ print_error_errno("depth", "Failed to set CRAM_OPT_DECODE_MD value");
-+ status = EXIT_FAILURE;
-+ goto depth_end;
- }
- data[i]->min_mapQ = mapQ; // set the mapQ filter
- data[i]->min_len = min_len; // set the qlen filter
- data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header
- if (data[i]->hdr == NULL) {
-- fprintf(samtools_stderr, "Couldn't read header for \"%s\"\n",
-- argv[optind+i]);
-+ print_error_errno("depth", "Couldn't read header for \"%s\"",
-+ argv[optind+i]);
- status = EXIT_FAILURE;
- goto depth_end;
- }
- if (reg) { // if a region is specified
-- hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (has_index_file) {
-+ idx = sam_index_load2(data[i]->fp, argv[optind+i], argv[optind+i+n]); // load the index
-+ } else {
-+ idx = sam_index_load(data[i]->fp, argv[optind+i]);
-+ }
- if (idx == NULL) {
- print_error("depth", "can't load index for \"%s\"", argv[optind+i]);
- status = EXIT_FAILURE;
-@@ -196,8 +259,16 @@
- goto depth_end;
- }
- }
-+ data[i]->flags = flags;
- }
--
-+ if (print_header) {
-+ fputs("#CHROM\tPOS", file_out);
-+ for (i = 0; i < n; ++i) {
-+ fputc('\t', file_out);
-+ fputs(argv[optind+i], file_out);
-+ }
-+ fputc('\n', file_out);
-+ }
- h = data[0]->hdr; // easy access to the header of the 1st BAM
- if (reg) {
- beg = data[0]->iter->beg; // and to the parsed region coordinates
-@@ -213,21 +284,22 @@
- bam_mplp_set_maxcnt(mplp,INT_MAX);
- n_plp = calloc(n, sizeof(int)); // n_plp[i] is the number of covering reads from the i-th BAM
- plp = calloc(n, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp)
-- while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
-+ while ((ret=bam_mplp64_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
- if (pos < beg || pos >= end) continue; // out of range; skip
-- if (tid >= h->n_targets) continue; // diff number of @SQ lines per file?
-+ if (tid >= sam_hdr_nref(h)) continue; // diff number of @SQ lines per file?
- if (all) {
- while (tid > last_tid) {
- if (last_tid >= 0 && !reg) {
- // Deal with remainder or entirety of last tid.
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- // Horribly inefficient, but the bed API is an obfuscated black box.
-- if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[last_tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, last_tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- fputc('\t', samtools_stdout), fputc('0', samtools_stdout);
-- fputc('\n', samtools_stdout);
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
- }
- last_tid++;
-@@ -239,19 +311,21 @@
- // Deal with missing portion of current tid
- while (++last_pos < pos) {
- if (last_pos < beg) continue; // out of range; skip
-- if (bed && bed_overlap(bed, h->target_name[tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- fputc('\t', samtools_stdout), fputc('0', samtools_stdout);
-- fputc('\n', samtools_stdout);
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
-
- last_tid = tid;
- last_pos = pos;
- }
-- if (bed && bed_overlap(bed, h->target_name[tid], pos, pos + 1) == 0) continue;
-- fputs(h->target_name[tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", pos+1); // a customized fprintf(samtools_stdout, ) would be faster
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, tid), pos, pos + 1) == 0) continue;
-+ fputs(sam_hdr_tid2name(h, tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, pos+1); // a customized fprintf(samtools_stdout, ) would be faster
- for (i = 0; i < n; ++i) { // base level filters have to go here
- int j, m = 0;
- for (j = 0; j < n_plp[i]; ++j) {
-@@ -260,9 +334,9 @@
- else if (p->qpos < p->b->core.l_qseq &&
- bam_get_qual(p->b)[p->qpos] < baseQ) ++m; // low base quality
- }
-- fprintf(samtools_stdout, "\t%d", n_plp[i] - m); // this the depth to output
-+ fprintf(file_out, "\t%d", n_plp[i] - m); // this the depth to output
- }
-- fputc('\n', samtools_stdout);
-+ fputc('\n', file_out);
- }
- if (ret < 0) status = EXIT_FAILURE;
- free(n_plp); free(plp);
-@@ -270,19 +344,20 @@
-
- if (all) {
- // Handle terminating region
-- if (last_tid < 0 && reg && all > 1) {
-+ if (last_tid < 0 && reg) {
- last_tid = reg_tid;
- last_pos = beg-1;
- }
-- while (last_tid >= 0 && last_tid < h->n_targets) {
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (last_tid >= 0 && last_tid < sam_hdr_nref(h)) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- if (last_pos >= end) break;
-- if (bed && bed_overlap(bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (bed && bed_overlap(bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- fputs(h->target_name[last_tid], samtools_stdout); fprintf(samtools_stdout, "\t%d", last_pos+1);
-+ fputs(sam_hdr_tid2name(h, last_tid), file_out);
-+ fprintf(file_out, "\t%"PRIhts_pos, last_pos+1);
- for (i = 0; i < n; i++)
-- fputc('\t', samtools_stdout), fputc('0', samtools_stdout);
-- fputc('\n', samtools_stdout);
-+ fputc('\t', file_out), fputc('0', file_out);
-+ fputc('\n', file_out);
- }
- last_tid++;
- last_pos = -1;
-@@ -292,8 +367,17 @@
- }
-
- depth_end:
-+ if (fclose(file_out) != 0) {
-+ if (status == EXIT_SUCCESS) {
-+ print_error_errno("depth", "error on closing \"%s\"",
-+ (output_file && strcmp(output_file, "-") != 0
-+ ? output_file : "samtools_stdout"));
-+ status = EXIT_FAILURE;
-+ }
-+ }
-+
- for (i = 0; i < n && data[i]; ++i) {
-- bam_hdr_destroy(data[i]->hdr);
-+ sam_hdr_destroy(data[i]->hdr);
- if (data[i]->fp) sam_close(data[i]->fp);
- hts_itr_destroy(data[i]->iter);
- free(data[i]);
---- python-pysam.orig/samtools/bam_addrprg.c
-+++ python-pysam/samtools/bam_addrprg.c
-@@ -1,6 +1,6 @@
- /* bam_addrprg.c -- samtools command to add or replace readgroups.
-
-- Copyright (c) 2013, 2015, 2016 Genome Research Limited.
-+ Copyright (c) 2013, 2015-2017, 2019 Genome Research Limited.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -47,6 +47,7 @@
- char* output_name;
- char* rg_id;
- char* rg_line;
-+ int no_pg;
- rg_mode mode;
- sam_global_args ga;
- htsThreadPool p;
-@@ -58,9 +59,9 @@
-
- struct state {
- samFile* input_file;
-- bam_hdr_t* input_header;
-+ sam_hdr_t* input_header;
- samFile* output_file;
-- bam_hdr_t* output_header;
-+ sam_hdr_t* output_header;
- char* rg_id;
- void (*mode_func)(const state_t*, bam1_t*);
- };
-@@ -71,6 +72,7 @@
- free(opts->rg_id);
- free(opts->output_name);
- free(opts->input_name);
-+ free(opts->rg_line);
- if (opts->p.pool) hts_tpool_destroy(opts->p.pool);
- sam_global_args_free(&opts->ga);
- free(opts);
-@@ -81,9 +83,9 @@
- if (!state) return;
- free(state->rg_id);
- if (state->output_file) sam_close(state->output_file);
-- bam_hdr_destroy(state->output_header);
-+ sam_hdr_destroy(state->output_header);
- if (state->input_file) sam_close(state->input_file);
-- bam_hdr_destroy(state->input_header);
-+ sam_hdr_destroy(state->input_header);
- free(state);
- }
-
-@@ -147,20 +149,6 @@
- return ns;
- }
-
--// These are to be replaced by samtools header parser
--// Extracts the first @RG line from a string.
--static char* get_rg_line(const char* text, size_t* last)
--{
-- const char* rg = text;
-- if (rg[0] != '@' || rg[1] != 'R' || rg[2] != 'G' ) {
-- if ((rg = (const char*)strstr(text,"\n@RG")) == NULL) {
-- return NULL;
-- }
-- rg++;//skip initial \n
-- }
-- // duplicate the line for return
-- return dup_substring(rg, strchr(rg, '\n'), last);
--}
-
- // Given a @RG line return the id
- static char* get_rg_id(const char *line)
-@@ -172,44 +160,6 @@
- return dup_substring(id, strchr(id, '\t'), NULL);
- }
-
--// Confirms the existance of an RG line with a given ID in a bam header
--static bool confirm_rg( const bam_hdr_t *hdr, const char* rgid )
--{
-- assert( hdr != NULL && rgid != NULL );
--
-- const char *ptr = hdr->text;
-- bool found = false;
-- while (ptr != NULL && *ptr != '\0' && found == false ) {
-- size_t end = 0;
-- char* line = get_rg_line(ptr, &end);
-- if (line == NULL) break; // No more @RG
-- char* id;
-- if (((id = get_rg_id(line)) != NULL) && !strcmp(id, rgid)) {
-- found = true;
-- }
-- free(id);
-- free(line);
-- ptr += end;
-- }
-- return found;
--}
--
--static char* get_first_rgid( const bam_hdr_t *hdr )
--{
-- assert( hdr != NULL );
-- const char *ptr = hdr->text;
-- char* found = NULL;
-- while (ptr != NULL && *ptr != '\0' && found == NULL ) {
-- size_t end = 0;
-- char* line = get_rg_line(ptr, &end);
-- if ( line ) {
-- found = get_rg_id(line);
-- } else break;
-- free(line);
-- ptr += end;
-- }
-- return found;
--}
-
- static void usage(FILE *fp)
- {
-@@ -221,8 +171,9 @@
- " -o FILE Where to write output to [stdout]\n"
- " -r STRING @RG line text\n"
- " -R STRING ID of @RG line in existing header to use\n"
-+ " --no-PG Do not add a PG line\n"
- );
-- sam_global_opt_help(fp, "..O..@");
-+ sam_global_opt_help(fp, "..O..@..");
- }
-
- static bool parse_args(int argc, char** argv, parsed_opts_t** opts)
-@@ -242,6 +193,7 @@
- sam_global_args_init(&retval->ga);
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS(0, 0, 'O', 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
- kstring_t rg_line = {0,0,NULL};
-@@ -280,6 +232,9 @@
- usage(stdout);
- free(retval);
- return true;
-+ case 1:
-+ retval->no_pg = 1;
-+ break;
- case '?':
- usage(stderr);
- free(retval);
-@@ -316,6 +271,7 @@
- cleanup_opts(retval);
- return false;
- }
-+ free(retval->rg_line);
- retval->rg_line = tmp;
- }
- retval->input_name = strdup(argv[optind+0]);
-@@ -375,7 +331,7 @@
- }
- retval->input_header = sam_hdr_read(retval->input_file);
-
-- retval->output_header = bam_hdr_dup(retval->input_header);
-+ retval->output_header = sam_hdr_dup(retval->input_header);
- if (opts->output_name) // File format auto-detection
- sam_open_mode(output_mode + 1, opts->output_name, NULL);
- retval->output_file = sam_open_format(opts->output_name == NULL?"-":opts->output_name, output_mode, &opts->ga.out);
-@@ -393,34 +349,39 @@
- if (opts->rg_line) {
- // Append new RG line to header.
- // Check does not already exist
-- if ( confirm_rg(retval->output_header, opts->rg_id) ) {
-+ kstring_t hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(retval->output_header, "RG", "ID", opts->rg_id, &hdr_line) == 0) {
- fprintf(stderr, "[init] ID of new RG line specified conflicts with that of an existing header RG line. Overwrite not yet implemented.\n");
-+ free(hdr_line.s);
- return false;
- }
-- retval->rg_id = strdup(opts->rg_id);
-- size_t new_len = strlen( retval->output_header->text ) + strlen( opts->rg_line ) + 2;
-- char* new_header = malloc(new_len);
-- if (!new_header) {
-- fprintf(stderr, "[init] Out of memory whilst writing new header.\n");
-+ if (-1 == sam_hdr_add_lines(retval->output_header, opts->rg_line, strlen(opts->rg_line))) {
-+ fprintf(stderr, "[init] Error adding RG line with ID:%s to the output header.\n", opts->rg_id);
-+ return false;
-+ }
-+ if (opts->mode == overwrite_all &&
-+ -1 == sam_hdr_remove_except(retval->output_header, "RG", "ID", opts->rg_id)) {
-+ fprintf(stderr, "[init] Error removing the old RG lines from the output header.\n");
- return false;
- }
-- sprintf(new_header,"%s%s\n", retval->output_header->text, opts->rg_line);
-- free(retval->output_header->text);
-- retval->output_header->text = new_header;
-- retval->output_header->l_text = (int)new_len - 1;
-+ retval->rg_id = strdup(opts->rg_id);
- } else {
- if (opts->rg_id) {
- // Confirm what has been supplied exists
-- if ( !confirm_rg(retval->output_header, opts->rg_id) ) {
-+ kstring_t hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(retval->output_header, "RG", "ID", opts->rg_id, &hdr_line) < 0) {
- fprintf(stderr, "RG ID supplied does not exist in header. Supply full @RG line with -r instead?\n");
- return false;
- }
- retval->rg_id = strdup(opts->rg_id);
-+ free(hdr_line.s);
- } else {
-- if ((retval->rg_id = get_first_rgid(retval->output_header)) == NULL ) {
-+ kstring_t rg_id = { 0, 0, NULL };
-+ if (sam_hdr_find_tag_id(retval->output_header, "RG", NULL, NULL, "ID", &rg_id) < 0) {
- fprintf(stderr, "No RG specified on command line or in existing header.\n");
- return false;
- }
-+ retval->rg_id = ks_release(&rg_id);
- }
- }
-
-@@ -436,12 +397,24 @@
- return true;
- }
-
--static bool readgroupise(state_t* state)
-+static bool readgroupise(parsed_opts_t *opts, state_t* state, char *arg_list)
- {
-+ if (!opts->no_pg && sam_hdr_add_pg(state->output_header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ return false;
-+
- if (sam_hdr_write(state->output_file, state->output_header) != 0) {
- print_error_errno("addreplacerg", "[%s] Could not write header to output file", __func__);
- return false;
- }
-+ char *idx_fn = NULL;
-+ if (opts->ga.write_index) {
-+ if (!(idx_fn = auto_index(state->output_file, opts->output_name, state->output_header)))
-+ return false;
-+ }
-
- bam1_t* file_read = bam_init1();
- int ret;
-@@ -451,14 +424,25 @@
- if (sam_write1(state->output_file, state->output_header, file_read) < 0) {
- print_error_errno("addreplacerg", "[%s] Could not write read to output file", __func__);
- bam_destroy1(file_read);
-+ free(idx_fn);
- return false;
- }
- }
- bam_destroy1(file_read);
- if (ret != -1) {
- print_error_errno("addreplacerg", "[%s] Error reading from input file", __func__);
-+ free(idx_fn);
- return false;
- } else {
-+
-+ if (opts->ga.write_index) {
-+ if (sam_idx_save(state->output_file) < 0) {
-+ print_error_errno("addreplacerg", "[%s] Writing index failed", __func__);
-+ free(idx_fn);
-+ return false;
-+ }
-+ }
-+ free(idx_fn);
- return true;
- }
- }
-@@ -467,20 +451,25 @@
- {
- parsed_opts_t* opts = NULL;
- state_t* state = NULL;
-+ char *arg_list = stringify_argv(argc+1, argv-1);
-+ if (!arg_list)
-+ return EXIT_FAILURE;
-
- if (!parse_args(argc, argv, &opts)) goto error;
-- if (opts == NULL) return EXIT_SUCCESS; // Not an error but user doesn't want us to proceed
-- if (!opts || !init(opts, &state)) goto error;
--
-- if (!readgroupise(state)) goto error;
-+ if (opts) { // Not an error but user doesn't want us to proceed
-+ if (!init(opts, &state) || !readgroupise(opts, state, arg_list))
-+ goto error;
-+ }
-
- cleanup_state(state);
- cleanup_opts(opts);
-+ free(arg_list);
-
- return EXIT_SUCCESS;
- error:
- cleanup_state(state);
- cleanup_opts(opts);
-+ free(arg_list);
-
- return EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/bam_addrprg.c.pysam.c
-+++ python-pysam/samtools/bam_addrprg.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_addrprg.c -- samtools command to add or replace readgroups.
-
-- Copyright (c) 2013, 2015, 2016 Genome Research Limited.
-+ Copyright (c) 2013, 2015-2017, 2019 Genome Research Limited.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -49,6 +49,7 @@
- char* output_name;
- char* rg_id;
- char* rg_line;
-+ int no_pg;
- rg_mode mode;
- sam_global_args ga;
- htsThreadPool p;
-@@ -60,9 +61,9 @@
-
- struct state {
- samFile* input_file;
-- bam_hdr_t* input_header;
-+ sam_hdr_t* input_header;
- samFile* output_file;
-- bam_hdr_t* output_header;
-+ sam_hdr_t* output_header;
- char* rg_id;
- void (*mode_func)(const state_t*, bam1_t*);
- };
-@@ -73,6 +74,7 @@
- free(opts->rg_id);
- free(opts->output_name);
- free(opts->input_name);
-+ free(opts->rg_line);
- if (opts->p.pool) hts_tpool_destroy(opts->p.pool);
- sam_global_args_free(&opts->ga);
- free(opts);
-@@ -83,9 +85,9 @@
- if (!state) return;
- free(state->rg_id);
- if (state->output_file) sam_close(state->output_file);
-- bam_hdr_destroy(state->output_header);
-+ sam_hdr_destroy(state->output_header);
- if (state->input_file) sam_close(state->input_file);
-- bam_hdr_destroy(state->input_header);
-+ sam_hdr_destroy(state->input_header);
- free(state);
- }
-
-@@ -149,20 +151,6 @@
- return ns;
- }
-
--// These are to be replaced by samtools header parser
--// Extracts the first @RG line from a string.
--static char* get_rg_line(const char* text, size_t* last)
--{
-- const char* rg = text;
-- if (rg[0] != '@' || rg[1] != 'R' || rg[2] != 'G' ) {
-- if ((rg = (const char*)strstr(text,"\n@RG")) == NULL) {
-- return NULL;
-- }
-- rg++;//skip initial \n
-- }
-- // duplicate the line for return
-- return dup_substring(rg, strchr(rg, '\n'), last);
--}
-
- // Given a @RG line return the id
- static char* get_rg_id(const char *line)
-@@ -174,44 +162,6 @@
- return dup_substring(id, strchr(id, '\t'), NULL);
- }
-
--// Confirms the existance of an RG line with a given ID in a bam header
--static bool confirm_rg( const bam_hdr_t *hdr, const char* rgid )
--{
-- assert( hdr != NULL && rgid != NULL );
--
-- const char *ptr = hdr->text;
-- bool found = false;
-- while (ptr != NULL && *ptr != '\0' && found == false ) {
-- size_t end = 0;
-- char* line = get_rg_line(ptr, &end);
-- if (line == NULL) break; // No more @RG
-- char* id;
-- if (((id = get_rg_id(line)) != NULL) && !strcmp(id, rgid)) {
-- found = true;
-- }
-- free(id);
-- free(line);
-- ptr += end;
-- }
-- return found;
--}
--
--static char* get_first_rgid( const bam_hdr_t *hdr )
--{
-- assert( hdr != NULL );
-- const char *ptr = hdr->text;
-- char* found = NULL;
-- while (ptr != NULL && *ptr != '\0' && found == NULL ) {
-- size_t end = 0;
-- char* line = get_rg_line(ptr, &end);
-- if ( line ) {
-- found = get_rg_id(line);
-- } else break;
-- free(line);
-- ptr += end;
-- }
-- return found;
--}
-
- static void usage(FILE *fp)
- {
-@@ -223,8 +173,9 @@
- " -o FILE Where to write output to [samtools_stdout]\n"
- " -r STRING @RG line text\n"
- " -R STRING ID of @RG line in existing header to use\n"
-+ " --no-PG Do not add a PG line\n"
- );
-- sam_global_opt_help(fp, "..O..@");
-+ sam_global_opt_help(fp, "..O..@..");
- }
-
- static bool parse_args(int argc, char** argv, parsed_opts_t** opts)
-@@ -244,6 +195,7 @@
- sam_global_args_init(&retval->ga);
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS(0, 0, 'O', 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
- kstring_t rg_line = {0,0,NULL};
-@@ -282,6 +234,9 @@
- usage(samtools_stdout);
- free(retval);
- return true;
-+ case 1:
-+ retval->no_pg = 1;
-+ break;
- case '?':
- usage(samtools_stderr);
- free(retval);
-@@ -318,6 +273,7 @@
- cleanup_opts(retval);
- return false;
- }
-+ free(retval->rg_line);
- retval->rg_line = tmp;
- }
- retval->input_name = strdup(argv[optind+0]);
-@@ -377,7 +333,7 @@
- }
- retval->input_header = sam_hdr_read(retval->input_file);
-
-- retval->output_header = bam_hdr_dup(retval->input_header);
-+ retval->output_header = sam_hdr_dup(retval->input_header);
- if (opts->output_name) // File format auto-detection
- sam_open_mode(output_mode + 1, opts->output_name, NULL);
- retval->output_file = sam_open_format(opts->output_name == NULL?"-":opts->output_name, output_mode, &opts->ga.out);
-@@ -395,34 +351,39 @@
- if (opts->rg_line) {
- // Append new RG line to header.
- // Check does not already exist
-- if ( confirm_rg(retval->output_header, opts->rg_id) ) {
-+ kstring_t hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(retval->output_header, "RG", "ID", opts->rg_id, &hdr_line) == 0) {
- fprintf(samtools_stderr, "[init] ID of new RG line specified conflicts with that of an existing header RG line. Overwrite not yet implemented.\n");
-+ free(hdr_line.s);
- return false;
- }
-- retval->rg_id = strdup(opts->rg_id);
-- size_t new_len = strlen( retval->output_header->text ) + strlen( opts->rg_line ) + 2;
-- char* new_header = malloc(new_len);
-- if (!new_header) {
-- fprintf(samtools_stderr, "[init] Out of memory whilst writing new header.\n");
-+ if (-1 == sam_hdr_add_lines(retval->output_header, opts->rg_line, strlen(opts->rg_line))) {
-+ fprintf(samtools_stderr, "[init] Error adding RG line with ID:%s to the output header.\n", opts->rg_id);
-+ return false;
-+ }
-+ if (opts->mode == overwrite_all &&
-+ -1 == sam_hdr_remove_except(retval->output_header, "RG", "ID", opts->rg_id)) {
-+ fprintf(samtools_stderr, "[init] Error removing the old RG lines from the output header.\n");
- return false;
- }
-- sprintf(new_header,"%s%s\n", retval->output_header->text, opts->rg_line);
-- free(retval->output_header->text);
-- retval->output_header->text = new_header;
-- retval->output_header->l_text = (int)new_len - 1;
-+ retval->rg_id = strdup(opts->rg_id);
- } else {
- if (opts->rg_id) {
- // Confirm what has been supplied exists
-- if ( !confirm_rg(retval->output_header, opts->rg_id) ) {
-+ kstring_t hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(retval->output_header, "RG", "ID", opts->rg_id, &hdr_line) < 0) {
- fprintf(samtools_stderr, "RG ID supplied does not exist in header. Supply full @RG line with -r instead?\n");
- return false;
- }
- retval->rg_id = strdup(opts->rg_id);
-+ free(hdr_line.s);
- } else {
-- if ((retval->rg_id = get_first_rgid(retval->output_header)) == NULL ) {
-+ kstring_t rg_id = { 0, 0, NULL };
-+ if (sam_hdr_find_tag_id(retval->output_header, "RG", NULL, NULL, "ID", &rg_id) < 0) {
- fprintf(samtools_stderr, "No RG specified on command line or in existing header.\n");
- return false;
- }
-+ retval->rg_id = ks_release(&rg_id);
- }
- }
-
-@@ -438,12 +399,24 @@
- return true;
- }
-
--static bool readgroupise(state_t* state)
-+static bool readgroupise(parsed_opts_t *opts, state_t* state, char *arg_list)
- {
-+ if (!opts->no_pg && sam_hdr_add_pg(state->output_header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ return false;
-+
- if (sam_hdr_write(state->output_file, state->output_header) != 0) {
- print_error_errno("addreplacerg", "[%s] Could not write header to output file", __func__);
- return false;
- }
-+ char *idx_fn = NULL;
-+ if (opts->ga.write_index) {
-+ if (!(idx_fn = auto_index(state->output_file, opts->output_name, state->output_header)))
-+ return false;
-+ }
-
- bam1_t* file_read = bam_init1();
- int ret;
-@@ -453,14 +426,25 @@
- if (sam_write1(state->output_file, state->output_header, file_read) < 0) {
- print_error_errno("addreplacerg", "[%s] Could not write read to output file", __func__);
- bam_destroy1(file_read);
-+ free(idx_fn);
- return false;
- }
- }
- bam_destroy1(file_read);
- if (ret != -1) {
- print_error_errno("addreplacerg", "[%s] Error reading from input file", __func__);
-+ free(idx_fn);
- return false;
- } else {
-+
-+ if (opts->ga.write_index) {
-+ if (sam_idx_save(state->output_file) < 0) {
-+ print_error_errno("addreplacerg", "[%s] Writing index failed", __func__);
-+ free(idx_fn);
-+ return false;
-+ }
-+ }
-+ free(idx_fn);
- return true;
- }
- }
-@@ -469,20 +453,25 @@
- {
- parsed_opts_t* opts = NULL;
- state_t* state = NULL;
-+ char *arg_list = stringify_argv(argc+1, argv-1);
-+ if (!arg_list)
-+ return EXIT_FAILURE;
-
- if (!parse_args(argc, argv, &opts)) goto error;
-- if (opts == NULL) return EXIT_SUCCESS; // Not an error but user doesn't want us to proceed
-- if (!opts || !init(opts, &state)) goto error;
--
-- if (!readgroupise(state)) goto error;
-+ if (opts) { // Not an error but user doesn't want us to proceed
-+ if (!init(opts, &state) || !readgroupise(opts, state, arg_list))
-+ goto error;
-+ }
-
- cleanup_state(state);
- cleanup_opts(opts);
-+ free(arg_list);
-
- return EXIT_SUCCESS;
- error:
- cleanup_state(state);
- cleanup_opts(opts);
-+ free(arg_list);
-
- return EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/bam_aux.c
-+++ python-pysam/samtools/bam_aux.c
-@@ -1,6 +1,6 @@
- /* bam_aux.c -- remaining aux field handling.
-
-- Copyright (C) 2008-2010, 2013 Genome Research Ltd.
-+ Copyright (C) 2008-2010, 2013, 2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -61,21 +61,15 @@
- return 0;
- }
-
-+// Only here due to libbam.a being used by some applications.
- int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end)
- {
-- const char *name_lim = hts_parse_reg(str, beg, end);
-- if (name_lim) {
-- char *name = malloc(name_lim - str + 1);
-- memcpy(name, str, name_lim - str);
-- name[name_lim - str] = '\0';
-- *ref_id = bam_name2id(header, name);
-- free(name);
-- }
-- else {
-- // not parsable as a region, but possibly a sequence named "foo:a"
-- *ref_id = bam_name2id(header, str);
-- *beg = 0; *end = INT_MAX;
-- }
-- if (*ref_id == -1) return -1;
-- return *beg <= *end? 0 : -1;
-+ hts_pos_t beg64, end64;
-+ int r;
-+ r = sam_parse_region(header, str, ref_id, &beg64, &end64, 0) ? 0 : -1;
-+ if (beg64 > INT_MAX || end64 > INT_MAX)
-+ return -1;
-+ *beg = beg64;
-+ *end = end64;
-+ return r;
- }
---- python-pysam.orig/samtools/bam_aux.c.pysam.c
-+++ python-pysam/samtools/bam_aux.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_aux.c -- remaining aux field handling.
-
-- Copyright (C) 2008-2010, 2013 Genome Research Ltd.
-+ Copyright (C) 2008-2010, 2013, 2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -63,21 +63,15 @@
- return 0;
- }
-
-+// Only here due to libbam.a being used by some applications.
- int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end)
- {
-- const char *name_lim = hts_parse_reg(str, beg, end);
-- if (name_lim) {
-- char *name = malloc(name_lim - str + 1);
-- memcpy(name, str, name_lim - str);
-- name[name_lim - str] = '\0';
-- *ref_id = bam_name2id(header, name);
-- free(name);
-- }
-- else {
-- // not parsable as a region, but possibly a sequence named "foo:a"
-- *ref_id = bam_name2id(header, str);
-- *beg = 0; *end = INT_MAX;
-- }
-- if (*ref_id == -1) return -1;
-- return *beg <= *end? 0 : -1;
-+ hts_pos_t beg64, end64;
-+ int r;
-+ r = sam_parse_region(header, str, ref_id, &beg64, &end64, 0) ? 0 : -1;
-+ if (beg64 > INT_MAX || end64 > INT_MAX)
-+ return -1;
-+ *beg = beg64;
-+ *end = end64;
-+ return r;
- }
---- python-pysam.orig/samtools/bam_cat.c
-+++ python-pysam/samtools/bam_cat.c
-@@ -1,6 +1,6 @@
- /* bam_cat.c -- efficiently concatenates bam files.
-
-- Copyright (C) 2008-2009, 2011-2013, 2015-2016 Genome Research Ltd.
-+ Copyright (C) 2008-2009, 2011-2013, 2015-2017, 2019 Genome Research Ltd.
- Modified SAMtools work copyright (C) 2010 Illumina, Inc.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
-@@ -45,162 +45,43 @@
- #include "htslib/bgzf.h"
- #include "htslib/sam.h"
- #include "htslib/cram.h"
--#include "htslib/khash.h"
-+#include "htslib/kstring.h"
- #include "samtools.h"
--
--KHASH_MAP_INIT_STR(s2i, int)
--
--// Bi-directional lookup.
--// We can go from name to ID or ID to name.
--typedef struct khash_s2i {
-- khash_t(s2i) *h;
-- int n_id, a_id;
-- const char **id; // map Nth entry back to key
-- const char **line;
--} khash_s2i;
--
--static int hash_s2i_inc(khash_s2i *hash, const char *str, const char *line, int *added) {
-- // loosly based on khash_str2int_inc
-- khint_t k;
-- int n;
--
-- if ( !hash ) return -1;
-- // inefficient, but works
-- char *my_str = strdup(str);
-- k = kh_put(s2i, hash->h, my_str, added);
-- if (*added == 0) {
-- free(my_str);
-- return kh_val(hash->h, k);
-- }
-- n = hash->n_id++;
-- kh_val(hash->h, k) = n;
-- if (hash->a_id <= n) {
-- const char **id;
-- hash->a_id = (n+1)*2;
-- if (!(id = realloc(hash->id, hash->a_id*sizeof(*hash->id))))
-- return -1;
-- hash->id = id;
-- if (!(id = realloc(hash->line, hash->a_id*sizeof(*hash->line))))
-- return -1;
-- hash->line = id;
-- }
-- hash->id[n] = my_str; // reverse map
-- if (line)
-- hash->line[n] = line;
--
-- return n;
--}
--
--khash_s2i *hash_s2i_create(void) {
-- khash_s2i *h = calloc(1, sizeof(*h));
-- if (!h)
-- return NULL;
--
-- h->h = kh_init(s2i);
-- if (!h->h) {
-- free(h);
-- return NULL;
-- }
-- return h;
--}
--
--static void hash_s2i_free(khash_s2i *hash) {
-- // based on khash_str2int_destroy_free
-- khint_t k;
-- if (!hash) return;
-- if (hash->h) {
-- for (k = 0; k < kh_end(hash->h); ++k)
-- if (kh_exist(hash->h, k)) free((char*)kh_key(hash->h, k));
-- kh_destroy(s2i, hash->h);
-- }
-- if (hash->id)
-- free(hash->id);
-- if (hash->line)
-- free(hash->line);
--
-- free(hash);
--}
--
--static khash_s2i *hash_rg(const bam_hdr_t *h) {
-- khash_s2i *rg2id = hash_s2i_create();
-- char *cp, *line;
-- int j, l;
--
-- if (!h)
-- return rg2id;
--
-- if (!rg2id)
-- return NULL;
--
-- cp = h->text;
--
-- for (l = 0; l+3 < h->l_text; l++) {
-- line = &cp[l];
-- if (!(cp[l] == '@' && cp[l+1] == 'R' && cp[l+2] == 'G')) {
-- while (l < h->l_text && cp[l] != '\n')
-- l++;
-- continue;
-- }
--
-- // Found an @RG line; add to hash
-- while (cp[l] != '\n') {
-- while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t')
-- l++;
-- if (l+4 < h->l_text && cp[l+1] == 'I' && cp[l+2] == 'D')
-- break;
-- }
-- if (cp[l] == '\n')
-- continue;
-- l = (j = l+4);
-- while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t')
-- l++;
--
-- // To do: save id and keep realloc as needed, as hash_s2i_inc strdups.
-- char *id = malloc(l-j+1);
-- strncpy(id, &cp[j], l-j);
-- id[l-j] = 0;
--
-- int added;
-- hash_s2i_inc(rg2id, id, line, &added);
-- free(id);
--
-- while (l < h->l_text && cp[l] != '\n')
-- l++;
-- }
--
-- return rg2id;
--}
-+#include "sam_opts.h"
-
- /*
- * Check the files are consistent and capable of being concatenated.
-- * Also fills out the rg2id read-group hash and the version numbers
-- * and produces a new bam_hdr_t structure with merged RG lines.
-- * Note it is only a simple merge, as we lack the niceties of a proper
-- * header API.
-+ * Also fills out the version numbers and produces a new sam_hdr_t
-+ * structure with merged RG lines.
-+ * Note it is only a simple merge.
- *
- * Returns updated header on success;
- * NULL on failure.
- */
--static bam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const bam_hdr_t *h,
-- khash_s2i **rg2id, int *vers_maj_p, int *vers_min_p) {
-+static sam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const sam_hdr_t *h,
-+ int *vers_maj_p, int *vers_min_p) {
- int i, vers_maj = -1, vers_min = -1;
-- bam_hdr_t *new_h = NULL;
-+ sam_hdr_t *new_h = NULL, *old_h = NULL;
-+ samFile *in = NULL;
-+ kstring_t ks = KS_INITIALIZE;
-
- if (h) {
-- new_h = bam_hdr_dup(h);
-- *rg2id = hash_rg(new_h);
-+ new_h = sam_hdr_dup(h);
-+ if (!new_h) {
-+ fprintf(stderr, "[%s] ERROR: header duplication failed.\n",
-+ __func__);
-+ goto fail;
-+ }
- }
-
- for (i = 0; i < nfn; ++i) {
-- samFile *in;
- cram_fd *in_c;
-- khint_t ki;
-- int new_rg = -1;
-+ int ki;
-
- in = sam_open(fn[i], "rc");
- if (in == 0) {
- print_error_errno("cat", "fail to open file '%s'", fn[i]);
-- return NULL;
-+ goto fail;
- }
- in_c = in->fp.cram;
-
-@@ -210,55 +91,81 @@
- (vers_min != -1 && vers_min != vmin)) {
- fprintf(stderr, "[%s] ERROR: input files have differing version numbers.\n",
- __func__);
-- return NULL;
-+ goto fail;
- }
- vers_maj = vmaj;
- vers_min = vmin;
-
-- bam_hdr_t *old = sam_hdr_read(in);
-- khash_s2i *rg2id_in = hash_rg(old);
-+ old_h = sam_hdr_read(in);
-+ if (!old_h) {
-+ fprintf(stderr, "[%s] ERROR: header reading for file '%s' filed.\n",
-+ __func__, fn[i]);
-+ goto fail;
-+ }
-
- if (!new_h) {
-- new_h = bam_hdr_dup(old);
-- *rg2id = hash_rg(new_h);
-+ new_h = sam_hdr_dup(old_h);
-+ if (!new_h) {
-+ fprintf(stderr, "[%s] ERROR: header duplication for file '%s' failed.\n",
-+ __func__, fn[i]);
-+ goto fail;
-+ }
-+ sam_hdr_destroy(old_h);
-+ sam_close(in);
-+ continue;
- }
-
-- // Add any existing @RG entries to our global @RG hash.
-- for (ki = 0; ki < rg2id_in->n_id; ki++) {
-- int added;
--
-- new_rg = hash_s2i_inc(*rg2id, rg2id_in->id[ki], rg2id_in->line[ki], &added);
-- //fprintf(stderr, "RG %s: #%d -> #%d\n",
-- // rg2id_in->id[ki], ki, new_rg);
--
-- if (added) {
-- // Also add to new_h
-- const char *line = rg2id_in->line[ki];
-- const char *line_end = line;
-- while (*line && *line_end++ != '\n')
-- ;
-- new_h->l_text += line_end - line;
-- new_h->text = realloc(new_h->text, new_h->l_text+1);
-- strncat(&new_h->text[new_h->l_text - (line_end - line)],
-- line, line_end - line);
-+ int old_count = sam_hdr_count_lines(old_h, "RG");
-+ for (ki = 0; ki < old_count; ki++) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", ki);
-+ if (old_name) {
-+ int new_i = sam_hdr_line_index(new_h, "RG", old_name);
-+ if (-1 == new_i) { // line does not exist in the new header
-+ if (sam_hdr_find_line_pos(old_h, "RG", ki, &ks) ||
-+ !ks.s || sam_hdr_add_lines(new_h, ks.s, ks.l)) {
-+ fprintf(stderr, "[%s] ERROR: failed to add @RG line 'ID:%s' from file '%s'\n",
-+ __func__, old_name, fn[i]);
-+ goto fail;
-+ }
-+ ks_free(&ks);
-+ }
-+ } else {
-+ fprintf(stderr, "[%s] ERROR: failed to read %d @RG line from file '%s'\n",
-+ __func__, ki, fn[i]);
-+ goto fail;
- }
-+ }
-
-- if (new_rg != ki && rg2id_in->n_id > 1) {
-- fprintf(stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n",
-- __func__);
-- return NULL;
-+ if (old_count > 1 && sam_hdr_count_lines(new_h, "RG") == old_count) {
-+ for (ki = 0; ki < old_count; ki++) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", ki);
-+ const char *new_name = sam_hdr_line_name(new_h, "RG", ki);
-+ if (!old_name || !new_name || strcmp(old_name, new_name)) {
-+ fprintf(stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n",
-+ __func__);
-+ goto fail;
-+ }
- }
- }
-
-- hash_s2i_free(rg2id_in);
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old_h);
- sam_close(in);
- }
-
-+ ks_free(&ks);
-+
- *vers_maj_p = vers_maj;
- *vers_min_p = vers_min;
-
- return new_h;
-+
-+fail:
-+ ks_free(&ks);
-+ if (old_h) sam_hdr_destroy(old_h);
-+ if (new_h) sam_hdr_destroy(new_h);
-+ if (in) sam_close(in);
-+
-+ return NULL;
- }
-
-
-@@ -289,22 +196,21 @@
- * huffman code. In this situation we can change the meta-data in the
- * compression header to renumber an RG value..
- */
--int cram_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outcram)
-+int cram_cat(int nfn, char * const *fn, const sam_hdr_t *h, const char* outcram, sam_global_args *ga, char *arg_list, int no_pg)
- {
- samFile *out;
- cram_fd *out_c;
- int i, vers_maj, vers_min;
-- khash_s2i *rg2id = NULL;
-- bam_hdr_t *new_h = NULL;
-+ sam_hdr_t *new_h = NULL;
-
- /* Check consistent versioning and compatible headers */
-- if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &rg2id, &vers_maj, &vers_min)))
-+ if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &vers_maj, &vers_min)))
- return -1;
-
- /* Open the file with cram_vers */
- char vers[100];
- sprintf(vers, "%d.%d", vers_maj, vers_min);
-- out = sam_open(outcram, "wc");
-+ out = sam_open_format(outcram, "wc", &ga->out);
- if (out == 0) {
- print_error_errno("cat", "fail to open output file '%s'", outcram);
- return -1;
-@@ -313,7 +219,13 @@
- cram_set_option(out_c, CRAM_OPT_VERSION, vers);
- //fprintf(stderr, "Creating cram vers %s\n", vers);
-
-- cram_fd_set_header(out_c, sam_hdr_parse_(new_h->text, new_h->l_text)); // needed?
-+ if (!no_pg && sam_hdr_add_pg(new_h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ return -1;
-+
- if (sam_hdr_write(out, new_h) < 0) {
- print_error_errno("cat", "Couldn't write header");
- return -1;
-@@ -323,7 +235,7 @@
- samFile *in;
- cram_fd *in_c;
- cram_container *c;
-- bam_hdr_t *old;
-+ sam_hdr_t *old_h;
- int new_rg = -1;
-
- in = sam_open(fn[i], "rc");
-@@ -333,20 +245,29 @@
- }
- in_c = in->fp.cram;
-
-- old = sam_hdr_read(in);
-- khash_s2i *rg2id_in = hash_rg(old);
-+ old_h = sam_hdr_read(in);
-+ if (!old_h) {
-+ print_error("cat", "fail to read the header of file '%s'", fn[i]);
-+ return -1;
-+ }
-
- // Compute RG mapping if suitable for changing.
-- if (rg2id_in->n_id == 1) {
-- int _;
-- new_rg = hash_s2i_inc(rg2id, rg2id_in->id[0], NULL, &_);
-+ if (sam_hdr_count_lines(old_h, "RG") == 1) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", 0);
-+ if (old_name) {
-+ new_rg = sam_hdr_line_index(new_h, "RG", old_name);
-+ if (new_rg < 0) {
-+ print_error("cat", "fail to find @RG line '%s' in the new header", old_name);
-+ return -1;
-+ }
-+ } else {
-+ print_error("cat", "fail to find @RG line in file '%s'", fn[i]);
-+ return -1;
-+ }
- } else {
- new_rg = 0;
- }
-
-- hash_s2i_free(rg2id_in);
--
--
- // Copy contains and blocks within them
- while ((c = cram_read_container(in_c))) {
- cram_block *blk;
-@@ -400,13 +321,11 @@
- cram_free_container(c);
- }
-
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old_h);
- sam_close(in);
- }
- sam_close(out);
--
-- hash_s2i_free(rg2id);
-- bam_hdr_destroy(new_h);
-+ sam_hdr_destroy(new_h);
-
- return 0;
- }
-@@ -419,7 +338,7 @@
-
- #define BGZF_EMPTY_BLOCK_SIZE 28
-
--int bam_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outbam)
-+int bam_cat(int nfn, char * const *fn, sam_hdr_t *h, const char* outbam, char *arg_list, int no_pg)
- {
- BGZF *fp, *in = NULL;
- uint8_t *buf = NULL;
-@@ -433,6 +352,13 @@
- return -1;
- }
- if (h) {
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (bam_hdr_write(fp, h) < 0) {
- print_error_errno("cat", "Couldn't write header");
- goto fail;
-@@ -445,7 +371,7 @@
- goto fail;
- }
- for(i = 0; i < nfn; ++i){
-- bam_hdr_t *old;
-+ sam_hdr_t *old;
- int len,j;
-
- in = strcmp(fn[i], "-")? bgzf_open(fn[i], "r") : bgzf_fdopen(fileno(stdin), "r");
-@@ -462,6 +388,13 @@
- goto fail;
- }
- if (h == 0 && i == 0) {
-+ if (!no_pg && sam_hdr_add_pg(old, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (bam_hdr_write(fp, old) < 0) {
- print_error_errno("cat", "Couldn't write header");
- goto fail;
-@@ -507,7 +440,7 @@
- if (bgzf_raw_write(fp, ebuf, es) < 0) goto write_fail;
- }
- }
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old);
- bgzf_close(in);
- in = NULL;
- }
-@@ -530,14 +463,25 @@
-
- int main_cat(int argc, char *argv[])
- {
-- bam_hdr_t *h = 0;
-+ sam_hdr_t *h = 0;
- char *outfn = 0;
- char **infns = NULL; // files to concatenate
- int infns_size = 0;
-- int c, ret = 0;
-+ int c, ret = 0, no_pg = 0;
- samFile *in;
-+ sam_global_args ga;
-+
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', '-', '-', 0, '-', '@'),
-+ {"no-PG", no_argument, NULL, 1},
-+ { NULL, 0, NULL, 0 }
-+ };
-+
-+ char *arg_list = NULL;
-
-- while ((c = getopt(argc, argv, "h:o:b:")) >= 0) {
-+ sam_global_args_init(&ga);
-+
-+ while ((c = getopt_long(argc, argv, "h:o:b:", lopts, NULL)) >= 0) {
- switch (c) {
- case 'h': {
- samFile *fph = sam_open(optarg, "r");
-@@ -573,9 +517,19 @@
- }
- break;
- }
-+ case 1:
-+ no_pg = 1;
-+ break;
-+ default:
-+ if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- }
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("cat", "failed to create arg_list");
-+ return 1;
-+ }
-+
- // Append files specified in argv to the list.
- int nargv_fns = argc - optind;
- if (nargv_fns > 0) {
-@@ -592,6 +546,8 @@
- fprintf(stderr, "Options: -b FILE list of input BAM/CRAM file names, one per line\n");
- fprintf(stderr, " -h FILE copy the header from FILE [default is 1st input file]\n");
- fprintf(stderr, " -o FILE output BAM/CRAM\n");
-+ fprintf(stderr, " --no-PG do not add a PG line\n");
-+ sam_global_opt_help(stderr, "--..-@-.");
- return 1;
- }
-
-@@ -604,13 +560,13 @@
- switch (hts_get_format(in)->format) {
- case bam:
- sam_close(in);
-- if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0)
-+ if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-", arg_list, no_pg) < 0)
- ret = 1;
- break;
-
- case cram:
- sam_close(in);
-- if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0)
-+ if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-", &ga, arg_list, no_pg) < 0)
- ret = 1;
- break;
-
-@@ -629,9 +585,9 @@
-
- free(outfn);
- free(infns);
--
-+ free(arg_list);
- if (h)
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
-
- return ret;
- }
---- python-pysam.orig/samtools/bam_cat.c.pysam.c
-+++ python-pysam/samtools/bam_cat.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_cat.c -- efficiently concatenates bam files.
-
-- Copyright (C) 2008-2009, 2011-2013, 2015-2016 Genome Research Ltd.
-+ Copyright (C) 2008-2009, 2011-2013, 2015-2017, 2019 Genome Research Ltd.
- Modified SAMtools work copyright (C) 2010 Illumina, Inc.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
-@@ -47,162 +47,43 @@
- #include "htslib/bgzf.h"
- #include "htslib/sam.h"
- #include "htslib/cram.h"
--#include "htslib/khash.h"
-+#include "htslib/kstring.h"
- #include "samtools.h"
--
--KHASH_MAP_INIT_STR(s2i, int)
--
--// Bi-directional lookup.
--// We can go from name to ID or ID to name.
--typedef struct khash_s2i {
-- khash_t(s2i) *h;
-- int n_id, a_id;
-- const char **id; // map Nth entry back to key
-- const char **line;
--} khash_s2i;
--
--static int hash_s2i_inc(khash_s2i *hash, const char *str, const char *line, int *added) {
-- // loosly based on khash_str2int_inc
-- khint_t k;
-- int n;
--
-- if ( !hash ) return -1;
-- // inefficient, but works
-- char *my_str = strdup(str);
-- k = kh_put(s2i, hash->h, my_str, added);
-- if (*added == 0) {
-- free(my_str);
-- return kh_val(hash->h, k);
-- }
-- n = hash->n_id++;
-- kh_val(hash->h, k) = n;
-- if (hash->a_id <= n) {
-- const char **id;
-- hash->a_id = (n+1)*2;
-- if (!(id = realloc(hash->id, hash->a_id*sizeof(*hash->id))))
-- return -1;
-- hash->id = id;
-- if (!(id = realloc(hash->line, hash->a_id*sizeof(*hash->line))))
-- return -1;
-- hash->line = id;
-- }
-- hash->id[n] = my_str; // reverse map
-- if (line)
-- hash->line[n] = line;
--
-- return n;
--}
--
--khash_s2i *hash_s2i_create(void) {
-- khash_s2i *h = calloc(1, sizeof(*h));
-- if (!h)
-- return NULL;
--
-- h->h = kh_init(s2i);
-- if (!h->h) {
-- free(h);
-- return NULL;
-- }
-- return h;
--}
--
--static void hash_s2i_free(khash_s2i *hash) {
-- // based on khash_str2int_destroy_free
-- khint_t k;
-- if (!hash) return;
-- if (hash->h) {
-- for (k = 0; k < kh_end(hash->h); ++k)
-- if (kh_exist(hash->h, k)) free((char*)kh_key(hash->h, k));
-- kh_destroy(s2i, hash->h);
-- }
-- if (hash->id)
-- free(hash->id);
-- if (hash->line)
-- free(hash->line);
--
-- free(hash);
--}
--
--static khash_s2i *hash_rg(const bam_hdr_t *h) {
-- khash_s2i *rg2id = hash_s2i_create();
-- char *cp, *line;
-- int j, l;
--
-- if (!h)
-- return rg2id;
--
-- if (!rg2id)
-- return NULL;
--
-- cp = h->text;
--
-- for (l = 0; l+3 < h->l_text; l++) {
-- line = &cp[l];
-- if (!(cp[l] == '@' && cp[l+1] == 'R' && cp[l+2] == 'G')) {
-- while (l < h->l_text && cp[l] != '\n')
-- l++;
-- continue;
-- }
--
-- // Found an @RG line; add to hash
-- while (cp[l] != '\n') {
-- while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t')
-- l++;
-- if (l+4 < h->l_text && cp[l+1] == 'I' && cp[l+2] == 'D')
-- break;
-- }
-- if (cp[l] == '\n')
-- continue;
-- l = (j = l+4);
-- while (l < h->l_text && cp[l] != '\n' && cp[l] != '\t')
-- l++;
--
-- // To do: save id and keep realloc as needed, as hash_s2i_inc strdups.
-- char *id = malloc(l-j+1);
-- strncpy(id, &cp[j], l-j);
-- id[l-j] = 0;
--
-- int added;
-- hash_s2i_inc(rg2id, id, line, &added);
-- free(id);
--
-- while (l < h->l_text && cp[l] != '\n')
-- l++;
-- }
--
-- return rg2id;
--}
-+#include "sam_opts.h"
-
- /*
- * Check the files are consistent and capable of being concatenated.
-- * Also fills out the rg2id read-group hash and the version numbers
-- * and produces a new bam_hdr_t structure with merged RG lines.
-- * Note it is only a simple merge, as we lack the niceties of a proper
-- * header API.
-+ * Also fills out the version numbers and produces a new sam_hdr_t
-+ * structure with merged RG lines.
-+ * Note it is only a simple merge.
- *
- * Returns updated header on success;
- * NULL on failure.
- */
--static bam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const bam_hdr_t *h,
-- khash_s2i **rg2id, int *vers_maj_p, int *vers_min_p) {
-+static sam_hdr_t *cram_cat_check_hdr(int nfn, char * const *fn, const sam_hdr_t *h,
-+ int *vers_maj_p, int *vers_min_p) {
- int i, vers_maj = -1, vers_min = -1;
-- bam_hdr_t *new_h = NULL;
-+ sam_hdr_t *new_h = NULL, *old_h = NULL;
-+ samFile *in = NULL;
-+ kstring_t ks = KS_INITIALIZE;
-
- if (h) {
-- new_h = bam_hdr_dup(h);
-- *rg2id = hash_rg(new_h);
-+ new_h = sam_hdr_dup(h);
-+ if (!new_h) {
-+ fprintf(samtools_stderr, "[%s] ERROR: header duplication failed.\n",
-+ __func__);
-+ goto fail;
-+ }
- }
-
- for (i = 0; i < nfn; ++i) {
-- samFile *in;
- cram_fd *in_c;
-- khint_t ki;
-- int new_rg = -1;
-+ int ki;
-
- in = sam_open(fn[i], "rc");
- if (in == 0) {
- print_error_errno("cat", "fail to open file '%s'", fn[i]);
-- return NULL;
-+ goto fail;
- }
- in_c = in->fp.cram;
-
-@@ -212,55 +93,81 @@
- (vers_min != -1 && vers_min != vmin)) {
- fprintf(samtools_stderr, "[%s] ERROR: input files have differing version numbers.\n",
- __func__);
-- return NULL;
-+ goto fail;
- }
- vers_maj = vmaj;
- vers_min = vmin;
-
-- bam_hdr_t *old = sam_hdr_read(in);
-- khash_s2i *rg2id_in = hash_rg(old);
-+ old_h = sam_hdr_read(in);
-+ if (!old_h) {
-+ fprintf(samtools_stderr, "[%s] ERROR: header reading for file '%s' filed.\n",
-+ __func__, fn[i]);
-+ goto fail;
-+ }
-
- if (!new_h) {
-- new_h = bam_hdr_dup(old);
-- *rg2id = hash_rg(new_h);
-+ new_h = sam_hdr_dup(old_h);
-+ if (!new_h) {
-+ fprintf(samtools_stderr, "[%s] ERROR: header duplication for file '%s' failed.\n",
-+ __func__, fn[i]);
-+ goto fail;
-+ }
-+ sam_hdr_destroy(old_h);
-+ sam_close(in);
-+ continue;
- }
-
-- // Add any existing @RG entries to our global @RG hash.
-- for (ki = 0; ki < rg2id_in->n_id; ki++) {
-- int added;
--
-- new_rg = hash_s2i_inc(*rg2id, rg2id_in->id[ki], rg2id_in->line[ki], &added);
-- //fprintf(samtools_stderr, "RG %s: #%d -> #%d\n",
-- // rg2id_in->id[ki], ki, new_rg);
--
-- if (added) {
-- // Also add to new_h
-- const char *line = rg2id_in->line[ki];
-- const char *line_end = line;
-- while (*line && *line_end++ != '\n')
-- ;
-- new_h->l_text += line_end - line;
-- new_h->text = realloc(new_h->text, new_h->l_text+1);
-- strncat(&new_h->text[new_h->l_text - (line_end - line)],
-- line, line_end - line);
-+ int old_count = sam_hdr_count_lines(old_h, "RG");
-+ for (ki = 0; ki < old_count; ki++) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", ki);
-+ if (old_name) {
-+ int new_i = sam_hdr_line_index(new_h, "RG", old_name);
-+ if (-1 == new_i) { // line does not exist in the new header
-+ if (sam_hdr_find_line_pos(old_h, "RG", ki, &ks) ||
-+ !ks.s || sam_hdr_add_lines(new_h, ks.s, ks.l)) {
-+ fprintf(samtools_stderr, "[%s] ERROR: failed to add @RG line 'ID:%s' from file '%s'\n",
-+ __func__, old_name, fn[i]);
-+ goto fail;
-+ }
-+ ks_free(&ks);
-+ }
-+ } else {
-+ fprintf(samtools_stderr, "[%s] ERROR: failed to read %d @RG line from file '%s'\n",
-+ __func__, ki, fn[i]);
-+ goto fail;
- }
-+ }
-
-- if (new_rg != ki && rg2id_in->n_id > 1) {
-- fprintf(samtools_stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n",
-- __func__);
-- return NULL;
-+ if (old_count > 1 && sam_hdr_count_lines(new_h, "RG") == old_count) {
-+ for (ki = 0; ki < old_count; ki++) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", ki);
-+ const char *new_name = sam_hdr_line_name(new_h, "RG", ki);
-+ if (!old_name || !new_name || strcmp(old_name, new_name)) {
-+ fprintf(samtools_stderr, "[%s] ERROR: Same size @RG lists but differing order / contents\n",
-+ __func__);
-+ goto fail;
-+ }
- }
- }
-
-- hash_s2i_free(rg2id_in);
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old_h);
- sam_close(in);
- }
-
-+ ks_free(&ks);
-+
- *vers_maj_p = vers_maj;
- *vers_min_p = vers_min;
-
- return new_h;
-+
-+fail:
-+ ks_free(&ks);
-+ if (old_h) sam_hdr_destroy(old_h);
-+ if (new_h) sam_hdr_destroy(new_h);
-+ if (in) sam_close(in);
-+
-+ return NULL;
- }
-
-
-@@ -291,22 +198,21 @@
- * huffman code. In this situation we can change the meta-data in the
- * compression header to renumber an RG value..
- */
--int cram_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outcram)
-+int cram_cat(int nfn, char * const *fn, const sam_hdr_t *h, const char* outcram, sam_global_args *ga, char *arg_list, int no_pg)
- {
- samFile *out;
- cram_fd *out_c;
- int i, vers_maj, vers_min;
-- khash_s2i *rg2id = NULL;
-- bam_hdr_t *new_h = NULL;
-+ sam_hdr_t *new_h = NULL;
-
- /* Check consistent versioning and compatible headers */
-- if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &rg2id, &vers_maj, &vers_min)))
-+ if (!(new_h = cram_cat_check_hdr(nfn, fn, h, &vers_maj, &vers_min)))
- return -1;
-
- /* Open the file with cram_vers */
- char vers[100];
- sprintf(vers, "%d.%d", vers_maj, vers_min);
-- out = sam_open(outcram, "wc");
-+ out = sam_open_format(outcram, "wc", &ga->out);
- if (out == 0) {
- print_error_errno("cat", "fail to open output file '%s'", outcram);
- return -1;
-@@ -315,7 +221,13 @@
- cram_set_option(out_c, CRAM_OPT_VERSION, vers);
- //fprintf(samtools_stderr, "Creating cram vers %s\n", vers);
-
-- cram_fd_set_header(out_c, sam_hdr_parse_(new_h->text, new_h->l_text)); // needed?
-+ if (!no_pg && sam_hdr_add_pg(new_h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ return -1;
-+
- if (sam_hdr_write(out, new_h) < 0) {
- print_error_errno("cat", "Couldn't write header");
- return -1;
-@@ -325,7 +237,7 @@
- samFile *in;
- cram_fd *in_c;
- cram_container *c;
-- bam_hdr_t *old;
-+ sam_hdr_t *old_h;
- int new_rg = -1;
-
- in = sam_open(fn[i], "rc");
-@@ -335,20 +247,29 @@
- }
- in_c = in->fp.cram;
-
-- old = sam_hdr_read(in);
-- khash_s2i *rg2id_in = hash_rg(old);
-+ old_h = sam_hdr_read(in);
-+ if (!old_h) {
-+ print_error("cat", "fail to read the header of file '%s'", fn[i]);
-+ return -1;
-+ }
-
- // Compute RG mapping if suitable for changing.
-- if (rg2id_in->n_id == 1) {
-- int _;
-- new_rg = hash_s2i_inc(rg2id, rg2id_in->id[0], NULL, &_);
-+ if (sam_hdr_count_lines(old_h, "RG") == 1) {
-+ const char *old_name = sam_hdr_line_name(old_h, "RG", 0);
-+ if (old_name) {
-+ new_rg = sam_hdr_line_index(new_h, "RG", old_name);
-+ if (new_rg < 0) {
-+ print_error("cat", "fail to find @RG line '%s' in the new header", old_name);
-+ return -1;
-+ }
-+ } else {
-+ print_error("cat", "fail to find @RG line in file '%s'", fn[i]);
-+ return -1;
-+ }
- } else {
- new_rg = 0;
- }
-
-- hash_s2i_free(rg2id_in);
--
--
- // Copy contains and blocks within them
- while ((c = cram_read_container(in_c))) {
- cram_block *blk;
-@@ -402,13 +323,11 @@
- cram_free_container(c);
- }
-
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old_h);
- sam_close(in);
- }
- sam_close(out);
--
-- hash_s2i_free(rg2id);
-- bam_hdr_destroy(new_h);
-+ sam_hdr_destroy(new_h);
-
- return 0;
- }
-@@ -421,7 +340,7 @@
-
- #define BGZF_EMPTY_BLOCK_SIZE 28
-
--int bam_cat(int nfn, char * const *fn, const bam_hdr_t *h, const char* outbam)
-+int bam_cat(int nfn, char * const *fn, sam_hdr_t *h, const char* outbam, char *arg_list, int no_pg)
- {
- BGZF *fp, *in = NULL;
- uint8_t *buf = NULL;
-@@ -435,6 +354,13 @@
- return -1;
- }
- if (h) {
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (bam_hdr_write(fp, h) < 0) {
- print_error_errno("cat", "Couldn't write header");
- goto fail;
-@@ -447,7 +373,7 @@
- goto fail;
- }
- for(i = 0; i < nfn; ++i){
-- bam_hdr_t *old;
-+ sam_hdr_t *old;
- int len,j;
-
- in = strcmp(fn[i], "-")? bgzf_open(fn[i], "r") : bgzf_fdopen(fileno(stdin), "r");
-@@ -464,6 +390,13 @@
- goto fail;
- }
- if (h == 0 && i == 0) {
-+ if (!no_pg && sam_hdr_add_pg(old, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (bam_hdr_write(fp, old) < 0) {
- print_error_errno("cat", "Couldn't write header");
- goto fail;
-@@ -509,7 +442,7 @@
- if (bgzf_raw_write(fp, ebuf, es) < 0) goto write_fail;
- }
- }
-- bam_hdr_destroy(old);
-+ sam_hdr_destroy(old);
- bgzf_close(in);
- in = NULL;
- }
-@@ -532,14 +465,25 @@
-
- int main_cat(int argc, char *argv[])
- {
-- bam_hdr_t *h = 0;
-+ sam_hdr_t *h = 0;
- char *outfn = 0;
- char **infns = NULL; // files to concatenate
- int infns_size = 0;
-- int c, ret = 0;
-+ int c, ret = 0, no_pg = 0;
- samFile *in;
-+ sam_global_args ga;
-+
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', '-', '-', 0, '-', '@'),
-+ {"no-PG", no_argument, NULL, 1},
-+ { NULL, 0, NULL, 0 }
-+ };
-+
-+ char *arg_list = NULL;
-
-- while ((c = getopt(argc, argv, "h:o:b:")) >= 0) {
-+ sam_global_args_init(&ga);
-+
-+ while ((c = getopt_long(argc, argv, "h:o:b:", lopts, NULL)) >= 0) {
- switch (c) {
- case 'h': {
- samFile *fph = sam_open(optarg, "r");
-@@ -575,9 +519,19 @@
- }
- break;
- }
-+ case 1:
-+ no_pg = 1;
-+ break;
-+ default:
-+ if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- }
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("cat", "failed to create arg_list");
-+ return 1;
-+ }
-+
- // Append files specified in argv to the list.
- int nargv_fns = argc - optind;
- if (nargv_fns > 0) {
-@@ -594,6 +548,8 @@
- fprintf(samtools_stderr, "Options: -b FILE list of input BAM/CRAM file names, one per line\n");
- fprintf(samtools_stderr, " -h FILE copy the header from FILE [default is 1st input file]\n");
- fprintf(samtools_stderr, " -o FILE output BAM/CRAM\n");
-+ fprintf(samtools_stderr, " --no-PG do not add a PG line\n");
-+ sam_global_opt_help(samtools_stderr, "--..-@-.");
- return 1;
- }
-
-@@ -606,13 +562,13 @@
- switch (hts_get_format(in)->format) {
- case bam:
- sam_close(in);
-- if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0)
-+ if (bam_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-", arg_list, no_pg) < 0)
- ret = 1;
- break;
-
- case cram:
- sam_close(in);
-- if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-") < 0)
-+ if (cram_cat(infns_size+nargv_fns, infns, h, outfn? outfn : "-", &ga, arg_list, no_pg) < 0)
- ret = 1;
- break;
-
-@@ -631,9 +587,9 @@
-
- free(outfn);
- free(infns);
--
-+ free(arg_list);
- if (h)
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
-
- return ret;
- }
---- /dev/null
-+++ python-pysam/samtools/bam_fastq.c
-@@ -0,0 +1,1037 @@
-+/* bam_fastq.c -- FASTA and FASTQ file generation
-+
-+ Copyright (C) 2009-2017, 2019 Genome Research Ltd.
-+ Portions copyright (C) 2009, 2011, 2012 Broad Institute.
-+
-+ Author: Heng Li <lh3@sanger.ac.uk>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notices and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <config.h>
-+
-+#include <stdlib.h>
-+#include <string.h>
-+#include <strings.h>
-+#include <stdbool.h>
-+#include <ctype.h>
-+#include <assert.h>
-+#include <inttypes.h>
-+#include <unistd.h>
-+
-+#include "htslib/sam.h"
-+#include "htslib/klist.h"
-+#include "htslib/kstring.h"
-+#include "htslib/bgzf.h"
-+#include "htslib/thread_pool.h"
-+#include "samtools.h"
-+#include "sam_opts.h"
-+
-+#define taglist_free(p)
-+KLIST_INIT(ktaglist, char*, taglist_free)
-+
-+#define DEFAULT_BARCODE_TAG "BC"
-+#define DEFAULT_QUALITY_TAG "QT"
-+#define INDEX_SEPARATOR "+"
-+
-+int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
-+static const char *copied_tags[] = { "RG", "BC", "QT", NULL };
-+
-+static void bam2fq_usage(FILE *to, const char *command)
-+{
-+ int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0;
-+ fprintf(to,
-+"Usage: samtools %s [options...] <in.bam>\n", command);
-+ fprintf(to,
-+"\n"
-+"Description:\n"
-+"Converts a SAM, BAM or CRAM into either FASTQ or FASTA format depending on the command invoked.\n"
-+"\n"
-+"Options:\n"
-+" -0 FILE write reads designated READ_OTHER to FILE\n"
-+" -1 FILE write reads designated READ1 to FILE\n"
-+" -2 FILE write reads designated READ2 to FILE\n"
-+" -o FILE write reads designated READ1 or READ2 to FILE\n"
-+" note: if a singleton file is specified with -s, only\n"
-+" paired reads will be written to the -1 and -2 files.\n"
-+" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x
-+" -F INT only include reads with none of the FLAGS in INT present [0x900]\n" // F&x == 0
-+" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x)
-+" -n don't append /1 and /2 to the read name\n"
-+" -N always append /1 and /2 to the read name\n");
-+ if (fq) fprintf(to,
-+" -O output quality in the OQ tag if present\n");
-+ fprintf(to,
-+" -s FILE write singleton reads designated READ1 or READ2 to FILE\n"
-+" -t copy RG, BC and QT tags to the %s header line\n",
-+ fq ? "FASTQ" : "FASTA");
-+ fprintf(to,
-+" -T TAGLIST copy arbitrary tags to the %s header line\n",
-+ fq ? "FASTQ" : "FASTA");
-+ if (fq) fprintf(to,
-+" -v INT default quality score if not given in file [1]\n"
-+" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n"
-+" -c compression level [0..9] to use when creating gz or bgzf fastq files [1]\n"
-+" --i1 FILE write first index reads to FILE\n"
-+" --i2 FILE write second index reads to FILE\n"
-+" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n"
-+" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n"
-+" --index-format STR How to parse barcode and quality tags\n\n");
-+ sam_global_opt_help(to, "-.--.@-.");
-+ fprintf(to,
-+"\n"
-+"The files will be automatically compressed if the file names have a .gz or .bgzf extension.\n"
-+"The input to this program must be collated by name. Run 'samtools collate' or 'samtools sort -n'.\n"
-+"\n"
-+"Reads are designated READ1 if FLAG READ1 is set and READ2 is not set.\n"
-+"Reads are designated READ2 if FLAG READ1 is not set and READ2 is set.\n"
-+"Reads are designated READ_OTHER if FLAGs READ1 and READ2 are either both set\n"
-+"or both unset.\n"
-+"Run 'samtools flags' for more information on flag codes and meanings.\n");
-+ fprintf(to,
-+"\n"
-+"The index-format string describes how to parse the barcode and quality tags, for example:\n"
-+" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n"
-+" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n"
-+"If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n"
-+"'read until the separator or end of tag', for example:\n"
-+" n*i* ignore the left part of the tag until the separator, then use the second part\n"
-+" of the tag as index 1\n");
-+ fprintf(to,
-+"\n"
-+"Examples:\n"
-+" To get just the paired reads in separate files, use:\n"
-+" samtools %s -1 paired1.%s -2 paired2.%s -0 /dev/null -s /dev/null -n in.bam\n"
-+"\n To get all non-supplementary/secondary reads in a single file, redirect the output:\n"
-+" samtools %s in.bam > all_reads.%s\n",
-+ command, fq ? "fq" : "fa", fq ? "fq" : "fa",
-+ command, fq ? "fq" : "fa");
-+}
-+
-+typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart;
-+typedef enum { FASTA, FASTQ } fastfile;
-+typedef struct bam2fq_opts {
-+ char *fnse;
-+ char *fnr[3];
-+ char *fn_input; // pointer to input filename in argv do not free
-+ bool has12, has12always, use_oq, copy_tags, illumina_tag;
-+ int flag_on, flag_off, flag_alloff;
-+ sam_global_args ga;
-+ fastfile filetype;
-+ int def_qual;
-+ char *barcode_tag;
-+ char *quality_tag;
-+ char *index_file[2];
-+ char *index_format;
-+ char *extra_tags;
-+ char compression_level;
-+} bam2fq_opts_t;
-+
-+typedef struct bam2fq_state {
-+ samFile *fp;
-+ BGZF *fpse;
-+ BGZF *fpr[3];
-+ BGZF *fpi[2];
-+ BGZF *hstdout;
-+ sam_hdr_t *h;
-+ bool has12, use_oq, copy_tags, illumina_tag;
-+ int flag_on, flag_off, flag_alloff;
-+ fastfile filetype;
-+ int def_qual;
-+ klist_t(ktaglist) *taglist;
-+ char *index_sequence;
-+ char compression_level;
-+ htsThreadPool p;
-+} bam2fq_state_t;
-+
-+/*
-+ * Get and decode the read from a BAM record.
-+ *
-+ * TODO: htslib really needs an interface for this. Consider this or perhaps
-+ * bam_get_seq_str (current vs original orientation) and bam_get_qual_str
-+ * functions as string formatted equivalents to bam_get_{seq,qual}?
-+ */
-+
-+/*
-+ * Reverse a string in place.
-+ * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux.
-+ * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik
-+ */
-+static char *reverse(char *str)
-+{
-+ int i = strlen(str)-1,j=0;
-+ char ch;
-+ while (i>j) {
-+ ch = str[i];
-+ str[i]= str[j];
-+ str[j] = ch;
-+ i--;
-+ j++;
-+ }
-+ return str;
-+}
-+
-+/* return the read, reverse complemented if necessary */
-+static char *get_read(const bam1_t *rec)
-+{
-+ int len = rec->core.l_qseq + 1;
-+ char *read = calloc(1, len);
-+ char *seq = (char *)bam_get_seq(rec);
-+ int n;
-+
-+ if (!read) return NULL;
-+
-+ for (n=0; n < rec->core.l_qseq; n++) {
-+ if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]];
-+ else read[n] = seq_nt16_str[bam_seqi(seq,n)];
-+ }
-+ if (rec->core.flag & BAM_FREVERSE) reverse(read);
-+ return read;
-+}
-+
-+/*
-+ * get and decode the quality from a BAM record
-+ */
-+static int get_quality(const bam1_t *rec, char **qual_out)
-+{
-+ char *quality = calloc(1, rec->core.l_qseq + 1);
-+ char *q = (char *)bam_get_qual(rec);
-+ int n;
-+
-+ if (!quality) return -1;
-+
-+ if (*q == '\xff') {
-+ free(quality);
-+ *qual_out = NULL;
-+ return 0;
-+ }
-+
-+ for (n=0; n < rec->core.l_qseq; n++) {
-+ quality[n] = q[n]+33;
-+ }
-+ if (rec->core.flag & BAM_FREVERSE) reverse(quality);
-+ *qual_out = quality;
-+ return 0;
-+}
-+
-+//
-+// End of htslib complaints
-+//
-+
-+
-+static readpart which_readpart(const bam1_t *b)
-+{
-+ if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) {
-+ return READ_1;
-+ } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) {
-+ return READ_2;
-+ } else {
-+ return READ_UNKNOWN;
-+ }
-+}
-+
-+/*
-+ * parse the length part from the index-format string
-+ */
-+static int getLength(char **s)
-+{
-+ int n = 0;
-+ while (**s) {
-+ if (**s == '*') { n=-1; (*s)++; break; }
-+ if ( !isdigit(**s)) break;
-+ n = n*10 + ((**s)-'0');
-+ (*s)++;
-+ }
-+ return n;
-+}
-+
-+static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf)
-+{
-+ uint8_t *s = bam_aux_get(rec, tag);
-+ if (s) {
-+ char aux_type = *s;
-+ switch (aux_type) {
-+ case 'C':
-+ case 'S': aux_type = 'I'; break;
-+ case 'c':
-+ case 's': aux_type = 'i'; break;
-+ case 'd': aux_type = 'f'; break;
-+ }
-+
-+ // Ensure space. Need 6 chars + length of tag. Max length of
-+ // i is 16, A is 21, B currently 26, Z is unknown, so
-+ // have to check that one later.
-+ if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false;
-+
-+ kputc('\t', linebuf);
-+ kputsn(tag, 2, linebuf);
-+ kputc(':', linebuf);
-+ kputc(aux_type=='I'? 'i': aux_type, linebuf);
-+ kputc(':', linebuf);
-+ switch (aux_type) {
-+ case 'H':
-+ case 'Z':
-+ if (kputs(bam_aux2Z(s), linebuf) < 0) return false;
-+ break;
-+ case 'i': kputw(bam_aux2i(s), linebuf); break;
-+ case 'I': kputuw(bam_aux2i(s), linebuf); break;
-+ case 'A': kputc(bam_aux2A(s), linebuf); break;
-+ case 'f': kputd(bam_aux2f(s), linebuf); break;
-+ case 'B': kputs("*** Unhandled aux type ***", linebuf); return false;
-+ default: kputs("*** Unknown aux type ***", linebuf); return false;
-+ }
-+ }
-+ return true;
-+}
-+
-+static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec)
-+{
-+ if (!index_sequence) return 0;
-+
-+ kstring_t new = {0,0,NULL};
-+ if (linebuf->s) {
-+ char *s = strchr(linebuf->s, '\n');
-+ if (s) {
-+ if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0)
-+ return -1;
-+ *s = 0;
-+ kputs(linebuf->s, &new);
-+ kputc(' ', &new);
-+ readpart readpart = which_readpart(rec);
-+ if (readpart == READ_1) kputc('1', &new);
-+ else if (readpart == READ_2) kputc('2', &new);
-+ else kputc('0', &new);
-+
-+ kputc(':', &new);
-+ if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new);
-+ else kputc('N', &new);
-+
-+ kputs(":0:", &new);
-+ kputs(index_sequence, &new);
-+ kputc('\n', &new);
-+ kputs(s+1, &new);
-+ free(ks_release(linebuf));
-+ linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state)
-+{
-+ int i;
-+
-+ linebuf->l = 0;
-+ // Write read name
-+ if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false;
-+ if (kputs(bam_get_qname(rec), linebuf) < 0) return false;
-+ // Add the /1 /2 if requested
-+ if (state->has12) {
-+ readpart readpart = which_readpart(rec);
-+ if (readpart == READ_1) {
-+ if (kputs("/1", linebuf) < 0) return false;
-+ } else if (readpart == READ_2) {
-+ if (kputs("/2", linebuf) < 0) return false;
-+ }
-+ }
-+ if (state->copy_tags) {
-+ for (i = 0; copied_tags[i]; ++i) {
-+ if (!copy_tag(copied_tags[i], rec, linebuf)) {
-+ fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-+ return false;
-+ }
-+ }
-+ }
-+
-+ if (state->taglist->size) {
-+ kliter_t(ktaglist) *p;
-+ for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) {
-+ if (!copy_tag(kl_val(p), rec, linebuf)) {
-+ fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-+ return false;
-+ }
-+ }
-+ }
-+
-+ if (kputc('\n', linebuf) < 0) return false;
-+ if (kputs(seq, linebuf) < 0) return false;
-+ if (kputc('\n', linebuf) < 0) return false;
-+
-+ if (state->filetype == FASTQ) {
-+ // Write quality
-+ if (kputs("+\n", linebuf) < 0) return false;
-+ if (qual && *qual) {
-+ if (kputs(qual, linebuf) < 0) return false;
-+ } else {
-+ int len = strlen(seq);
-+ if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false;
-+ for (i = 0; i < len; ++i) {
-+ kputc(33 + state->def_qual, linebuf);
-+ }
-+ }
-+ if (kputc('\n', linebuf) < 0) return false;
-+ }
-+ return true;
-+}
-+
-+/*
-+ * Create FASTQ lines from the barcode tag using the index-format
-+ */
-+static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts)
-+{
-+ uint8_t *p;
-+ char *ifmt = opts->index_format;
-+ char *tag = NULL;
-+ char *qual = NULL;
-+ char *sub_tag = NULL;
-+ char *sub_qual = NULL;
-+ size_t tag_len;
-+ int file_number = 0;
-+ kstring_t linebuf = { 0, 0, NULL }; // Buffer
-+
-+ if (!ifmt) return true;
-+
-+ // read barcode tag
-+ p = bam_aux_get(rec,opts->barcode_tag);
-+ if (p) tag = bam_aux2Z(p);
-+
-+ if (!tag) return true; // there is no tag
-+
-+ tag_len = strlen(tag);
-+ sub_tag = calloc(1, tag_len + 1);
-+ if (!sub_tag) goto fail;
-+ sub_qual = calloc(1, tag_len + 1);
-+ if (!sub_qual) goto fail;
-+
-+ // read quality tag
-+ p = bam_aux_get(rec, opts->quality_tag);
-+ if (p) qual = bam_aux2Z(p);
-+
-+ // Parse the index-format string
-+ while (*ifmt) {
-+ if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly
-+ char action = *ifmt; // should be 'i' or 'n'
-+ ifmt++; // skip over action
-+ int index_len = getLength(&ifmt);
-+ int n = 0;
-+
-+ if (index_len < 0) {
-+ // read until separator
-+ while (isalpha(*tag)) {
-+ sub_tag[n] = *tag++;
-+ if (qual) sub_qual[n] = *qual++;
-+ n++;
-+ }
-+ if (*tag) { // skip separator
-+ tag++;
-+ if (qual) qual++;
-+ }
-+ } else {
-+ // read index_len characters
-+ while (index_len-- && *tag) {
-+ sub_tag[n] = *tag++;
-+ if (qual) sub_qual[n] = *qual++;
-+ n++;
-+ }
-+ }
-+ sub_tag[n] = '\0';
-+ sub_qual[n] = '\0';
-+
-+ if (action=='i' && *sub_tag) {
-+ if (state->index_sequence) {
-+ char *new_index_sequence = realloc(state->index_sequence, strlen(state->index_sequence) + strlen(sub_tag) + 2);
-+ if (!new_index_sequence) goto fail;
-+ state->index_sequence = new_index_sequence;
-+ strcat(state->index_sequence, INDEX_SEPARATOR);
-+ strcat(state->index_sequence, sub_tag);
-+ } else {
-+ state->index_sequence = strdup(sub_tag); // we're going to need this later...
-+ }
-+ if (!state->index_sequence) goto fail;
-+ if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail;
-+ if (state->illumina_tag) {
-+ if (insert_index_sequence_into_linebuf(sub_tag, &linebuf, rec) < 0) {
-+ goto fail;
-+ }
-+ }
-+ if (state->fpi[file_number]) {
-+ if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0)
-+ goto fail;
-+ }
-+ }
-+
-+ }
-+
-+ free(sub_qual); free(sub_tag);
-+ free(linebuf.s);
-+ return true;
-+
-+ fail:
-+ perror(__func__);
-+ free(sub_qual); free(sub_tag);
-+ free(linebuf.s);
-+ return false;
-+}
-+
-+// Transform a bam1_t record into a string with the FASTQ representation of it
-+// @returns false for error, true for success
-+static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state)
-+{
-+ int32_t qlen = b->core.l_qseq;
-+ assert(qlen >= 0);
-+ const uint8_t *oq = NULL;
-+ char *qual = NULL;
-+
-+ char *seq = get_read(b);
-+ if (!seq) return false;
-+
-+ if (state->use_oq) oq = bam_aux_get(b, "OQ");
-+ if (oq && *oq=='Z') {
-+ qual = strdup(bam_aux2Z(oq));
-+ if (!qual) goto fail;
-+ if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented
-+ reverse(qual);
-+ }
-+ } else {
-+ if (get_quality(b, &qual) < 0) goto fail;
-+ }
-+
-+ if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail;
-+
-+ free(qual);
-+ free(seq);
-+ return true;
-+
-+ fail:
-+ free(seq);
-+ free(qual);
-+ return false;
-+}
-+
-+static void free_opts(bam2fq_opts_t *opts)
-+{
-+ free(opts->barcode_tag);
-+ free(opts->quality_tag);
-+ free(opts->index_format);
-+ free(opts->extra_tags);
-+ free(opts);
-+}
-+
-+// return true if valid
-+static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out)
-+{
-+ // Parse args
-+ bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t));
-+ opts->has12 = true;
-+ opts->has12always = false;
-+ opts->filetype = FASTQ;
-+ opts->def_qual = 1;
-+ opts->barcode_tag = NULL;
-+ opts->quality_tag = NULL;
-+ opts->index_format = NULL;
-+ opts->index_file[0] = NULL;
-+ opts->index_file[1] = NULL;
-+ opts->extra_tags = NULL;
-+ opts->compression_level = 1;
-+ opts->flag_off = BAM_FSECONDARY|BAM_FSUPPLEMENTARY;
-+ int flag_off_set = 0;
-+
-+ int c;
-+ sam_global_args_init(&opts->ga);
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'),
-+ {"i1", required_argument, NULL, 1},
-+ {"I1", required_argument, NULL, 1},
-+ {"i2", required_argument, NULL, 2},
-+ {"I2", required_argument, NULL, 2},
-+ {"if", required_argument, NULL, 3},
-+ {"IF", required_argument, NULL, 3},
-+ {"index-format", required_argument, NULL, 3},
-+ {"barcode-tag", required_argument, NULL, 'b'},
-+ {"quality-tag", required_argument, NULL, 'q'},
-+ { NULL, 0, NULL, 0 }
-+ };
-+ while ((c = getopt_long(argc, argv, "0:1:2:o:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) {
-+ switch (c) {
-+ case 'b': opts->barcode_tag = strdup(optarg); break;
-+ case 'q': opts->quality_tag = strdup(optarg); break;
-+ case 1 : opts->index_file[0] = optarg; break;
-+ case 2 : opts->index_file[1] = optarg; break;
-+ case 3 : opts->index_format = strdup(optarg); break;
-+ case '0': opts->fnr[0] = optarg; break;
-+ case '1': opts->fnr[1] = optarg; break;
-+ case '2': opts->fnr[2] = optarg; break;
-+ case 'o': opts->fnr[1] = optarg; opts->fnr[2] = optarg; break;
-+ case 'f': opts->flag_on |= strtol(optarg, 0, 0); break;
-+ case 'F':
-+ if (!flag_off_set) {
-+ flag_off_set = 1;
-+ opts->flag_off = 0;
-+ }
-+ opts->flag_off |= strtol(optarg, 0, 0); break;
-+ case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break;
-+ case 'n': opts->has12 = false; break;
-+ case 'N': opts->has12always = true; break;
-+ case 'O': opts->use_oq = true; break;
-+ case 's': opts->fnse = optarg; break;
-+ case 't': opts->copy_tags = true; break;
-+ case 'i': opts->illumina_tag = true; break;
-+ case 'c': opts->compression_level = atoi(optarg); break;
-+ case 'T': opts->extra_tags = strdup(optarg); break;
-+ case 'v': opts->def_qual = atoi(optarg); break;
-+ case '?': bam2fq_usage(stderr, argv[0]); free_opts(opts); return false;
-+ default:
-+ if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) {
-+ bam2fq_usage(stderr, argv[0]); free_opts(opts); return false;
-+ }
-+ break;
-+ }
-+ }
-+
-+ if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false;
-+ if (opts->has12always) opts->has12 = true;
-+
-+ if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG);
-+ if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG);
-+
-+ int nIndex = 0;
-+ if (opts->index_format) {
-+ char *s;
-+ for (s = opts->index_format; *s; s++) {
-+ if (*s == 'i') nIndex++;
-+ }
-+ }
-+ if (nIndex>2) {
-+ fprintf(stderr,"Invalid index format: more than 2 indexes\n");
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->index_file[1] && !opts->index_file[0]) {
-+ fprintf(stderr, "Index one specified, but index two not given\n");
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->illumina_tag && !nIndex) {
-+ fprintf(stderr, "You must specify an index format (--index-format) with the Illumina Casava (-i) option\n");
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (nIndex==0 && opts->index_file[0]) {
-+ fprintf(stderr, "index_format not specified, but index file given\n");
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->def_qual < 0 || 93 < opts->def_qual) {
-+ fprintf(stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual);
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ const char* type_str = argv[0];
-+ if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) {
-+ opts->filetype = FASTQ;
-+ } else if (strcasecmp("fasta", type_str) == 0) {
-+ opts->filetype = FASTA;
-+ } else {
-+ print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str);
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (argc == optind && isatty(STDIN_FILENO)) {
-+ bam2fq_usage(stdout, argv[0]);
-+ free_opts(opts);
-+ return true;
-+ }
-+
-+ if (argc - optind > 1) {
-+ fprintf(stderr, "Too many arguments.\n");
-+ bam2fq_usage(stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+ opts->fn_input = argc > optind ? argv[optind] : "-";
-+ *opts_out = opts;
-+ return true;
-+}
-+
-+static BGZF *open_fqfile(char *filename, int c, htsThreadPool *tp)
-+{
-+ char mode[4] = "w";
-+ size_t len = strlen(filename);
-+
-+ mode[2] = 0; mode[3] = 0;
-+ if (len > 3 && strstr(filename + (len - 3),".gz")) {
-+ mode[1] = 'g'; mode[2] = c+'0';
-+ } else if ((len > 4 && strstr(filename + (len - 4),".bgz"))
-+ || (len > 5 && strstr(filename + (len - 5),".bgzf"))) {
-+ mode[1] = c+'0';
-+ } else {
-+ mode[1] = 'u';
-+ }
-+
-+ BGZF *fp = bgzf_open(filename,mode);
-+ if (!fp)
-+ return fp;
-+ if (tp->pool && bgzf_thread_pool(fp, tp->pool, tp->qsize) < 0) {
-+ bgzf_close(fp);
-+ return NULL;
-+ }
-+ return fp;
-+}
-+
-+static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out)
-+{
-+ bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t));
-+ state->flag_on = opts->flag_on;
-+ state->flag_off = opts->flag_off;
-+ state->flag_alloff = opts->flag_alloff;
-+ state->has12 = opts->has12;
-+ state->use_oq = opts->use_oq;
-+ state->illumina_tag = opts->illumina_tag;
-+ state->copy_tags = opts->copy_tags;
-+ state->filetype = opts->filetype;
-+ state->def_qual = opts->def_qual;
-+ state->index_sequence = NULL;
-+ state->hstdout = NULL;
-+ state->compression_level = opts->compression_level;
-+
-+ state->taglist = kl_init(ktaglist);
-+ if (opts->extra_tags) {
-+ char *save_p;
-+ char *s = strtok_r(opts->extra_tags, ",", &save_p);
-+ while (s) {
-+ if (strlen(s) != 2) {
-+ fprintf(stderr, "Parsing extra tags - '%s' is not two characters\n", s);
-+ free(state);
-+ return false;
-+ }
-+ char **et = kl_pushp(ktaglist, state->taglist);
-+ *et = s;
-+ s = strtok_r(NULL, ",", &save_p);
-+ }
-+ }
-+
-+ state->fp = sam_open(opts->fn_input, "r");
-+ if (state->fp == NULL) {
-+ print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input);
-+ free(state);
-+ return false;
-+ }
-+
-+ state->p.pool = NULL;
-+ if (opts->ga.nthreads > 0) {
-+ if (!(state->p.pool = hts_tpool_init(opts->ga.nthreads))) {
-+ fprintf(stderr, "Failed to create thread pool\n");
-+ free(state);
-+ return false;
-+ }
-+ state->p.qsize = opts->ga.nthreads*2;
-+ hts_set_thread_pool(state->fp, &state->p);
-+ }
-+
-+ uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL;
-+ if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX;
-+ if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-+ fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-+ free(state);
-+ return false;
-+ }
-+ if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) {
-+ fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-+ free(state);
-+ return false;
-+ }
-+ if (opts->fnse) {
-+ state->fpse = open_fqfile(opts->fnse, state->compression_level, &state->p);
-+ if (state->fpse == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse);
-+ free(state);
-+ return false;
-+ }
-+ }
-+
-+ if (opts->ga.reference) {
-+ if (hts_set_fai_filename(state->fp, opts->ga.reference) != 0) {
-+ print_error_errno("bam2fq", "cannot load reference \"%s\"", opts->ga.reference);
-+ free(state);
-+ return false;
-+ }
-+ }
-+
-+ int i, j;
-+ for (i = 0; i < 3; ++i) {
-+ if (opts->fnr[i]) {
-+ for (j = 0; j < i; j++)
-+ if (opts->fnr[j] && strcmp(opts->fnr[j], opts->fnr[i]) == 0)
-+ break;
-+ if (j == i) {
-+ state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level, &state->p);
-+ if (state->fpr[i] == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"",
-+ i, opts->fnr[i]);
-+ free(state);
-+ return false;
-+ }
-+ } else {
-+ state->fpr[i] = state->fpr[j];
-+ }
-+ } else {
-+ if (!state->hstdout) {
-+ state->hstdout = bgzf_dopen(fileno(stdout), "wu");
-+ if (!state->hstdout) {
-+ print_error_errno("bam2fq", "Cannot open STDOUT");
-+ free(state);
-+ return false;
-+ }
-+ }
-+ state->fpr[i] = state->hstdout;
-+ }
-+ }
-+ for (i = 0; i < 2; i++) {
-+ state->fpi[i] = NULL;
-+ if (opts->index_file[i]) {
-+ for (j = 0; j < 3; j++)
-+ if (opts->fnr[j] && strcmp(opts->fnr[j], opts->index_file[i]) == 0)
-+ break;
-+ for (j -= 3; j >= 0 && j < i; j++)
-+ if (opts->index_file[j] && strcmp(opts->index_file[j], opts->index_file[i]) == 0)
-+ break;
-+ if (i == j) {
-+ state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level, &state->p);
-+ if (state->fpi[i] == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"",
-+ i+1, opts->index_file[i]);
-+ free(state);
-+ return false;
-+ }
-+ } else if (j < 0) {
-+ state->fpi[i] = state->fpr[j+3];
-+ } else {
-+ state->fpi[i] = state->fpi[j];
-+ }
-+ }
-+ }
-+
-+ state->h = sam_hdr_read(state->fp);
-+ if (state->h == NULL) {
-+ fprintf(stderr, "Failed to read header for \"%s\"\n", opts->fn_input);
-+ free(state);
-+ return false;
-+ }
-+
-+ *state_out = state;
-+ return true;
-+}
-+
-+static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status)
-+{
-+ bool valid = true;
-+ sam_hdr_destroy(state->h);
-+ check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status);
-+ if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; }
-+ int i, j;
-+ for (i = 0; i < 3; ++i) {
-+ if (state->fpr[i] != state->hstdout) {
-+ for (j = 0; j < i; j++)
-+ if (state->fpr[i] == state->fpr[j])
-+ break;
-+ if (j == i && bgzf_close(state->fpr[i])) {
-+ print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]);
-+ valid = false;
-+ }
-+ }
-+ }
-+ if (state->hstdout) {
-+ if (bgzf_close(state->hstdout)) {
-+ print_error_errno("bam2fq", "Error closing STDOUT");
-+ valid = false;
-+ }
-+ }
-+ for (i = 0; i < 2; i++) {
-+ for (j = 0; j < 3; j++)
-+ if (state->fpi[i] == state->fpr[j])
-+ break;
-+ for (j -= 3; j >= 0 && j < i; j++)
-+ if (state->fpi[i] == state->fpi[j])
-+ break;
-+ if (j == i && state->fpi[i] && bgzf_close(state->fpi[i])) {
-+ print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]);
-+ valid = false;
-+ }
-+ }
-+ kl_destroy(ktaglist,state->taglist);
-+ free(state->index_sequence);
-+ if (state->p.pool)
-+ hts_tpool_destroy(state->p.pool);
-+ free(state);
-+ return valid;
-+}
-+
-+static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state)
-+{
-+ return ((b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags
-+ || (b->core.flag&(state->flag_off)) != 0
-+ || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff));
-+
-+}
-+
-+static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts)
-+{
-+ int n;
-+ bam1_t *records[3] = {NULL, NULL, NULL};
-+ char *current_qname = NULL;
-+ int64_t n_reads = 0, n_singletons = 0; // Statistics
-+ kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}};
-+ int score[3];
-+ int at_eof;
-+ bool valid = true;
-+ bam1_t* b = NULL;
-+
-+ while (true) {
-+ if (!b)
-+ b = bam_init1();
-+ if (b == NULL) {
-+ perror("[bam2fq_mainloop] Malloc error for bam record buffer.");
-+ valid = false;
-+ break;
-+ }
-+ int res = sam_read1(state->fp, state->h, b);
-+ if (res < -1) {
-+ fprintf(stderr, "[bam2fq_mainloop] Failed to read bam record.\n");
-+ valid = false;
-+ break;
-+ }
-+ at_eof = res < 0;
-+
-+ if (!at_eof && filter_it_out(b, state))
-+ continue;
-+ if (!at_eof) ++n_reads;
-+
-+ if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) {
-+ if (current_qname) {
-+ if (state->illumina_tag) {
-+ for (n=0; valid && n<3; n++) {
-+ if (!records[n]) continue;
-+ if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false;
-+ }
-+ if (!valid) break;
-+ }
-+ free(state->index_sequence); state->index_sequence = NULL;
-+ if (score[1] > 0 && score[2] > 0) {
-+ // print linebuf[1] to fpr[1], linebuf[2] to fpr[2]
-+ if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ } else if (score[1] > 0 || score[2] > 0) {
-+ if (state->fpse) {
-+ // print whichever one exists to fpse
-+ if (score[1] > 0) {
-+ if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ } else {
-+ if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ }
-+ ++n_singletons;
-+ } else {
-+ if (score[1] > 0) {
-+ if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ } else {
-+ if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ }
-+ }
-+ }
-+ if (score[0]) { // TODO: check this
-+ // print linebuf[0] to fpr[0]
-+ if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; }
-+ }
-+ }
-+
-+
-+ free(current_qname); current_qname = NULL;
-+ score[0] = score[1] = score[2] = 0;
-+ for (n=0; n < 3; n++) {
-+ bam_destroy1(records[n]); records[n]=NULL;
-+ }
-+
-+ if (at_eof) { break; }
-+
-+ current_qname = strdup(bam_get_qname(b));
-+ if (!current_qname) { valid = false; break; }
-+ }
-+
-+ // Prefer a copy of the read that has base qualities
-+ int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1;
-+ readpart rp = which_readpart(b);
-+ if (b_score > score[rp]) {
-+ if (!tags2fq(b, state, opts)) { valid = false; break; }
-+ if (records[rp]) bam_destroy1(records[rp]);
-+ records[rp] = b;
-+ score[rp] = b_score;
-+ b = NULL;
-+ if(!bam1_to_fq(records[rp], &linebuf[rp], state)) {
-+ fprintf(stderr, "[%s] Error converting read to FASTA/Q\n", __func__);
-+ valid = false; break;
-+ }
-+ }
-+ }
-+ if (!valid)
-+ {
-+ perror("[bam2fq_mainloop] Error writing to FASTx files.");
-+ }
-+ bam_destroy1(b);
-+ for (n=0; n < 3; n++) {
-+ bam_destroy1(records[n]);
-+ }
-+ free(current_qname);
-+ free(linebuf[0].s);
-+ free(linebuf[1].s);
-+ free(linebuf[2].s);
-+ fprintf(stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons);
-+ fprintf(stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads);
-+
-+ return valid;
-+}
-+
-+int main_bam2fq(int argc, char *argv[])
-+{
-+ int status = EXIT_SUCCESS;
-+ bam2fq_opts_t* opts = NULL;
-+ bam2fq_state_t* state = NULL;
-+
-+ bool valid = parse_opts(argc, argv, &opts);
-+ if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE;
-+
-+ if (!init_state(opts, &state)) return EXIT_FAILURE;
-+
-+ if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE;
-+
-+ if (!destroy_state(opts, state, &status)) return EXIT_FAILURE;
-+ sam_global_args_free(&opts->ga);
-+ free_opts(opts);
-+
-+ return status;
-+}
---- /dev/null
-+++ python-pysam/samtools/bam_fastq.c.pysam.c
-@@ -0,0 +1,1039 @@
-+#include "samtools.pysam.h"
-+
-+/* bam_fastq.c -- FASTA and FASTQ file generation
-+
-+ Copyright (C) 2009-2017, 2019 Genome Research Ltd.
-+ Portions copyright (C) 2009, 2011, 2012 Broad Institute.
-+
-+ Author: Heng Li <lh3@sanger.ac.uk>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notices and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+#include <config.h>
-+
-+#include <stdlib.h>
-+#include <string.h>
-+#include <strings.h>
-+#include <stdbool.h>
-+#include <ctype.h>
-+#include <assert.h>
-+#include <inttypes.h>
-+#include <unistd.h>
-+
-+#include "htslib/sam.h"
-+#include "htslib/klist.h"
-+#include "htslib/kstring.h"
-+#include "htslib/bgzf.h"
-+#include "htslib/thread_pool.h"
-+#include "samtools.h"
-+#include "sam_opts.h"
-+
-+#define taglist_free(p)
-+KLIST_INIT(ktaglist, char*, taglist_free)
-+
-+#define DEFAULT_BARCODE_TAG "BC"
-+#define DEFAULT_QUALITY_TAG "QT"
-+#define INDEX_SEPARATOR "+"
-+
-+int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
-+static const char *copied_tags[] = { "RG", "BC", "QT", NULL };
-+
-+static void bam2fq_usage(FILE *to, const char *command)
-+{
-+ int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0;
-+ fprintf(to,
-+"Usage: samtools %s [options...] <in.bam>\n", command);
-+ fprintf(to,
-+"\n"
-+"Description:\n"
-+"Converts a SAM, BAM or CRAM into either FASTQ or FASTA format depending on the command invoked.\n"
-+"\n"
-+"Options:\n"
-+" -0 FILE write reads designated READ_OTHER to FILE\n"
-+" -1 FILE write reads designated READ1 to FILE\n"
-+" -2 FILE write reads designated READ2 to FILE\n"
-+" -o FILE write reads designated READ1 or READ2 to FILE\n"
-+" note: if a singleton file is specified with -s, only\n"
-+" paired reads will be written to the -1 and -2 files.\n"
-+" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x
-+" -F INT only include reads with none of the FLAGS in INT present [0x900]\n" // F&x == 0
-+" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x)
-+" -n don't append /1 and /2 to the read name\n"
-+" -N always append /1 and /2 to the read name\n");
-+ if (fq) fprintf(to,
-+" -O output quality in the OQ tag if present\n");
-+ fprintf(to,
-+" -s FILE write singleton reads designated READ1 or READ2 to FILE\n"
-+" -t copy RG, BC and QT tags to the %s header line\n",
-+ fq ? "FASTQ" : "FASTA");
-+ fprintf(to,
-+" -T TAGLIST copy arbitrary tags to the %s header line\n",
-+ fq ? "FASTQ" : "FASTA");
-+ if (fq) fprintf(to,
-+" -v INT default quality score if not given in file [1]\n"
-+" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n"
-+" -c compression level [0..9] to use when creating gz or bgzf fastq files [1]\n"
-+" --i1 FILE write first index reads to FILE\n"
-+" --i2 FILE write second index reads to FILE\n"
-+" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n"
-+" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n"
-+" --index-format STR How to parse barcode and quality tags\n\n");
-+ sam_global_opt_help(to, "-.--.@-.");
-+ fprintf(to,
-+"\n"
-+"The files will be automatically compressed if the file names have a .gz or .bgzf extension.\n"
-+"The input to this program must be collated by name. Run 'samtools collate' or 'samtools sort -n'.\n"
-+"\n"
-+"Reads are designated READ1 if FLAG READ1 is set and READ2 is not set.\n"
-+"Reads are designated READ2 if FLAG READ1 is not set and READ2 is set.\n"
-+"Reads are designated READ_OTHER if FLAGs READ1 and READ2 are either both set\n"
-+"or both unset.\n"
-+"Run 'samtools flags' for more information on flag codes and meanings.\n");
-+ fprintf(to,
-+"\n"
-+"The index-format string describes how to parse the barcode and quality tags, for example:\n"
-+" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n"
-+" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n"
-+"If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n"
-+"'read until the separator or end of tag', for example:\n"
-+" n*i* ignore the left part of the tag until the separator, then use the second part\n"
-+" of the tag as index 1\n");
-+ fprintf(to,
-+"\n"
-+"Examples:\n"
-+" To get just the paired reads in separate files, use:\n"
-+" samtools %s -1 paired1.%s -2 paired2.%s -0 /dev/null -s /dev/null -n in.bam\n"
-+"\n To get all non-supplementary/secondary reads in a single file, redirect the output:\n"
-+" samtools %s in.bam > all_reads.%s\n",
-+ command, fq ? "fq" : "fa", fq ? "fq" : "fa",
-+ command, fq ? "fq" : "fa");
-+}
-+
-+typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart;
-+typedef enum { FASTA, FASTQ } fastfile;
-+typedef struct bam2fq_opts {
-+ char *fnse;
-+ char *fnr[3];
-+ char *fn_input; // pointer to input filename in argv do not free
-+ bool has12, has12always, use_oq, copy_tags, illumina_tag;
-+ int flag_on, flag_off, flag_alloff;
-+ sam_global_args ga;
-+ fastfile filetype;
-+ int def_qual;
-+ char *barcode_tag;
-+ char *quality_tag;
-+ char *index_file[2];
-+ char *index_format;
-+ char *extra_tags;
-+ char compression_level;
-+} bam2fq_opts_t;
-+
-+typedef struct bam2fq_state {
-+ samFile *fp;
-+ BGZF *fpse;
-+ BGZF *fpr[3];
-+ BGZF *fpi[2];
-+ BGZF *hsamtools_stdout;
-+ sam_hdr_t *h;
-+ bool has12, use_oq, copy_tags, illumina_tag;
-+ int flag_on, flag_off, flag_alloff;
-+ fastfile filetype;
-+ int def_qual;
-+ klist_t(ktaglist) *taglist;
-+ char *index_sequence;
-+ char compression_level;
-+ htsThreadPool p;
-+} bam2fq_state_t;
-+
-+/*
-+ * Get and decode the read from a BAM record.
-+ *
-+ * TODO: htslib really needs an interface for this. Consider this or perhaps
-+ * bam_get_seq_str (current vs original orientation) and bam_get_qual_str
-+ * functions as string formatted equivalents to bam_get_{seq,qual}?
-+ */
-+
-+/*
-+ * Reverse a string in place.
-+ * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux.
-+ * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik
-+ */
-+static char *reverse(char *str)
-+{
-+ int i = strlen(str)-1,j=0;
-+ char ch;
-+ while (i>j) {
-+ ch = str[i];
-+ str[i]= str[j];
-+ str[j] = ch;
-+ i--;
-+ j++;
-+ }
-+ return str;
-+}
-+
-+/* return the read, reverse complemented if necessary */
-+static char *get_read(const bam1_t *rec)
-+{
-+ int len = rec->core.l_qseq + 1;
-+ char *read = calloc(1, len);
-+ char *seq = (char *)bam_get_seq(rec);
-+ int n;
-+
-+ if (!read) return NULL;
-+
-+ for (n=0; n < rec->core.l_qseq; n++) {
-+ if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]];
-+ else read[n] = seq_nt16_str[bam_seqi(seq,n)];
-+ }
-+ if (rec->core.flag & BAM_FREVERSE) reverse(read);
-+ return read;
-+}
-+
-+/*
-+ * get and decode the quality from a BAM record
-+ */
-+static int get_quality(const bam1_t *rec, char **qual_out)
-+{
-+ char *quality = calloc(1, rec->core.l_qseq + 1);
-+ char *q = (char *)bam_get_qual(rec);
-+ int n;
-+
-+ if (!quality) return -1;
-+
-+ if (*q == '\xff') {
-+ free(quality);
-+ *qual_out = NULL;
-+ return 0;
-+ }
-+
-+ for (n=0; n < rec->core.l_qseq; n++) {
-+ quality[n] = q[n]+33;
-+ }
-+ if (rec->core.flag & BAM_FREVERSE) reverse(quality);
-+ *qual_out = quality;
-+ return 0;
-+}
-+
-+//
-+// End of htslib complaints
-+//
-+
-+
-+static readpart which_readpart(const bam1_t *b)
-+{
-+ if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) {
-+ return READ_1;
-+ } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) {
-+ return READ_2;
-+ } else {
-+ return READ_UNKNOWN;
-+ }
-+}
-+
-+/*
-+ * parse the length part from the index-format string
-+ */
-+static int getLength(char **s)
-+{
-+ int n = 0;
-+ while (**s) {
-+ if (**s == '*') { n=-1; (*s)++; break; }
-+ if ( !isdigit(**s)) break;
-+ n = n*10 + ((**s)-'0');
-+ (*s)++;
-+ }
-+ return n;
-+}
-+
-+static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf)
-+{
-+ uint8_t *s = bam_aux_get(rec, tag);
-+ if (s) {
-+ char aux_type = *s;
-+ switch (aux_type) {
-+ case 'C':
-+ case 'S': aux_type = 'I'; break;
-+ case 'c':
-+ case 's': aux_type = 'i'; break;
-+ case 'd': aux_type = 'f'; break;
-+ }
-+
-+ // Ensure space. Need 6 chars + length of tag. Max length of
-+ // i is 16, A is 21, B currently 26, Z is unknown, so
-+ // have to check that one later.
-+ if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false;
-+
-+ kputc('\t', linebuf);
-+ kputsn(tag, 2, linebuf);
-+ kputc(':', linebuf);
-+ kputc(aux_type=='I'? 'i': aux_type, linebuf);
-+ kputc(':', linebuf);
-+ switch (aux_type) {
-+ case 'H':
-+ case 'Z':
-+ if (kputs(bam_aux2Z(s), linebuf) < 0) return false;
-+ break;
-+ case 'i': kputw(bam_aux2i(s), linebuf); break;
-+ case 'I': kputuw(bam_aux2i(s), linebuf); break;
-+ case 'A': kputc(bam_aux2A(s), linebuf); break;
-+ case 'f': kputd(bam_aux2f(s), linebuf); break;
-+ case 'B': kputs("*** Unhandled aux type ***", linebuf); return false;
-+ default: kputs("*** Unknown aux type ***", linebuf); return false;
-+ }
-+ }
-+ return true;
-+}
-+
-+static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec)
-+{
-+ if (!index_sequence) return 0;
-+
-+ kstring_t new = {0,0,NULL};
-+ if (linebuf->s) {
-+ char *s = strchr(linebuf->s, '\n');
-+ if (s) {
-+ if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0)
-+ return -1;
-+ *s = 0;
-+ kputs(linebuf->s, &new);
-+ kputc(' ', &new);
-+ readpart readpart = which_readpart(rec);
-+ if (readpart == READ_1) kputc('1', &new);
-+ else if (readpart == READ_2) kputc('2', &new);
-+ else kputc('0', &new);
-+
-+ kputc(':', &new);
-+ if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new);
-+ else kputc('N', &new);
-+
-+ kputs(":0:", &new);
-+ kputs(index_sequence, &new);
-+ kputc('\n', &new);
-+ kputs(s+1, &new);
-+ free(ks_release(linebuf));
-+ linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state)
-+{
-+ int i;
-+
-+ linebuf->l = 0;
-+ // Write read name
-+ if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false;
-+ if (kputs(bam_get_qname(rec), linebuf) < 0) return false;
-+ // Add the /1 /2 if requested
-+ if (state->has12) {
-+ readpart readpart = which_readpart(rec);
-+ if (readpart == READ_1) {
-+ if (kputs("/1", linebuf) < 0) return false;
-+ } else if (readpart == READ_2) {
-+ if (kputs("/2", linebuf) < 0) return false;
-+ }
-+ }
-+ if (state->copy_tags) {
-+ for (i = 0; copied_tags[i]; ++i) {
-+ if (!copy_tag(copied_tags[i], rec, linebuf)) {
-+ fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-+ return false;
-+ }
-+ }
-+ }
-+
-+ if (state->taglist->size) {
-+ kliter_t(ktaglist) *p;
-+ for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) {
-+ if (!copy_tag(kl_val(p), rec, linebuf)) {
-+ fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-+ return false;
-+ }
-+ }
-+ }
-+
-+ if (kputc('\n', linebuf) < 0) return false;
-+ if (kputs(seq, linebuf) < 0) return false;
-+ if (kputc('\n', linebuf) < 0) return false;
-+
-+ if (state->filetype == FASTQ) {
-+ // Write quality
-+ if (kputs("+\n", linebuf) < 0) return false;
-+ if (qual && *qual) {
-+ if (kputs(qual, linebuf) < 0) return false;
-+ } else {
-+ int len = strlen(seq);
-+ if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false;
-+ for (i = 0; i < len; ++i) {
-+ kputc(33 + state->def_qual, linebuf);
-+ }
-+ }
-+ if (kputc('\n', linebuf) < 0) return false;
-+ }
-+ return true;
-+}
-+
-+/*
-+ * Create FASTQ lines from the barcode tag using the index-format
-+ */
-+static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts)
-+{
-+ uint8_t *p;
-+ char *ifmt = opts->index_format;
-+ char *tag = NULL;
-+ char *qual = NULL;
-+ char *sub_tag = NULL;
-+ char *sub_qual = NULL;
-+ size_t tag_len;
-+ int file_number = 0;
-+ kstring_t linebuf = { 0, 0, NULL }; // Buffer
-+
-+ if (!ifmt) return true;
-+
-+ // read barcode tag
-+ p = bam_aux_get(rec,opts->barcode_tag);
-+ if (p) tag = bam_aux2Z(p);
-+
-+ if (!tag) return true; // there is no tag
-+
-+ tag_len = strlen(tag);
-+ sub_tag = calloc(1, tag_len + 1);
-+ if (!sub_tag) goto fail;
-+ sub_qual = calloc(1, tag_len + 1);
-+ if (!sub_qual) goto fail;
-+
-+ // read quality tag
-+ p = bam_aux_get(rec, opts->quality_tag);
-+ if (p) qual = bam_aux2Z(p);
-+
-+ // Parse the index-format string
-+ while (*ifmt) {
-+ if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly
-+ char action = *ifmt; // should be 'i' or 'n'
-+ ifmt++; // skip over action
-+ int index_len = getLength(&ifmt);
-+ int n = 0;
-+
-+ if (index_len < 0) {
-+ // read until separator
-+ while (isalpha(*tag)) {
-+ sub_tag[n] = *tag++;
-+ if (qual) sub_qual[n] = *qual++;
-+ n++;
-+ }
-+ if (*tag) { // skip separator
-+ tag++;
-+ if (qual) qual++;
-+ }
-+ } else {
-+ // read index_len characters
-+ while (index_len-- && *tag) {
-+ sub_tag[n] = *tag++;
-+ if (qual) sub_qual[n] = *qual++;
-+ n++;
-+ }
-+ }
-+ sub_tag[n] = '\0';
-+ sub_qual[n] = '\0';
-+
-+ if (action=='i' && *sub_tag) {
-+ if (state->index_sequence) {
-+ char *new_index_sequence = realloc(state->index_sequence, strlen(state->index_sequence) + strlen(sub_tag) + 2);
-+ if (!new_index_sequence) goto fail;
-+ state->index_sequence = new_index_sequence;
-+ strcat(state->index_sequence, INDEX_SEPARATOR);
-+ strcat(state->index_sequence, sub_tag);
-+ } else {
-+ state->index_sequence = strdup(sub_tag); // we're going to need this later...
-+ }
-+ if (!state->index_sequence) goto fail;
-+ if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail;
-+ if (state->illumina_tag) {
-+ if (insert_index_sequence_into_linebuf(sub_tag, &linebuf, rec) < 0) {
-+ goto fail;
-+ }
-+ }
-+ if (state->fpi[file_number]) {
-+ if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0)
-+ goto fail;
-+ }
-+ }
-+
-+ }
-+
-+ free(sub_qual); free(sub_tag);
-+ free(linebuf.s);
-+ return true;
-+
-+ fail:
-+ perror(__func__);
-+ free(sub_qual); free(sub_tag);
-+ free(linebuf.s);
-+ return false;
-+}
-+
-+// Transform a bam1_t record into a string with the FASTQ representation of it
-+// @returns false for error, true for success
-+static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state)
-+{
-+ int32_t qlen = b->core.l_qseq;
-+ assert(qlen >= 0);
-+ const uint8_t *oq = NULL;
-+ char *qual = NULL;
-+
-+ char *seq = get_read(b);
-+ if (!seq) return false;
-+
-+ if (state->use_oq) oq = bam_aux_get(b, "OQ");
-+ if (oq && *oq=='Z') {
-+ qual = strdup(bam_aux2Z(oq));
-+ if (!qual) goto fail;
-+ if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented
-+ reverse(qual);
-+ }
-+ } else {
-+ if (get_quality(b, &qual) < 0) goto fail;
-+ }
-+
-+ if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail;
-+
-+ free(qual);
-+ free(seq);
-+ return true;
-+
-+ fail:
-+ free(seq);
-+ free(qual);
-+ return false;
-+}
-+
-+static void free_opts(bam2fq_opts_t *opts)
-+{
-+ free(opts->barcode_tag);
-+ free(opts->quality_tag);
-+ free(opts->index_format);
-+ free(opts->extra_tags);
-+ free(opts);
-+}
-+
-+// return true if valid
-+static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out)
-+{
-+ // Parse args
-+ bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t));
-+ opts->has12 = true;
-+ opts->has12always = false;
-+ opts->filetype = FASTQ;
-+ opts->def_qual = 1;
-+ opts->barcode_tag = NULL;
-+ opts->quality_tag = NULL;
-+ opts->index_format = NULL;
-+ opts->index_file[0] = NULL;
-+ opts->index_file[1] = NULL;
-+ opts->extra_tags = NULL;
-+ opts->compression_level = 1;
-+ opts->flag_off = BAM_FSECONDARY|BAM_FSUPPLEMENTARY;
-+ int flag_off_set = 0;
-+
-+ int c;
-+ sam_global_args_init(&opts->ga);
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'),
-+ {"i1", required_argument, NULL, 1},
-+ {"I1", required_argument, NULL, 1},
-+ {"i2", required_argument, NULL, 2},
-+ {"I2", required_argument, NULL, 2},
-+ {"if", required_argument, NULL, 3},
-+ {"IF", required_argument, NULL, 3},
-+ {"index-format", required_argument, NULL, 3},
-+ {"barcode-tag", required_argument, NULL, 'b'},
-+ {"quality-tag", required_argument, NULL, 'q'},
-+ { NULL, 0, NULL, 0 }
-+ };
-+ while ((c = getopt_long(argc, argv, "0:1:2:o:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) {
-+ switch (c) {
-+ case 'b': opts->barcode_tag = strdup(optarg); break;
-+ case 'q': opts->quality_tag = strdup(optarg); break;
-+ case 1 : opts->index_file[0] = optarg; break;
-+ case 2 : opts->index_file[1] = optarg; break;
-+ case 3 : opts->index_format = strdup(optarg); break;
-+ case '0': opts->fnr[0] = optarg; break;
-+ case '1': opts->fnr[1] = optarg; break;
-+ case '2': opts->fnr[2] = optarg; break;
-+ case 'o': opts->fnr[1] = optarg; opts->fnr[2] = optarg; break;
-+ case 'f': opts->flag_on |= strtol(optarg, 0, 0); break;
-+ case 'F':
-+ if (!flag_off_set) {
-+ flag_off_set = 1;
-+ opts->flag_off = 0;
-+ }
-+ opts->flag_off |= strtol(optarg, 0, 0); break;
-+ case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break;
-+ case 'n': opts->has12 = false; break;
-+ case 'N': opts->has12always = true; break;
-+ case 'O': opts->use_oq = true; break;
-+ case 's': opts->fnse = optarg; break;
-+ case 't': opts->copy_tags = true; break;
-+ case 'i': opts->illumina_tag = true; break;
-+ case 'c': opts->compression_level = atoi(optarg); break;
-+ case 'T': opts->extra_tags = strdup(optarg); break;
-+ case 'v': opts->def_qual = atoi(optarg); break;
-+ case '?': bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false;
-+ default:
-+ if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) {
-+ bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false;
-+ }
-+ break;
-+ }
-+ }
-+
-+ if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false;
-+ if (opts->has12always) opts->has12 = true;
-+
-+ if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG);
-+ if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG);
-+
-+ int nIndex = 0;
-+ if (opts->index_format) {
-+ char *s;
-+ for (s = opts->index_format; *s; s++) {
-+ if (*s == 'i') nIndex++;
-+ }
-+ }
-+ if (nIndex>2) {
-+ fprintf(samtools_stderr,"Invalid index format: more than 2 indexes\n");
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->index_file[1] && !opts->index_file[0]) {
-+ fprintf(samtools_stderr, "Index one specified, but index two not given\n");
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->illumina_tag && !nIndex) {
-+ fprintf(samtools_stderr, "You must specify an index format (--index-format) with the Illumina Casava (-i) option\n");
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (nIndex==0 && opts->index_file[0]) {
-+ fprintf(samtools_stderr, "index_format not specified, but index file given\n");
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (opts->def_qual < 0 || 93 < opts->def_qual) {
-+ fprintf(samtools_stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual);
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ const char* type_str = argv[0];
-+ if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) {
-+ opts->filetype = FASTQ;
-+ } else if (strcasecmp("fasta", type_str) == 0) {
-+ opts->filetype = FASTA;
-+ } else {
-+ print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str);
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+
-+ if (argc == optind && isatty(STDIN_FILENO)) {
-+ bam2fq_usage(samtools_stdout, argv[0]);
-+ free_opts(opts);
-+ return true;
-+ }
-+
-+ if (argc - optind > 1) {
-+ fprintf(samtools_stderr, "Too many arguments.\n");
-+ bam2fq_usage(samtools_stderr, argv[0]);
-+ free_opts(opts);
-+ return false;
-+ }
-+ opts->fn_input = argc > optind ? argv[optind] : "-";
-+ *opts_out = opts;
-+ return true;
-+}
-+
-+static BGZF *open_fqfile(char *filename, int c, htsThreadPool *tp)
-+{
-+ char mode[4] = "w";
-+ size_t len = strlen(filename);
-+
-+ mode[2] = 0; mode[3] = 0;
-+ if (len > 3 && strstr(filename + (len - 3),".gz")) {
-+ mode[1] = 'g'; mode[2] = c+'0';
-+ } else if ((len > 4 && strstr(filename + (len - 4),".bgz"))
-+ || (len > 5 && strstr(filename + (len - 5),".bgzf"))) {
-+ mode[1] = c+'0';
-+ } else {
-+ mode[1] = 'u';
-+ }
-+
-+ BGZF *fp = bgzf_open(filename,mode);
-+ if (!fp)
-+ return fp;
-+ if (tp->pool && bgzf_thread_pool(fp, tp->pool, tp->qsize) < 0) {
-+ bgzf_close(fp);
-+ return NULL;
-+ }
-+ return fp;
-+}
-+
-+static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out)
-+{
-+ bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t));
-+ state->flag_on = opts->flag_on;
-+ state->flag_off = opts->flag_off;
-+ state->flag_alloff = opts->flag_alloff;
-+ state->has12 = opts->has12;
-+ state->use_oq = opts->use_oq;
-+ state->illumina_tag = opts->illumina_tag;
-+ state->copy_tags = opts->copy_tags;
-+ state->filetype = opts->filetype;
-+ state->def_qual = opts->def_qual;
-+ state->index_sequence = NULL;
-+ state->hsamtools_stdout = NULL;
-+ state->compression_level = opts->compression_level;
-+
-+ state->taglist = kl_init(ktaglist);
-+ if (opts->extra_tags) {
-+ char *save_p;
-+ char *s = strtok_r(opts->extra_tags, ",", &save_p);
-+ while (s) {
-+ if (strlen(s) != 2) {
-+ fprintf(samtools_stderr, "Parsing extra tags - '%s' is not two characters\n", s);
-+ free(state);
-+ return false;
-+ }
-+ char **et = kl_pushp(ktaglist, state->taglist);
-+ *et = s;
-+ s = strtok_r(NULL, ",", &save_p);
-+ }
-+ }
-+
-+ state->fp = sam_open(opts->fn_input, "r");
-+ if (state->fp == NULL) {
-+ print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input);
-+ free(state);
-+ return false;
-+ }
-+
-+ state->p.pool = NULL;
-+ if (opts->ga.nthreads > 0) {
-+ if (!(state->p.pool = hts_tpool_init(opts->ga.nthreads))) {
-+ fprintf(samtools_stderr, "Failed to create thread pool\n");
-+ free(state);
-+ return false;
-+ }
-+ state->p.qsize = opts->ga.nthreads*2;
-+ hts_set_thread_pool(state->fp, &state->p);
-+ }
-+
-+ uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL;
-+ if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX;
-+ if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-+ fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-+ free(state);
-+ return false;
-+ }
-+ if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) {
-+ fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-+ free(state);
-+ return false;
-+ }
-+ if (opts->fnse) {
-+ state->fpse = open_fqfile(opts->fnse, state->compression_level, &state->p);
-+ if (state->fpse == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse);
-+ free(state);
-+ return false;
-+ }
-+ }
-+
-+ if (opts->ga.reference) {
-+ if (hts_set_fai_filename(state->fp, opts->ga.reference) != 0) {
-+ print_error_errno("bam2fq", "cannot load reference \"%s\"", opts->ga.reference);
-+ free(state);
-+ return false;
-+ }
-+ }
-+
-+ int i, j;
-+ for (i = 0; i < 3; ++i) {
-+ if (opts->fnr[i]) {
-+ for (j = 0; j < i; j++)
-+ if (opts->fnr[j] && strcmp(opts->fnr[j], opts->fnr[i]) == 0)
-+ break;
-+ if (j == i) {
-+ state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level, &state->p);
-+ if (state->fpr[i] == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"",
-+ i, opts->fnr[i]);
-+ free(state);
-+ return false;
-+ }
-+ } else {
-+ state->fpr[i] = state->fpr[j];
-+ }
-+ } else {
-+ if (!state->hsamtools_stdout) {
-+ state->hsamtools_stdout = bgzf_dopen(fileno(samtools_stdout), "wu");
-+ if (!state->hsamtools_stdout) {
-+ print_error_errno("bam2fq", "Cannot open STDOUT");
-+ free(state);
-+ return false;
-+ }
-+ }
-+ state->fpr[i] = state->hsamtools_stdout;
-+ }
-+ }
-+ for (i = 0; i < 2; i++) {
-+ state->fpi[i] = NULL;
-+ if (opts->index_file[i]) {
-+ for (j = 0; j < 3; j++)
-+ if (opts->fnr[j] && strcmp(opts->fnr[j], opts->index_file[i]) == 0)
-+ break;
-+ for (j -= 3; j >= 0 && j < i; j++)
-+ if (opts->index_file[j] && strcmp(opts->index_file[j], opts->index_file[i]) == 0)
-+ break;
-+ if (i == j) {
-+ state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level, &state->p);
-+ if (state->fpi[i] == NULL) {
-+ print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"",
-+ i+1, opts->index_file[i]);
-+ free(state);
-+ return false;
-+ }
-+ } else if (j < 0) {
-+ state->fpi[i] = state->fpr[j+3];
-+ } else {
-+ state->fpi[i] = state->fpi[j];
-+ }
-+ }
-+ }
-+
-+ state->h = sam_hdr_read(state->fp);
-+ if (state->h == NULL) {
-+ fprintf(samtools_stderr, "Failed to read header for \"%s\"\n", opts->fn_input);
-+ free(state);
-+ return false;
-+ }
-+
-+ *state_out = state;
-+ return true;
-+}
-+
-+static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status)
-+{
-+ bool valid = true;
-+ sam_hdr_destroy(state->h);
-+ check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status);
-+ if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; }
-+ int i, j;
-+ for (i = 0; i < 3; ++i) {
-+ if (state->fpr[i] != state->hsamtools_stdout) {
-+ for (j = 0; j < i; j++)
-+ if (state->fpr[i] == state->fpr[j])
-+ break;
-+ if (j == i && bgzf_close(state->fpr[i])) {
-+ print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]);
-+ valid = false;
-+ }
-+ }
-+ }
-+ if (state->hsamtools_stdout) {
-+ if (bgzf_close(state->hsamtools_stdout)) {
-+ print_error_errno("bam2fq", "Error closing STDOUT");
-+ valid = false;
-+ }
-+ }
-+ for (i = 0; i < 2; i++) {
-+ for (j = 0; j < 3; j++)
-+ if (state->fpi[i] == state->fpr[j])
-+ break;
-+ for (j -= 3; j >= 0 && j < i; j++)
-+ if (state->fpi[i] == state->fpi[j])
-+ break;
-+ if (j == i && state->fpi[i] && bgzf_close(state->fpi[i])) {
-+ print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]);
-+ valid = false;
-+ }
-+ }
-+ kl_destroy(ktaglist,state->taglist);
-+ free(state->index_sequence);
-+ if (state->p.pool)
-+ hts_tpool_destroy(state->p.pool);
-+ free(state);
-+ return valid;
-+}
-+
-+static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state)
-+{
-+ return ((b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags
-+ || (b->core.flag&(state->flag_off)) != 0
-+ || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff));
-+
-+}
-+
-+static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts)
-+{
-+ int n;
-+ bam1_t *records[3] = {NULL, NULL, NULL};
-+ char *current_qname = NULL;
-+ int64_t n_reads = 0, n_singletons = 0; // Statistics
-+ kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}};
-+ int score[3];
-+ int at_eof;
-+ bool valid = true;
-+ bam1_t* b = NULL;
-+
-+ while (true) {
-+ if (!b)
-+ b = bam_init1();
-+ if (b == NULL) {
-+ perror("[bam2fq_mainloop] Malloc error for bam record buffer.");
-+ valid = false;
-+ break;
-+ }
-+ int res = sam_read1(state->fp, state->h, b);
-+ if (res < -1) {
-+ fprintf(samtools_stderr, "[bam2fq_mainloop] Failed to read bam record.\n");
-+ valid = false;
-+ break;
-+ }
-+ at_eof = res < 0;
-+
-+ if (!at_eof && filter_it_out(b, state))
-+ continue;
-+ if (!at_eof) ++n_reads;
-+
-+ if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) {
-+ if (current_qname) {
-+ if (state->illumina_tag) {
-+ for (n=0; valid && n<3; n++) {
-+ if (!records[n]) continue;
-+ if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false;
-+ }
-+ if (!valid) break;
-+ }
-+ free(state->index_sequence); state->index_sequence = NULL;
-+ if (score[1] > 0 && score[2] > 0) {
-+ // print linebuf[1] to fpr[1], linebuf[2] to fpr[2]
-+ if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ } else if (score[1] > 0 || score[2] > 0) {
-+ if (state->fpse) {
-+ // print whichever one exists to fpse
-+ if (score[1] > 0) {
-+ if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ } else {
-+ if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ }
-+ ++n_singletons;
-+ } else {
-+ if (score[1] > 0) {
-+ if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-+ } else {
-+ if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-+ }
-+ }
-+ }
-+ if (score[0]) { // TODO: check this
-+ // print linebuf[0] to fpr[0]
-+ if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; }
-+ }
-+ }
-+
-+
-+ free(current_qname); current_qname = NULL;
-+ score[0] = score[1] = score[2] = 0;
-+ for (n=0; n < 3; n++) {
-+ bam_destroy1(records[n]); records[n]=NULL;
-+ }
-+
-+ if (at_eof) { break; }
-+
-+ current_qname = strdup(bam_get_qname(b));
-+ if (!current_qname) { valid = false; break; }
-+ }
-+
-+ // Prefer a copy of the read that has base qualities
-+ int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1;
-+ readpart rp = which_readpart(b);
-+ if (b_score > score[rp]) {
-+ if (!tags2fq(b, state, opts)) { valid = false; break; }
-+ if (records[rp]) bam_destroy1(records[rp]);
-+ records[rp] = b;
-+ score[rp] = b_score;
-+ b = NULL;
-+ if(!bam1_to_fq(records[rp], &linebuf[rp], state)) {
-+ fprintf(samtools_stderr, "[%s] Error converting read to FASTA/Q\n", __func__);
-+ valid = false; break;
-+ }
-+ }
-+ }
-+ if (!valid)
-+ {
-+ perror("[bam2fq_mainloop] Error writing to FASTx files.");
-+ }
-+ bam_destroy1(b);
-+ for (n=0; n < 3; n++) {
-+ bam_destroy1(records[n]);
-+ }
-+ free(current_qname);
-+ free(linebuf[0].s);
-+ free(linebuf[1].s);
-+ free(linebuf[2].s);
-+ fprintf(samtools_stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons);
-+ fprintf(samtools_stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads);
-+
-+ return valid;
-+}
-+
-+int main_bam2fq(int argc, char *argv[])
-+{
-+ int status = EXIT_SUCCESS;
-+ bam2fq_opts_t* opts = NULL;
-+ bam2fq_state_t* state = NULL;
-+
-+ bool valid = parse_opts(argc, argv, &opts);
-+ if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE;
-+
-+ if (!init_state(opts, &state)) return EXIT_FAILURE;
-+
-+ if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE;
-+
-+ if (!destroy_state(opts, state, &status)) return EXIT_FAILURE;
-+ sam_global_args_free(&opts->ga);
-+ free_opts(opts);
-+
-+ return status;
-+}
---- python-pysam.orig/samtools/bam_import.c
-+++ /dev/null
-@@ -1,65 +0,0 @@
--/* bam_import.c -- SAM format parsing.
--
-- Copyright (C) 2008-2013 Genome Research Ltd.
--
-- Author: Heng Li <lh3@sanger.ac.uk>
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE. */
--
--#include <config.h>
--
--#include <zlib.h>
--#include <stdio.h>
--#include <string.h>
--#include <unistd.h>
--#include "htslib/kstring.h"
--#include "bam.h"
--#include "htslib/kseq.h"
--
--KSTREAM_INIT(gzFile, gzread, 16384)
--
--bam_header_t *sam_header_read2(const char *fn)
--{
-- bam_header_t *header;
-- int c, dret, n_targets = 0;
-- gzFile fp;
-- kstream_t *ks;
-- kstring_t *str;
-- kstring_t samstr = { 0, 0, NULL };
-- if (fn == 0) return 0;
-- fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r");
-- if (fp == 0) return 0;
-- ks = ks_init(fp);
-- str = (kstring_t*)calloc(1, sizeof(kstring_t));
-- while (ks_getuntil(ks, 0, str, &dret) > 0) {
-- ksprintf(&samstr, "@SQ\tSN:%s", str->s);
-- ks_getuntil(ks, 0, str, &dret);
-- ksprintf(&samstr, "\tLN:%d\n", atoi(str->s));
-- n_targets++;
-- if (dret != '\n')
-- while ((c = ks_getc(ks)) != '\n' && c != -1);
-- }
-- ks_destroy(ks);
-- gzclose(fp);
-- free(str->s); free(str);
-- header = sam_hdr_parse(samstr.l, samstr.s? samstr.s : "");
-- free(samstr.s);
-- fprintf(stderr, "[sam_header_read2] %d sequences loaded.\n", n_targets);
-- return header;
--}
---- python-pysam.orig/samtools/bam_import.c.pysam.c
-+++ /dev/null
-@@ -1,67 +0,0 @@
--#include "samtools.pysam.h"
--
--/* bam_import.c -- SAM format parsing.
--
-- Copyright (C) 2008-2013 Genome Research Ltd.
--
-- Author: Heng Li <lh3@sanger.ac.uk>
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE. */
--
--#include <config.h>
--
--#include <zlib.h>
--#include <stdio.h>
--#include <string.h>
--#include <unistd.h>
--#include "htslib/kstring.h"
--#include "bam.h"
--#include "htslib/kseq.h"
--
--KSTREAM_INIT(gzFile, gzread, 16384)
--
--bam_header_t *sam_header_read2(const char *fn)
--{
-- bam_header_t *header;
-- int c, dret, n_targets = 0;
-- gzFile fp;
-- kstream_t *ks;
-- kstring_t *str;
-- kstring_t samstr = { 0, 0, NULL };
-- if (fn == 0) return 0;
-- fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r");
-- if (fp == 0) return 0;
-- ks = ks_init(fp);
-- str = (kstring_t*)calloc(1, sizeof(kstring_t));
-- while (ks_getuntil(ks, 0, str, &dret) > 0) {
-- ksprintf(&samstr, "@SQ\tSN:%s", str->s);
-- ks_getuntil(ks, 0, str, &dret);
-- ksprintf(&samstr, "\tLN:%d\n", atoi(str->s));
-- n_targets++;
-- if (dret != '\n')
-- while ((c = ks_getc(ks)) != '\n' && c != -1);
-- }
-- ks_destroy(ks);
-- gzclose(fp);
-- free(str->s); free(str);
-- header = sam_hdr_parse(samstr.l, samstr.s? samstr.s : "");
-- free(samstr.s);
-- fprintf(samtools_stderr, "[sam_header_read2] %d sequences loaded.\n", n_targets);
-- return header;
--}
---- python-pysam.orig/samtools/bam_index.c
-+++ python-pysam/samtools/bam_index.c
-@@ -1,6 +1,6 @@
- /* bam_index.c -- index and idxstats subcommands.
-
-- Copyright (C) 2008-2011, 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2008-2011, 2013-2016, 2018, 2019 Genome Research Ltd.
- Portions copyright (C) 2010 Broad Institute.
- Portions copyright (C) 2013 Peter Cock, The James Hutton Institute.
-
-@@ -114,20 +114,20 @@
- * Returns 0 on success,
- * -1 on failure.
- */
--int slow_idxstats(samFile *fp, bam_hdr_t *header) {
-+int slow_idxstats(samFile *fp, sam_hdr_t *header) {
- int ret, last_tid = -2;
- bam1_t *b = bam_init1();
-
- if (hts_set_opt(fp, CRAM_OPT_REQUIRED_FIELDS, SAM_RNAME | SAM_FLAG))
- return -1;
-
-- uint64_t (*count0)[2] = calloc(header->n_targets+1, sizeof(*count0));
-+ uint64_t (*count0)[2] = calloc(sam_hdr_nref(header)+1, sizeof(*count0));
- uint64_t (*counts)[2] = count0+1;
- if (!count0)
- return -1;
-
- while ((ret = sam_read1(fp, header, b)) >= 0) {
-- if (b->core.tid >= header->n_targets || b->core.tid < -1) {
-+ if (b->core.tid >= sam_hdr_nref(header) || b->core.tid < -1) {
- free(count0);
- return -1;
- }
-@@ -148,10 +148,10 @@
-
- if (ret == -1) {
- int i;
-- for (i = 0; i < header->n_targets; i++) {
-- printf("%s\t%d\t%"PRIu64"\t%"PRIu64"\n",
-- header->target_name[i],
-- header->target_len[i],
-+ for (i = 0; i < sam_hdr_nref(header); i++) {
-+ printf("%s\t%"PRId64"\t%"PRIu64"\t%"PRIu64"\n",
-+ sam_hdr_tid2name(header, i),
-+ (int64_t) sam_hdr_tid2len(header, i),
- counts[i][0], counts[i][1]);
- }
- printf("*\t0\t%"PRIu64"\t%"PRIu64"\n", counts[-1][0], counts[-1][1]);
-@@ -167,14 +167,14 @@
- static void usage_exit(FILE *fp, int exit_status)
- {
- fprintf(fp, "Usage: samtools idxstats [options] <in.bam>\n");
-- sam_global_opt_help(fp, "-.---@");
-+ sam_global_opt_help(fp, "-.---@-.");
- exit(exit_status);
- }
-
- int bam_idxstats(int argc, char *argv[])
- {
- hts_idx_t* idx;
-- bam_hdr_t* header;
-+ sam_hdr_t* header;
- samFile* fp;
- int c;
-
-@@ -227,9 +227,9 @@
- }
-
- int i;
-- for (i = 0; i < header->n_targets; ++i) {
-+ for (i = 0; i < sam_hdr_nref(header); ++i) {
- // Print out contig name and length
-- printf("%s\t%d", header->target_name[i], header->target_len[i]);
-+ printf("%s\t%"PRId64, sam_hdr_tid2name(header, i), (int64_t) sam_hdr_tid2len(header, i));
- // Now fetch info about it from the meta bin
- uint64_t u, v;
- hts_idx_get_stat(idx, i, &u, &v);
-@@ -240,7 +240,7 @@
- hts_idx_destroy(idx);
- }
-
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(fp);
- return 0;
- }
---- python-pysam.orig/samtools/bam_index.c.pysam.c
-+++ python-pysam/samtools/bam_index.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_index.c -- index and idxstats subcommands.
-
-- Copyright (C) 2008-2011, 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2008-2011, 2013-2016, 2018, 2019 Genome Research Ltd.
- Portions copyright (C) 2010 Broad Institute.
- Portions copyright (C) 2013 Peter Cock, The James Hutton Institute.
-
-@@ -116,20 +116,20 @@
- * Returns 0 on success,
- * -1 on failure.
- */
--int slow_idxstats(samFile *fp, bam_hdr_t *header) {
-+int slow_idxstats(samFile *fp, sam_hdr_t *header) {
- int ret, last_tid = -2;
- bam1_t *b = bam_init1();
-
- if (hts_set_opt(fp, CRAM_OPT_REQUIRED_FIELDS, SAM_RNAME | SAM_FLAG))
- return -1;
-
-- uint64_t (*count0)[2] = calloc(header->n_targets+1, sizeof(*count0));
-+ uint64_t (*count0)[2] = calloc(sam_hdr_nref(header)+1, sizeof(*count0));
- uint64_t (*counts)[2] = count0+1;
- if (!count0)
- return -1;
-
- while ((ret = sam_read1(fp, header, b)) >= 0) {
-- if (b->core.tid >= header->n_targets || b->core.tid < -1) {
-+ if (b->core.tid >= sam_hdr_nref(header) || b->core.tid < -1) {
- free(count0);
- return -1;
- }
-@@ -150,10 +150,10 @@
-
- if (ret == -1) {
- int i;
-- for (i = 0; i < header->n_targets; i++) {
-- fprintf(samtools_stdout, "%s\t%d\t%"PRIu64"\t%"PRIu64"\n",
-- header->target_name[i],
-- header->target_len[i],
-+ for (i = 0; i < sam_hdr_nref(header); i++) {
-+ fprintf(samtools_stdout, "%s\t%"PRId64"\t%"PRIu64"\t%"PRIu64"\n",
-+ sam_hdr_tid2name(header, i),
-+ (int64_t) sam_hdr_tid2len(header, i),
- counts[i][0], counts[i][1]);
- }
- fprintf(samtools_stdout, "*\t0\t%"PRIu64"\t%"PRIu64"\n", counts[-1][0], counts[-1][1]);
-@@ -169,14 +169,14 @@
- static void usage_exit(FILE *fp, int exit_status)
- {
- fprintf(fp, "Usage: samtools idxstats [options] <in.bam>\n");
-- sam_global_opt_help(fp, "-.---@");
-+ sam_global_opt_help(fp, "-.---@-.");
- exit(exit_status);
- }
-
- int bam_idxstats(int argc, char *argv[])
- {
- hts_idx_t* idx;
-- bam_hdr_t* header;
-+ sam_hdr_t* header;
- samFile* fp;
- int c;
-
-@@ -229,9 +229,9 @@
- }
-
- int i;
-- for (i = 0; i < header->n_targets; ++i) {
-+ for (i = 0; i < sam_hdr_nref(header); ++i) {
- // Print out contig name and length
-- fprintf(samtools_stdout, "%s\t%d", header->target_name[i], header->target_len[i]);
-+ fprintf(samtools_stdout, "%s\t%"PRId64, sam_hdr_tid2name(header, i), (int64_t) sam_hdr_tid2len(header, i));
- // Now fetch info about it from the meta bin
- uint64_t u, v;
- hts_idx_get_stat(idx, i, &u, &v);
-@@ -242,7 +242,7 @@
- hts_idx_destroy(idx);
- }
-
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(fp);
- return 0;
- }
---- python-pysam.orig/samtools/bam_lpileup.c
-+++ python-pysam/samtools/bam_lpileup.c
-@@ -100,7 +100,7 @@
- buf->n_nodes = 0;
- }
-
--static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data)
-+static int tview_func(uint32_t tid, hts_pos_t pos, int n, const bam_pileup1_t *pl, void *data)
- {
- bam_lplbuf_t *tv = (bam_lplbuf_t*)data;
- freenode_t *p;
---- python-pysam.orig/samtools/bam_lpileup.c.pysam.c
-+++ python-pysam/samtools/bam_lpileup.c.pysam.c
-@@ -102,7 +102,7 @@
- buf->n_nodes = 0;
- }
-
--static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data)
-+static int tview_func(uint32_t tid, hts_pos_t pos, int n, const bam_pileup1_t *pl, void *data)
- {
- bam_lplbuf_t *tv = (bam_lplbuf_t*)data;
- freenode_t *p;
---- python-pysam.orig/samtools/bam_lpileup.h
-+++ python-pysam/samtools/bam_lpileup.h
-@@ -33,7 +33,7 @@
-
- #ifndef BAM_PILEUP_F_DEFINED
- #define BAM_PILEUP_F_DEFINED
--typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data);
-+typedef int (*bam_pileup_f)(uint32_t tid, hts_pos_t pos, int n, const bam_pileup1_t *pl, void *data);
- #endif //BAM_PILEUP_F_DEFINED
-
-
---- python-pysam.orig/samtools/bam_markdup.c
-+++ python-pysam/samtools/bam_markdup.c
-@@ -1,7 +1,7 @@
- /* bam_markdup.c -- Mark duplicates from a coord sorted file that has gone
- through fixmates with the mate scoring option on.
-
-- Copyright (C) 2017-18 Genome Research Ltd.
-+ Copyright (C) 2017-2019 Genome Research Ltd.
-
- Author: Andrew Whitwham <aw7@sanger.ac.uk>
-
-@@ -22,6 +22,9 @@
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE
-+
-+Estimate library size derived from Picard DuplicationMetrics.java
-+Copyright (c) 2009,2018 The Broad Institute. MIT license.
- */
-
- #include <config.h>
-@@ -33,6 +36,7 @@
- #include <ctype.h>
- #include <time.h>
- #include <sys/stat.h>
-+#include <math.h>
- #include "htslib/thread_pool.h"
- #include "htslib/sam.h"
- #include "sam_opts.h"
-@@ -42,26 +46,53 @@
- #include "htslib/kstring.h"
- #include "tmp_file.h"
-
-+
-+typedef struct {
-+ samFile *in;
-+ samFile *out;
-+ char *prefix;
-+ int remove_dups;
-+ int32_t max_length;
-+ int do_stats;
-+ int supp;
-+ int tag;
-+ int opt_dist;
-+ int no_pg;
-+ int clear;
-+ int mode;
-+ int write_index;
-+ int include_fails;
-+ char *stats_file;
-+ char *arg_list;
-+ char *out_fn;
-+} md_param_t;
-+
- typedef struct {
-- int32_t single;
-+ hts_pos_t this_coord;
-+ hts_pos_t other_coord;
- int32_t this_ref;
-- int32_t this_coord;
- int32_t other_ref;
-- int32_t other_coord;
-- int32_t leftmost;
-- int32_t orientation;
-+ int8_t single;
-+ int8_t leftmost;
-+ int8_t orientation;
- } key_data_t;
-
-+typedef struct read_queue_s {
-+ key_data_t pair_key;
-+ key_data_t single_key;
-+ bam1_t *b;
-+ struct read_queue_s *duplicate;
-+ hts_pos_t pos;
-+} read_queue_t;
-+
- typedef struct {
-- bam1_t *p;
-+ read_queue_t *p;
- } in_hash_t;
-
- typedef struct {
-- bam1_t *b;
-- int32_t pos;
-- key_data_t pair_key;
-- key_data_t single_key;
--} read_queue_t;
-+ char *name;
-+ char type;
-+} dup_map_t;
-
-
-
-@@ -72,22 +103,22 @@
- khint_t hash;
-
- if (key.single) {
-- unsigned char sig[12];
-+ unsigned char sig[13];
-
- memcpy(sig + i, &key.this_ref, 4); i += 4;
-- memcpy(sig + i, &key.this_coord, 4); i += 4;
-- memcpy(sig + i, &key.orientation, 4); i += 4;
-+ memcpy(sig + i, &key.this_coord, 8); i += 8;
-+ memcpy(sig + i, &key.orientation, 1); i += 1;
-
- hash = do_hash(sig, i);
- } else {
-- unsigned char sig[24];
-+ unsigned char sig[26];
-
- memcpy(sig + i, &key.this_ref, 4); i += 4;
-- memcpy(sig + i, &key.this_coord, 4); i += 4;
-+ memcpy(sig + i, &key.this_coord, 8); i += 8;
- memcpy(sig + i, &key.other_ref, 4); i += 4;
-- memcpy(sig + i, &key.other_coord, 4); i += 4;
-- memcpy(sig + i, &key.leftmost, 4); i += 4;
-- memcpy(sig + i, &key.orientation, 4); i += 4;
-+ memcpy(sig + i, &key.other_coord, 8); i += 8;
-+ memcpy(sig + i, &key.leftmost, 1); i += 1;
-+ memcpy(sig + i, &key.orientation, 1); i += 1;
-
- hash = do_hash(sig, i);
- }
-@@ -122,21 +153,35 @@
-
-
- #define __free_queue_element(p)
-+
-+// Orientations (prime numbers to feed to hashing algorithm)
- #define O_FF 2
- #define O_RR 3
- #define O_FR 5
- #define O_RF 7
-
-+// Left or rightmost
-+#define R_LE 11
-+#define R_RI 13
-+
-+#define BMD_WARNING_MAX 10
-+
-+#define MD_MIN_QUALITY 15
-+
-+// Duplicate finding mode
-+#define MD_MODE_TEMPLATE 0
-+#define MD_MODE_SEQUENCE 1
-+
- KHASH_INIT(reads, key_data_t, in_hash_t, 1, hash_key, key_equal) // read map hash
- KLIST_INIT(read_queue, read_queue_t, __free_queue_element) // the reads buffer
--KHASH_MAP_INIT_STR(duplicates, int) // map of duplicates for supplementary dup id
-+KHASH_MAP_INIT_STR(duplicates, dup_map_t) // map of duplicates for supplementary dup id
-
-
- /* Calculate the mate's unclipped start based on position and cigar string from MC tag. */
-
--static int32_t unclipped_other_start(int32_t op, char *cigar) {
-+static hts_pos_t unclipped_other_start(hts_pos_t op, char *cigar) {
- char *c = cigar;
-- int32_t clipped = 0;
-+ int64_t clipped = 0;
-
- while (*c && *c != '*') {
- long num = 0;
-@@ -162,9 +207,9 @@
-
- /* Calculate the current read's start based on the stored cigar string. */
-
--static int32_t unclipped_start(bam1_t *b) {
-+static hts_pos_t unclipped_start(bam1_t *b) {
- uint32_t *cigar = bam_get_cigar(b);
-- int32_t clipped = 0;
-+ int64_t clipped = 0;
- uint32_t i;
-
- for (i = 0; i < b->core.n_cigar; i++) {
-@@ -183,9 +228,9 @@
-
- /* Calculate the mate's unclipped end based on start position and cigar string from MC tag.*/
-
--static int32_t unclipped_other_end(int32_t op, char *cigar) {
-+static hts_pos_t unclipped_other_end(int64_t op, char *cigar) {
- char *c = cigar;
-- int32_t refpos = 0;
-+ int64_t refpos = 0;
- int skip = 1;
-
- while (*c && *c != '*') {
-@@ -224,9 +269,9 @@
-
- /* Calculate the current read's end based on the stored cigar string. */
-
--static int32_t unclipped_end(bam1_t *b) {
-+static hts_pos_t unclipped_end(bam1_t *b) {
- uint32_t *cigar = bam_get_cigar(b);
-- int32_t end_pos, clipped = 0;
-+ hts_pos_t end_pos, clipped = 0;
- int32_t i;
-
- end_pos = bam_endpos(b);
-@@ -293,7 +338,7 @@
- int i;
-
- for (i = 0; i < b->core.l_qseq; i++) {
-- if (qual[i] >= 15) score += qual[i];
-+ if (qual[i] >= MD_MIN_QUALITY) score += qual[i];
- }
-
- return score;
-@@ -305,10 +350,10 @@
- the reference id, orientation and whether the current
- read is leftmost of the pair. */
-
--static int make_pair_key(key_data_t *key, bam1_t *bam) {
-- int32_t this_ref, this_coord, this_end;
-- int32_t other_ref, other_coord, other_end;
-- int32_t orientation, leftmost;
-+static int make_pair_key_template(key_data_t *key, bam1_t *bam) {
-+ hts_pos_t this_coord, other_coord, this_end, other_end;
-+ int32_t this_ref, other_ref;
-+ int8_t orientation, leftmost;
- uint8_t *data;
- char *cig;
-
-@@ -319,7 +364,11 @@
- this_end = unclipped_end(bam);
-
- if ((data = bam_aux_get(bam, "MC"))) {
-- cig = bam_aux2Z(data);
-+ if (!(cig = bam_aux2Z(data))) {
-+ fprintf(stderr, "[markdup] error: MC tag wrong type. Please use the MC tag provided by samtools fixmate.\n");
-+ return 1;
-+ }
-+
- other_end = unclipped_other_end(bam->core.mpos, cig);
- other_coord = unclipped_other_start(bam->core.mpos, cig);
- } else {
-@@ -402,9 +451,9 @@
- }
-
- if (!leftmost)
-- leftmost = 13;
-+ leftmost = R_RI;
- else
-- leftmost = 11;
-+ leftmost = R_LE;
-
- key->single = 0;
- key->this_ref = this_ref;
-@@ -418,13 +467,140 @@
- }
-
-
-+static int make_pair_key_sequence(key_data_t *key, bam1_t *bam) {
-+ hts_pos_t this_coord, this_end, other_coord, other_end, leftmost;
-+ int32_t this_ref, other_ref;
-+ int8_t orientation, left_read;
-+ uint8_t *data;
-+ char *cig;
-+
-+ this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash
-+ other_ref = bam->core.mtid + 1;
-+
-+ this_coord = unclipped_start(bam);
-+ this_end = unclipped_end(bam);
-+
-+ if ((data = bam_aux_get(bam, "MC"))) {
-+ if (!(cig = bam_aux2Z(data))) {
-+ fprintf(stderr, "[markdup] error: MC tag wrong type. Please use the MC tag provided by samtools fixmate.\n");
-+ return 1;
-+ }
-+
-+ other_end = unclipped_other_end(bam->core.mpos, cig);
-+ other_coord = unclipped_other_start(bam->core.mpos, cig);
-+ } else {
-+ fprintf(stderr, "[markdup] error: no MC tag. Please run samtools fixmate on file first.\n");
-+ return 1;
-+ }
-+
-+ // work out orientations
-+ if (this_ref != other_ref) {
-+ leftmost = this_ref - other_ref;
-+ } else {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+ if (!bam_is_rev(bam)) {
-+ leftmost = this_coord - other_coord;
-+ } else {
-+ leftmost = this_end - other_end;
-+ }
-+ } else {
-+ if (bam_is_rev(bam)) {
-+ leftmost = this_end - other_coord;
-+ } else {
-+ leftmost = this_coord - other_end;
-+ }
-+ }
-+ }
-+
-+ if (leftmost < 0) {
-+ leftmost = 1;
-+ } else if (leftmost > 0) {
-+ leftmost = 0;
-+ } else {
-+ // tie breaks
-+
-+ if (bam->core.pos == bam->core.mpos) {
-+ if (bam->core.flag & BAM_FREAD1) {
-+ leftmost = 1;
-+ } else {
-+ leftmost = 0;
-+ }
-+ } else if (bam->core.pos < bam->core.mpos) {
-+ leftmost = 1;
-+ } else {
-+ leftmost = 0;
-+ }
-+ }
-+
-+ // pair orientation
-+ if (leftmost) {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_FF;
-+ } else {
-+ orientation = O_RR;
-+ }
-+ } else {
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_FR;
-+ } else {
-+ orientation = O_RF;
-+ }
-+ }
-+ } else {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_RR;
-+ } else {
-+ orientation = O_FF;
-+ }
-+ } else {
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_RF;
-+ } else {
-+ orientation = O_FR;
-+ }
-+ }
-+ }
-+
-+ if (!leftmost)
-+ left_read = R_RI;
-+ else
-+ left_read = R_LE;
-+
-+ if (!bam_is_rev(bam)) {
-+ this_coord = unclipped_start(bam);
-+ } else {
-+ this_coord = unclipped_end(bam);
-+ }
-+
-+ if (!bam_is_mrev(bam)) {
-+ other_coord = unclipped_other_start(bam->core.mpos, cig);
-+ } else {
-+ other_coord = unclipped_other_end(bam->core.mpos, cig);
-+ }
-+
-+ key->single = 0;
-+ key->this_ref = this_ref;
-+ key->this_coord = this_coord;
-+ key->other_ref = other_ref;
-+ key->other_coord = other_coord;
-+ key->leftmost = left_read;
-+ key->orientation = orientation;
-+
-+ return 0;
-+}
-+
- /* Create a signature hash of single read (or read with an unmatched pair).
- Uses unclipped start (or end depending on orientation), reference id,
- and orientation. */
-
- static void make_single_key(key_data_t *key, bam1_t *bam) {
-- int32_t this_ref, this_coord;
-- int32_t orientation;
-+ hts_pos_t this_coord;
-+ int32_t this_ref;
-+ int8_t orientation;
-
- this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash
-
-@@ -442,23 +618,45 @@
- key->orientation = orientation;
- }
-
-+
- /* Add the duplicate name to a hash if it does not exist. */
-
--static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe) {
-+static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe, char *orig_name, char type) {
- khiter_t d;
- int ret;
-
- d = kh_get(duplicates, d_hash, bam_get_qname(dupe));
-
- if (d == kh_end(d_hash)) {
-- d = kh_put(duplicates, d_hash, strdup(bam_get_qname(dupe)), &ret);
-+ char *name = strdup(bam_get_qname(dupe));
-+ if (name) {
-+ d = kh_put(duplicates, d_hash, name, &ret);
-+ } else {
-+ ret = -1;
-+ }
-+
-+ if (ret >= 0) {
-+ if (orig_name) {
-+ if (ret == 0) {
-+ // replace old name
-+ free(kh_value(d_hash, d).name);
-+ free(name);
-+ }
-
-- if (ret > 0) {
-- kh_value(d_hash, d) = 1;
-- } else if (ret == 0) {
-- kh_value(d_hash, d)++;
-+ kh_value(d_hash, d).name = strdup(orig_name);
-+
-+ if (kh_value(d_hash, d).name == NULL) {
-+ fprintf(stderr, "[markdup] error: unable to allocate memory for duplicate original name.\n");
-+ return 1;
-+ }
-+ } else {
-+ kh_value(d_hash, d).name = NULL;
-+ }
-+
-+ kh_value(d_hash, d).type = type;
- } else {
- fprintf(stderr, "[markdup] error: unable to store supplementary duplicates.\n");
-+ free(name);
- return 1;
- }
- }
-@@ -467,6 +665,467 @@
- }
-
-
-+static inline int get_coordinate_positions(const char *qname, int *xpos, int *ypos) {
-+ int sep = 0;
-+ int pos = 0;
-+
-+ while (qname[pos]) {
-+ if (qname[pos] == ':') {
-+ sep++;
-+
-+ if (sep == 2) {
-+ *xpos = pos + 1;
-+ } else if (sep == 3) {
-+ *ypos = pos + 1;
-+ } else if (sep == 4) { // HiSeq style names
-+ *xpos = *ypos;
-+ *ypos = pos + 1;
-+ } else if (sep == 5) { // Newer Illumina format
-+ *xpos = pos + 1;
-+ } else if (sep == 6) {
-+ *ypos = pos + 1;
-+ }
-+ }
-+
-+ pos++;
-+ }
-+
-+ return sep;
-+}
-+
-+/* Using the coordinates from the Illumina read name, see whether the duplicated read is
-+ close enough (set by max_dist) to the original to be counted as optical.*/
-+
-+static int optical_duplicate(bam1_t *ori, bam1_t *dup, long max_dist, long *warnings) {
-+ int ret = 0, seps;
-+ char *original, *duplicate;
-+ int oxpos = 0, oypos = 0, dxpos = 0, dypos = 0;
-+
-+
-+ original = bam_get_qname(ori);
-+ duplicate = bam_get_qname(dup);
-+
-+ seps = get_coordinate_positions(original, &oxpos, &oypos);
-+
-+ if (!(seps == 3 || seps == 4 || seps == 6 || seps == 7)) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: cannot decipher read name %s for optical duplicate marking.\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ seps = get_coordinate_positions(duplicate, &dxpos, &dypos);
-+
-+ if (!(seps == 3 || seps == 4 || seps == 6 || seps == 7)) {
-+
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: cannot decipher read name %s for optical duplicate marking.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (strncmp(original, duplicate, oxpos - 1) == 0) {
-+ // the initial parts match, look at the numbers
-+ long ox, oy, dx, dy, xdiff, ydiff;
-+ char *end;
-+
-+ ox = strtol(original + oxpos, &end, 10);
-+
-+ if ((original + oxpos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: can not decipher X coordinate in %s .\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ dx = strtol(duplicate + dxpos, &end, 10);
-+
-+ if ((duplicate + dxpos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: can not decipher X coordinate in %s.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (ox > dx) {
-+ xdiff = ox - dx;
-+ } else {
-+ xdiff = dx - ox;
-+ }
-+
-+ if (xdiff <= max_dist) {
-+ // still might be optical
-+
-+ oy = strtol(original + oypos, &end, 10);
-+
-+ if ((original + oypos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: can not decipher Y coordinate in %s.\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ dy = strtol(duplicate + dypos, &end, 10);
-+
-+ if ((duplicate + dypos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(stderr, "[markdup] warning: can not decipher Y coordinate in %s.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (oy > dy) {
-+ ydiff = oy - dy;
-+ } else {
-+ ydiff = dy - oy;
-+ }
-+
-+ if (ydiff <= max_dist) ret = 1;
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+
-+static int mark_duplicates(md_param_t *param, khash_t(duplicates) *dup_hash, bam1_t *ori, bam1_t *dup,
-+ long *optical, long *warn) {
-+ char dup_type = 0;
-+ long incoming_warnings = *warn;
-+
-+ dup->core.flag |= BAM_FDUP;
-+
-+ if (param->tag) {
-+ if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(ori)) + 1, (uint8_t*)bam_get_qname(ori))) {
-+ fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-+ return -1;
-+ }
-+ }
-+
-+ if (param->opt_dist) { // mark optical duplicates
-+ if (optical_duplicate(ori, dup, param->opt_dist, warn)) {
-+ bam_aux_append(dup, "dt", 'Z', 3, (const uint8_t *)"SQ");
-+ dup_type = 'O';
-+ (*optical)++;
-+ } else {
-+ // not an optical duplicate
-+ bam_aux_append(dup, "dt", 'Z', 3, (const uint8_t *)"LB");
-+ }
-+ }
-+
-+ if ((*warn == BMD_WARNING_MAX) && (incoming_warnings != *warn)) {
-+ fprintf(stderr, "[markdup] warning: %ld decipher read name warnings. New warnings will not be reported.\n",
-+ *warn);
-+ }
-+
-+ if (param->supp) {
-+ if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP) || bam_aux_get(dup, "XA")) {
-+ char *original = NULL;
-+
-+ if (param->tag) {
-+ original = bam_get_qname(ori);
-+ }
-+
-+ if (add_duplicate(dup_hash, dup, original, dup_type))
-+ return -1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+
-+static inline int optical_retag(md_param_t *param, khash_t(duplicates) *dup_hash, bam1_t *b, int paired, long *optical_single, long *optical_pair) {
-+ int ret = 0;
-+ uint8_t *data;
-+
-+ // remove any existing dt tag
-+ if ((data = bam_aux_get(b, "dt")) != NULL) {
-+ bam_aux_del(b, data);
-+ }
-+
-+ if (bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"SQ")) {
-+ fprintf(stderr, "[markdup] error: unable to append 'dt' tag.\n");
-+ ret = -1;
-+ }
-+
-+ if (paired) {
-+ (*optical_pair)++;
-+ } else {
-+ (*optical_single)++;
-+ }
-+
-+ if (param->supp) {
-+ // Change the duplicate type
-+
-+ if (bam_aux_get(b, "SA") || (b->core.flag & BAM_FMUNMAP)
-+ || bam_aux_get(b, "XA")) {
-+ khiter_t d;
-+
-+ d = kh_get(duplicates, dup_hash, bam_get_qname(b));
-+
-+ if (d == kh_end(dup_hash)) {
-+ // error, name should already be in dup hash
-+ fprintf(stderr, "[markdup] error: duplicate name %s not found in hash.\n",
-+ bam_get_qname(b));
-+ ret = -1;
-+ } else {
-+ kh_value(dup_hash, d).type = 'O';
-+ }
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+
-+
-+/*
-+ Where there is more than one duplicate go down the list and check for optical duplicates and change
-+ do tags (where used) to point to original (non-duplicate) read.
-+*/
-+static int duplicate_chain_check(md_param_t *param, khash_t(duplicates) *dup_hash, read_queue_t *ori,
-+ long *warn, long *optical_single, long *optical_pair) {
-+ int ret = 0;
-+ read_queue_t *current = ori->duplicate;
-+ char *ori_name = bam_get_qname(ori->b);
-+ int have_original = !(ori->b->core.flag & BAM_FDUP);
-+ int ori_paired = (ori->b->core.flag & BAM_FPAIRED) && !(ori->b->core.flag & BAM_FMUNMAP);
-+
-+ while (current) {
-+ int current_paired = (current->b->core.flag & BAM_FPAIRED) && !(current->b->core.flag & BAM_FMUNMAP);
-+
-+ if (param->tag && have_original) {
-+ uint8_t *data;
-+
-+ // at this stage all duplicates should have a do tag
-+ if ((data = bam_aux_get(current->b, "do")) != NULL) {
-+ // see if we need to change the tag
-+ char *old_name = bam_aux2Z(data);
-+
-+ if (old_name) {
-+ if (strcmp(old_name, ori_name) != 0) {
-+ bam_aux_del(current->b, data);
-+
-+ if (bam_aux_append(current->b, "do", 'Z', strlen(ori_name) + 1, (uint8_t*)ori_name)) {
-+ fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ } else {
-+ fprintf(stderr, "[markdup] error: 'do' tag has wrong type for read %s.\n", bam_get_qname(current->b));
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (param->opt_dist) {
-+ int is_cur_opt = 0, is_ori_opt = 0;
-+ uint8_t *data;
-+ char *dup_type;
-+
-+ if ((data = bam_aux_get(ori->b, "dt"))) {
-+ if ((dup_type = bam_aux2Z(data))) {
-+ if (strcmp(dup_type, "SQ") == 0) {
-+ is_ori_opt = 1;
-+ }
-+ }
-+ }
-+
-+ if ((data = bam_aux_get(current->b, "dt"))) {
-+ if ((dup_type = bam_aux2Z(data))) {
-+ if (strcmp(dup_type, "SQ") == 0) {
-+ is_cur_opt = 1;
-+ }
-+ }
-+ }
-+
-+ if (!(is_ori_opt && is_cur_opt)) {
-+ // if both are already optical duplicates there is no need to check again, otherwise...
-+
-+ if (optical_duplicate(ori->b, current->b, param->opt_dist, warn)) {
-+ // find out which one is the duplicate
-+ int is_cur_dup = 0;
-+
-+ if (have_original) {
-+ // compared against an original, this is a dup.
-+ is_cur_dup = 1;
-+ } else if (ori_paired != current_paired) {
-+ if (!current_paired) {
-+ // current is single vs pair, this is a dup.
-+ is_cur_dup = 1;
-+ }
-+ } else {
-+ // do it by scores
-+ int64_t ori_score, curr_score;
-+
-+ if ((ori->b->core.flag & BAM_FQCFAIL) != (current->b->core.flag & BAM_FQCFAIL)) {
-+ if (ori->b->core.flag & BAM_FQCFAIL) {
-+ ori_score = 0;
-+ curr_score = 1;
-+ } else {
-+ ori_score = 1;
-+ curr_score = 0;
-+ }
-+ } else {
-+ ori_score = calc_score(ori->b);
-+ curr_score = calc_score(current->b);
-+
-+ if (current_paired) {
-+ // they are pairs so add mate scores.
-+ int64_t mate_tmp;
-+
-+ if ((mate_tmp = get_mate_score(ori->b)) == -1) {
-+ fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ ret = -1;
-+ break;
-+ } else {
-+ ori_score += mate_tmp;
-+ }
-+
-+ if ((mate_tmp = get_mate_score(current->b)) == -1) {
-+ fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ ret = -1;
-+ break;
-+ } else {
-+ curr_score += mate_tmp;
-+ }
-+ }
-+ }
-+
-+ if (ori_score == curr_score) {
-+ if (strcmp(bam_get_qname(current->b), ori_name) < 0) {
-+ curr_score++;
-+ } else {
-+ curr_score--;
-+ }
-+ }
-+
-+ if (ori_score > curr_score) {
-+ is_cur_dup = 1;
-+ }
-+ }
-+
-+ if (is_cur_dup) {
-+ // the current is the optical duplicate
-+ if (!is_cur_opt) { // only change if not already an optical duplicate
-+ if (optical_retag(param, dup_hash, current->b, current_paired, optical_single, optical_pair)) {
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ } else {
-+ if (!is_ori_opt) {
-+ if (optical_retag(param, dup_hash, ori->b, ori_paired, optical_single, optical_pair)) {
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+
-+ current = current->duplicate;
-+ }
-+
-+ return ret;
-+}
-+
-+/*
-+ Function to use when estimating library size.
-+
-+ This is based on an approximate formula for the coverage of a set
-+ obtained after sampling it a given number of times with replacement.
-+
-+ x = number of items in the set (the number of unique fragments in the library)
-+
-+ c = number of unique items (unique read pairs observed)
-+
-+ n = number of items samples (total number of read pairs)
-+
-+ c and n are known; x is unknown.
-+
-+ As n -> infinity, the coverage (c/x) can be given as:
-+
-+ c / x = 1 - exp(-n / x) (see https://math.stackexchange.com/questions/32800)
-+
-+ This needs to be solved for x, so it is rearranged to put both terms on the
-+ left side and estimate_library_size() finds a value of x which gives a
-+ result of zero (or as close as it can get).
-+ */
-+static inline double coverage_equation(double x, double c, double n) {
-+ return c / x - 1 + exp(-n / x);
-+}
-+
-+
-+/* estimate the library size, based on the Picard code in DuplicationMetrics.java*/
-+static unsigned long estimate_library_size(unsigned long read_pairs, unsigned long duplicate_pairs) {
-+ unsigned long estimated_size = 0;
-+
-+ read_pairs /= 2;
-+ duplicate_pairs /= 2;
-+
-+ if ((read_pairs && duplicate_pairs) && (read_pairs > duplicate_pairs)) {
-+ unsigned long unique_pairs = read_pairs - duplicate_pairs;
-+ double m = 1;
-+ double M = 100;
-+ int i;
-+
-+ if (coverage_equation(m * (double)unique_pairs, (double)unique_pairs, (double)read_pairs) < 0) {
-+ fprintf(stderr, "[markdup] warning: unable to calculate estimated library size.\n");
-+ return estimated_size;
-+ }
-+
-+ while (coverage_equation(M * (double)unique_pairs, (double)unique_pairs, (double)read_pairs) > 0) {
-+ M *= 10;
-+ }
-+
-+ for (i = 0; i < 40; i++) {
-+ double r = (m + M) / 2;
-+ double u = coverage_equation(r * (double)unique_pairs, (double)unique_pairs, (double)read_pairs);
-+
-+ if (u > 0) {
-+ m = r;
-+ } else if (u < 0) {
-+ M = r;
-+ } else {
-+ break;
-+ }
-+ }
-+
-+ estimated_size = (unsigned long)(unique_pairs * (m + M) / 2);
-+ } else {
-+ fprintf(stderr, "[markdup] warning: unable to calculate estimated library size."
-+ " Read pairs %ld should be greater than duplicate pairs %ld,"
-+ " which should both be non zero.\n",
-+ read_pairs, duplicate_pairs);
-+ }
-+
-+ return estimated_size;
-+}
-+
-+
- /* Compare the reads near each other (coordinate sorted) and try to spot the duplicates.
- Generally the highest quality scoring is chosen as the original and all others the duplicates.
- The score is based on the sum of the quality values (<= 15) of the read and its mate (if any).
-@@ -476,44 +1135,59 @@
- Marking the supplementary reads of a duplicate as also duplicates takes an extra file read/write
- step. This is because the duplicate can occur before the primary read.*/
-
--static int bam_mark_duplicates(samFile *in, samFile *out, char *prefix, int remove_dups, int32_t max_length, int do_stats, int supp, int tag) {
-- bam_hdr_t *header;
-+static int bam_mark_duplicates(md_param_t *param) {
-+ bam_hdr_t *header = NULL;
- khiter_t k;
- khash_t(reads) *pair_hash = kh_init(reads);
- khash_t(reads) *single_hash = kh_init(reads);
- klist_t(read_queue) *read_buffer = kl_init(read_queue);
- kliter_t(read_queue) *rq;
- khash_t(duplicates) *dup_hash = kh_init(duplicates);
-- int32_t prev_tid, prev_coord;
-+ int32_t prev_tid;
-+ hts_pos_t prev_coord;
- read_queue_t *in_read;
- int ret;
-- int reading, writing, excluded, duplicate, single, pair, single_dup, examined;
-+ long reading, writing, excluded, duplicate, single, pair, single_dup, examined, optical, single_optical;
-+ long np_duplicate, np_opt_duplicate;
-+ long opt_warnings = 0;
- tmp_file_t temp;
-+ char *idx_fn = NULL;
-+ int exclude = 0;
-
-- if ((header = sam_hdr_read(in)) == NULL) {
-+ if (!pair_hash || !single_hash || !read_buffer || !dup_hash) {
-+ fprintf(stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-+
-+ if ((header = sam_hdr_read(param->in)) == NULL) {
- fprintf(stderr, "[markdup] error reading header\n");
-- return 1;
-+ goto fail;
- }
-
- // accept unknown, unsorted or coordinate sort order, but error on queryname sorted.
- // only really works on coordinate sorted files.
-- if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) {
-- char *p, *q;
--
-- p = strstr(header->text, "\tSO:queryname");
-- q = strchr(header->text, '\n');
--
-- // looking for SO:queryname within @HD only
-- // (e.g. must ignore in a @CO comment line later in header)
-- if ((p != 0) && (p < q)) {
-- fprintf(stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n");
-- return 1;
-- }
-+ kstring_t str = KS_INITIALIZE;
-+ if (!sam_hdr_find_tag_hd(header, "SO", &str) && str.s && !strcmp(str.s, "queryname")) {
-+ fprintf(stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n");
-+ ks_free(&str);
-+ goto fail;
-+ }
-+ ks_free(&str);
-+
-+ if (!param->no_pg && sam_hdr_add_pg(header, "samtools", "VN", samtools_version(),
-+ param->arg_list ? "CL" : NULL,
-+ param->arg_list ? param->arg_list : NULL,
-+ NULL) != 0) {
-+ fprintf(stderr, "[markdup] warning: unable to add @PG line to header.\n");
- }
-
-- if (sam_hdr_write(out, header) < 0) {
-+ if (sam_hdr_write(param->out, header) < 0) {
- fprintf(stderr, "[markdup] error writing header.\n");
-- return 1;
-+ goto fail;
-+ }
-+ if (param->write_index) {
-+ if (!(idx_fn = auto_index(param->out, param->out_fn, header)))
-+ goto fail;
- }
-
- // used for coordinate order checks
-@@ -521,30 +1195,35 @@
-
- // get the buffer going
- in_read = kl_pushp(read_queue, read_buffer);
-+ if (!in_read) {
-+ fprintf(stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-
- // handling supplementary reads needs a temporary file
-- if (supp) {
-- if (tmp_file_open_write(&temp, prefix, 1)) {
-- fprintf(stderr, "[markdup] error: unable to open tmp file %s.\n", prefix);
-- return 1;
-+ if (param->supp) {
-+ if (tmp_file_open_write(&temp, param->prefix, 1)) {
-+ fprintf(stderr, "[markdup] error: unable to open tmp file %s.\n", param->prefix);
-+ goto fail;
- }
- }
-
- if ((in_read->b = bam_init1()) == NULL) {
- fprintf(stderr, "[markdup] error: unable to allocate memory for alignment.\n");
-- return 1;
-+ goto fail;
- }
-
-- reading = writing = excluded = single_dup = duplicate = examined = pair = single = 0;
-+ reading = writing = excluded = single_dup = duplicate = examined = pair = single = optical = single_optical = 0;
-+ np_duplicate = np_opt_duplicate = 0;
-
-- while ((ret = sam_read1(in, header, in_read->b)) >= 0) {
-+ while ((ret = sam_read1(param->in, header, in_read->b)) >= 0) {
-
- // do some basic coordinate order checks
- if (in_read->b->core.tid >= 0) { // -1 for unmapped reads
- if (in_read->b->core.tid < prev_tid ||
- ((in_read->b->core.tid == prev_tid) && (in_read->b->core.pos < prev_coord))) {
-- fprintf(stderr, "[markdup] error: bad coordinate order.\n");
-- return 1;
-+ fprintf(stderr, "[markdup] error: not in coordinate sorted order.\n");
-+ goto fail;
- }
- }
-
-@@ -555,10 +1234,30 @@
-
- reading++;
-
-- // read must not be secondary, supplementary, unmapped or failed QC
-- if (!(in_read->b->core.flag & (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL))) {
-- examined++;
-+ if (param->clear && (in_read->b->core.flag & BAM_FDUP)) {
-+ uint8_t *data;
-+
-+ in_read->b->core.flag ^= BAM_FDUP;
-
-+ if ((data = bam_aux_get(in_read->b, "dt")) != NULL) {
-+ bam_aux_del(in_read->b, data);
-+ }
-+
-+ if ((data = bam_aux_get(in_read->b, "do")) != NULL) {
-+ bam_aux_del(in_read->b, data);
-+ }
-+ }
-+
-+ if (param->include_fails) {
-+ exclude |= (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP);
-+ } else {
-+ exclude |= (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL);
-+ }
-+
-+ // read must not be secondary, supplementary, unmapped or (possibly) failed QC
-+ if (!(in_read->b->core.flag & exclude)) {
-+ examined++;
-+ in_read->duplicate = NULL;
-
- // look at the pairs first
- if ((in_read->b->core.flag & BAM_FPAIRED) && !(in_read->b->core.flag & BAM_FMUNMAP)) {
-@@ -567,9 +1266,16 @@
- key_data_t single_key;
- in_hash_t *bp;
-
-- if (make_pair_key(&pair_key, in_read->b)) {
-- fprintf(stderr, "[markdup] error: unable to assign pair hash key.\n");
-- return 1;
-+ if (param->mode) {
-+ if (make_pair_key_sequence(&pair_key, in_read->b)) {
-+ fprintf(stderr, "[markdup] error: unable to assign pair hash key.\n");
-+ goto fail;
-+ }
-+ } else {
-+ if (make_pair_key_template(&pair_key, in_read->b)) {
-+ fprintf(stderr, "[markdup] error: unable to assign pair hash key.\n");
-+ goto fail;
-+ }
- }
-
- make_single_key(&single_key, in_read->b);
-@@ -583,40 +1289,32 @@
- if (ret > 0) { // new
- // add to single duplicate hash
- bp = &kh_val(single_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->single_key = single_key;
- } else if (ret == 0) { // exists
- // look at singles only for duplication marking
- bp = &kh_val(single_hash, k);
-
-- if (!(bp->p->core.flag & BAM_FPAIRED) || (bp->p->core.flag & BAM_FMUNMAP)) {
-- bam1_t *dup = bp->p;
-+ if (!(bp->p->b->core.flag & BAM_FPAIRED) || (bp->p->b->core.flag & BAM_FMUNMAP)) {
-+ // singleton will always be marked duplicate even if
-+ // scores more than one read of the pair
-+ bam1_t *dup = bp->p->b;
-+
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
-
-- // singleton will always be marked duplicate even if
-- // scores more than one read of the pair
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &single_optical, &opt_warnings))
-+ goto fail;
-
-- bp->p = in_read->b;
-- dup->core.flag |= BAM_FDUP;
- single_dup++;
-
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-- }
- }
- } else {
- fprintf(stderr, "[markdup] error: single hashing failure.\n");
-- return 1;
-+ goto fail;
- }
-
- // now do the pair
-@@ -625,33 +1323,44 @@
- if (ret > 0) { // new
- // add to the pair hash
- bp = &kh_val(pair_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->pair_key = pair_key;
- } else if (ret == 0) {
- int64_t old_score, new_score, tie_add = 0;
- bam1_t *dup;
-+ int check_chain = 0;
-
- bp = &kh_val(pair_hash, k);
-
-- if ((mate_tmp = get_mate_score(bp->p)) == -1) {
-- fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-- return 1;
-+ if ((bp->p->b->core.flag & BAM_FQCFAIL) != (in_read->b->core.flag & BAM_FQCFAIL)) {
-+ if (bp->p->b->core.flag & BAM_FQCFAIL) {
-+ old_score = 0;
-+ new_score = 1;
-+ } else {
-+ old_score = 1;
-+ new_score = 0;
-+ }
- } else {
-- old_score = calc_score(bp->p) + mate_tmp;
-- }
-+ if ((mate_tmp = get_mate_score(bp->p->b)) == -1) {
-+ fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ goto fail;
-+ } else {
-+ old_score = calc_score(bp->p->b) + mate_tmp;
-+ }
-
-- if ((mate_tmp = get_mate_score(in_read->b)) == -1) {
-- fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-- return 1;
-- } else {
-- new_score = calc_score(in_read->b) + mate_tmp;
-+ if ((mate_tmp = get_mate_score(in_read->b)) == -1) {
-+ fprintf(stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ goto fail;
-+ } else {
-+ new_score = calc_score(in_read->b) + mate_tmp;
-+ }
- }
-
- // choose the highest score as the original
- // and add it to the pair hash, mark the other as duplicate
-
- if (new_score == old_score) {
-- if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p)) < 0) {
-+ if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p->b)) < 0) {
- tie_add = 1;
- } else {
- tie_add = -1;
-@@ -659,39 +1368,40 @@
- }
-
- if (new_score + tie_add > old_score) { // swap reads
-- dup = bp->p;
-- bp->p = in_read->b;
-+ dup = bp->p->b;
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
- } else {
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
-+ }
-+
-+ bp->p->duplicate = in_read;
- dup = in_read->b;
- }
-
-- dup->core.flag |= BAM_FDUP;
--
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &optical, &opt_warnings))
-+ goto fail;
-
-+ if (check_chain) {
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-
- duplicate++;
- } else {
- fprintf(stderr, "[markdup] error: pair hashing failure.\n");
-- return 1;
-+ goto fail;
- }
- } else { // do the single (or effectively single) reads
- int ret;
- key_data_t single_key;
- in_hash_t *bp;
-+ int check_chain = 0;
-
- make_single_key(&single_key, in_read->b);
-
-@@ -702,68 +1412,76 @@
-
- if (ret > 0) { // new
- bp = &kh_val(single_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->single_key = single_key;
- } else if (ret == 0) { // exists
- bp = &kh_val(single_hash, k);
-
-- if ((bp->p->core.flag & BAM_FPAIRED) && !(bp->p->core.flag & BAM_FMUNMAP)) {
-+ if ((bp->p->b->core.flag & BAM_FPAIRED) && !(bp->p->b->core.flag & BAM_FMUNMAP)) {
- // if matched against one of a pair just mark as duplicate
-
-- if (tag) {
-- if (bam_aux_append(in_read->b, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
- }
-
-- if (supp) {
-- if (bam_aux_get(in_read->b, "SA") || (in_read->b->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, in_read->b)) {
-- return 1;
-- }
-- }
-+ bp->p->duplicate = in_read;
-+
-+ if (mark_duplicates(param, dup_hash, bp->p->b, in_read->b, &single_optical, &opt_warnings))
-+ goto fail;
-+
-+ if (check_chain) {
-+ // check the new duplicate entry in the chain
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- in_read->b->core.flag |= BAM_FDUP;
-+ // check against the new original
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-+
- } else {
- int64_t old_score, new_score;
- bam1_t *dup;
-
-- old_score = calc_score(bp->p);
-+ old_score = calc_score(bp->p->b);
- new_score = calc_score(in_read->b);
-
- // choose the highest score as the original, add it
- // to the single hash and mark the other as duplicate
- if (new_score > old_score) { // swap reads
-- dup = bp->p;
-- bp->p = in_read->b;
-+ dup = bp->p->b;
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
- } else {
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
-+ }
-+
-+ bp->p->duplicate = in_read;
- dup = in_read->b;
- }
-
-- dup->core.flag |= BAM_FDUP;
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &single_optical, &opt_warnings))
-+ goto fail;
-
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+
-+ if (check_chain) {
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-+
-+
- }
-- }
-
- single_dup++;
- } else {
- fprintf(stderr, "[markdup] error: single hashing failure.\n");
-- return 1;
-+ goto fail;
- }
- }
- } else {
-@@ -778,20 +1496,20 @@
-
- /* keep a moving window of reads based on coordinates and max read length. Any unaligned reads
- should just be written as they cannot be matched as duplicates. */
-- if (in_read->pos + max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) {
-+ if (in_read->pos + param->max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) {
- break;
- }
-
-- if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-- if (supp) {
-+ if (!param->remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-+ if (param->supp) {
- if (tmp_file_write(&temp, in_read->b)) {
- fprintf(stderr, "[markdup] error: writing temp output failed.\n");
-- return 1;
-+ goto fail;
- }
- } else {
-- if (sam_write1(out, header, in_read->b) < 0) {
-+ if (sam_write1(param->out, header, in_read->b) < 0) {
- fprintf(stderr, "[markdup] error: writing output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
-
-@@ -816,16 +1534,20 @@
-
- // set the next one up for reading
- in_read = kl_pushp(read_queue, read_buffer);
-+ if (!in_read) {
-+ fprintf(stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-
- if ((in_read->b = bam_init1()) == NULL) {
- fprintf(stderr, "[markdup] error: unable to allocate memory for alignment.\n");
-- return 1;
-+ goto fail;
- }
- }
-
- if (ret < -1) {
- fprintf(stderr, "[markdup] error: truncated input file.\n");
-- return 1;
-+ goto fail;
- }
-
- // write out the end of the list
-@@ -834,16 +1556,16 @@
- in_read = &kl_val(rq);
-
- if (bam_get_qname(in_read->b)) { // last entry will be blank
-- if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-- if (supp) {
-+ if (!param->remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-+ if (param->supp) {
- if (tmp_file_write(&temp, in_read->b)) {
- fprintf(stderr, "[markdup] error: writing temp output failed.\n");
-- return 1;
-+ goto fail;
- }
- } else {
-- if (sam_write1(out, header, in_read->b) < 0) {
-+ if (sam_write1(param->out, header, in_read->b) < 0) {
- fprintf(stderr, "[markdup] error: writing output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
-
-@@ -856,71 +1578,155 @@
- rq = kl_begin(read_buffer);
- }
-
-- if (supp) {
-+ if (param->supp) {
- bam1_t *b;
-
- if (tmp_file_end_write(&temp)) {
- fprintf(stderr, "[markdup] error: unable to end tmp writing.\n");
-- return 1;
-+ goto fail;
- }
-
- // read data from temp file and mark duplicate supplementary alignments
-
-- if (tmp_file_begin_read(&temp, NULL)) {
-- return 1;
-+ if (tmp_file_begin_read(&temp)) {
-+ goto fail;
- }
-
- b = bam_init1();
-
- while ((ret = tmp_file_read(&temp, b)) > 0) {
-
-- if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP)) {
-+ if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP) || (b->core.flag & BAM_FSECONDARY)) {
-+
- k = kh_get(duplicates, dup_hash, bam_get_qname(b));
-
- if (k != kh_end(dup_hash)) {
-+
- b->core.flag |= BAM_FDUP;
-+ np_duplicate++;
-+
-+ if (param->tag && kh_val(dup_hash, k).name) {
-+ if (bam_aux_append(b, "do", 'Z', strlen(kh_val(dup_hash, k).name) + 1, (uint8_t*)kh_val(dup_hash, k).name)) {
-+ fprintf(stderr, "[markdup] error: unable to append supplementary 'do' tag.\n");
-+ goto fail;
-+ }
-+ }
-+
-+ if (param->opt_dist) {
-+ if (kh_val(dup_hash, k).type) {
-+ bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"SQ");
-+ np_opt_duplicate++;
-+ } else {
-+ bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"LB");
-+ }
-+ }
- }
- }
-
-- if (!remove_dups || !(b->core.flag & BAM_FDUP)) {
-- if (sam_write1(out, header, b) < 0) {
-+ if (!param->remove_dups || !(b->core.flag & BAM_FDUP)) {
-+ if (sam_write1(param->out, header, b) < 0) {
- fprintf(stderr, "[markdup] error: writing final output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
- }
-
- if (ret == -1) {
- fprintf(stderr, "[markdup] error: failed to read tmp file.\n");
-- return 1;
-+ goto fail;
- }
-
- for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) {
- if (kh_exist(dup_hash, k)) {
-+ free(kh_val(dup_hash, k).name);
- free((char *)kh_key(dup_hash, k));
-+ kh_key(dup_hash, k) = NULL;
- }
- }
-
-- tmp_file_destroy(&temp, b, 0);
-- kh_destroy(duplicates, dup_hash);
-+ tmp_file_destroy(&temp);
- bam_destroy1(b);
- }
-
-- if (do_stats) {
-- fprintf(stderr, "READ %d WRITTEN %d \n"
-- "EXCLUDED %d EXAMINED %d\n"
-- "PAIRED %d SINGLE %d\n"
-- "DULPICATE PAIR %d DUPLICATE SINGLE %d\n"
-- "DUPLICATE TOTAL %d\n", reading, writing, excluded, examined, pair, single,
-- duplicate, single_dup, single_dup + duplicate);
-+ if (opt_warnings) {
-+ fprintf(stderr, "[markdup] warning: number of failed attempts to get coordinates from read names = %ld\n",
-+ opt_warnings);
-+ }
-+
-+ if (param->do_stats) {
-+ FILE *fp;
-+ int file_open = 0;
-+ unsigned long els;
-+
-+ if (param->stats_file) {
-+ if (NULL == (fp = fopen(param->stats_file, "w"))) {
-+ fprintf(stderr, "[markdup] warning: cannot write stats to %s.\n", param->stats_file);
-+ fp = stderr;
-+ } else {
-+ file_open = 1;
-+ }
-+ } else {
-+ fp = stderr;
-+ }
-+
-+ els = estimate_library_size(pair, duplicate - optical);
-+
-+ fprintf(fp,
-+ "COMMAND: %s\n"
-+ "READ: %ld\n"
-+ "WRITTEN: %ld\n"
-+ "EXCLUDED: %ld\n"
-+ "EXAMINED: %ld\n"
-+ "PAIRED: %ld\n"
-+ "SINGLE: %ld\n"
-+ "DUPLICATE PAIR: %ld\n"
-+ "DUPLICATE SINGLE: %ld\n"
-+ "DUPLICATE PAIR OPTICAL: %ld\n"
-+ "DUPLICATE SINGLE OPTICAL: %ld\n"
-+ "DUPLICATE NON PRIMARY: %ld\n"
-+ "DUPLICATE NON PRIMARY OPTICAL: %ld\n"
-+ "DUPLICATE PRIMARY TOTAL: %ld\n"
-+ "DUPLICATE TOTAL: %ld\n"
-+ "ESTIMATED_LIBRARY_SIZE: %ld\n", param->arg_list, reading, writing, excluded, examined, pair, single,
-+ duplicate, single_dup, optical, single_optical, np_duplicate, np_opt_duplicate,
-+ single_dup + duplicate, single_dup + duplicate + np_duplicate, els);
-+
-+ if (file_open) {
-+ fclose(fp);
-+ }
-+ }
-+
-+ if (param->write_index) {
-+ if (sam_idx_save(param->out) < 0) {
-+ print_error_errno("markdup", "writing index failed");
-+ goto fail;
-+ }
- }
-
- kh_destroy(reads, pair_hash);
- kh_destroy(reads, single_hash);
- kl_destroy(read_queue, read_buffer);
-- bam_hdr_destroy(header);
-+ kh_destroy(duplicates, dup_hash);
-+ sam_hdr_destroy(header);
-
- return 0;
-+
-+ fail:
-+ for (rq = kl_begin(read_buffer); rq != kl_end(read_buffer); rq = kl_next(rq))
-+ bam_destroy1(kl_val(rq).b);
-+ kl_destroy(read_queue, read_buffer);
-+
-+ for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) {
-+ if (kh_exist(dup_hash, k)) {
-+ free((char *)kh_key(dup_hash, k));
-+ }
-+ }
-+ kh_destroy(duplicates, dup_hash);
-+
-+ kh_destroy(reads, pair_hash);
-+ kh_destroy(reads, single_hash);
-+ sam_hdr_destroy(header);
-+ return 1;
- }
-
-
-@@ -928,15 +1734,23 @@
- fprintf(stderr, "\n");
- fprintf(stderr, "Usage: samtools markdup <input.bam> <output.bam>\n\n");
- fprintf(stderr, "Option: \n");
-- fprintf(stderr, " -r Remove duplicate reads\n");
-- fprintf(stderr, " -l INT Max read length (default 300 bases)\n");
-- fprintf(stderr, " -S Mark supplemenary alignments of duplicates as duplicates (slower).\n");
-- fprintf(stderr, " -s Report stats.\n");
-- fprintf(stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n");
-- fprintf(stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag."
-+ fprintf(stderr, " -r Remove duplicate reads\n");
-+ fprintf(stderr, " -l INT Max read length (default 300 bases)\n");
-+ fprintf(stderr, " -S Mark supplementary alignments of duplicates as duplicates (slower).\n");
-+ fprintf(stderr, " -s Report stats.\n");
-+ fprintf(stderr, " -f NAME Write stats to named file. Implies -s.\n");
-+ fprintf(stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n");
-+ fprintf(stderr, " -d INT Optical distance (if set, marks with dt tag)\n");
-+ fprintf(stderr, " -c Clear previous duplicate settings and tags.\n");
-+ fprintf(stderr, " -m --mode TYPE Duplicate decision method for paired reads.\n"
-+ " TYPE = t measure positions based on template start/end (default).\n"
-+ " s measure positions based on sequence start.\n");
-+ fprintf(stderr, " --include-fails Include quality check failed reads.\n");
-+ fprintf(stderr, " --no-PG Do not add a PG line\n");
-+ fprintf(stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag."
- " Mainly for information and debugging.\n");
-
-- sam_global_opt_help(stderr, "-.O..@");
-+ sam_global_opt_help(stderr, "-.O..@..");
-
- fprintf(stderr, "\nThe input file must be coordinate sorted and must have gone"
- " through fixmates with the mate scoring option on.\n");
-@@ -946,29 +1760,47 @@
-
-
- int bam_markdup(int argc, char **argv) {
-- int c, ret, remove_dups = 0, report_stats = 0, include_supplementary = 0, tag_dup = 0;
-- int32_t max_length = 300;
-- samFile *in = NULL, *out = NULL;
-+ int c, ret;
- char wmode[3] = {'w', 'b', 0};
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- htsThreadPool p = {NULL, 0};
- kstring_t tmpprefix = {0, 0, NULL};
- struct stat st;
- unsigned int t;
-+ md_param_t param = {NULL, NULL, NULL, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL};
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
-+ {"include-fails", no_argument, NULL, 1001},
-+ {"no-PG", no_argument, NULL, 1002},
-+ {"mode", required_argument, NULL, 'm'},
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "rsl:StT:O:@:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "rsl:StT:O:@:f:d:ncm:", lopts, NULL)) >= 0) {
- switch (c) {
-- case 'r': remove_dups = 1; break;
-- case 'l': max_length = atoi(optarg); break;
-- case 's': report_stats = 1; break;
-+ case 'r': param.remove_dups = 1; break;
-+ case 'l': param.max_length = atoi(optarg); break;
-+ case 's': param.do_stats = 1; break;
- case 'T': kputs(optarg, &tmpprefix); break;
-- case 'S': include_supplementary = 1; break;
-- case 't': tag_dup = 1; break;
-+ case 'S': param.supp = 1; break;
-+ case 't': param.tag = 1; break;
-+ case 'f': param.stats_file = optarg; param.do_stats = 1; break;
-+ case 'd': param.opt_dist = atoi(optarg); break;
-+ case 'c': param.clear = 1; break;
-+ case 'm':
-+ if (strcmp(optarg, "t") == 0) {
-+ param.mode = MD_MODE_TEMPLATE;
-+ } else if (strcmp(optarg, "s") == 0) {
-+ param.mode = MD_MODE_SEQUENCE;
-+ } else {
-+ fprintf(stderr, "[markdup] error: unknown mode '%s'.\n", optarg);
-+ return markdup_usage();
-+ }
-+
-+ break;
-+ case 1001: param.include_fails = 1; break;
-+ case 1002: param.no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return markdup_usage();
-@@ -978,17 +1810,20 @@
- if (optind + 2 > argc)
- return markdup_usage();
-
-- in = sam_open_format(argv[optind], "r", &ga.in);
-+ if (param.opt_dist < 0) param.opt_dist = 0;
-+ if (param.max_length < 0) param.max_length = 300;
-+
-+ param.in = sam_open_format(argv[optind], "r", &ga.in);
-
-- if (!in) {
-+ if (!param.in) {
- print_error_errno("markdup", "failed to open \"%s\" for input", argv[optind]);
- return 1;
- }
-
- sam_open_mode(wmode + 1, argv[optind + 1], NULL);
-- out = sam_open_format(argv[optind + 1], wmode, &ga.out);
-+ param.out = sam_open_format(argv[optind + 1], wmode, &ga.out);
-
-- if (!out) {
-+ if (!param.out) {
- print_error_errno("markdup", "failed to open \"%s\" for output", argv[optind + 1]);
- return 1;
- }
-@@ -999,8 +1834,8 @@
- return 1;
- }
-
-- hts_set_opt(in, HTS_OPT_THREAD_POOL, &p);
-- hts_set_opt(out, HTS_OPT_THREAD_POOL, &p);
-+ hts_set_opt(param.in, HTS_OPT_THREAD_POOL, &p);
-+ hts_set_opt(param.out, HTS_OPT_THREAD_POOL, &p);
- }
-
- // actual stuff happens here
-@@ -1020,18 +1855,24 @@
-
- t = ((unsigned) time(NULL)) ^ ((unsigned) clock());
- ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000);
-+ param.prefix = tmpprefix.s;
-+
-+ param.arg_list = stringify_argv(argc + 1, argv - 1);
-+ param.write_index = ga.write_index;
-+ param.out_fn = argv[optind + 1];
-
-- ret = bam_mark_duplicates(in, out, tmpprefix.s, remove_dups, max_length, report_stats, include_supplementary, tag_dup);
-+ ret = bam_mark_duplicates(¶m);
-
-- sam_close(in);
-+ sam_close(param.in);
-
-- if (sam_close(out) < 0) {
-+ if (sam_close(param.out) < 0) {
- fprintf(stderr, "[markdup] error closing output file\n");
- ret = 1;
- }
-
- if (p.pool) hts_tpool_destroy(p.pool);
-
-+ free(param.arg_list);
- free(tmpprefix.s);
- sam_global_args_free(&ga);
-
---- python-pysam.orig/samtools/bam_markdup.c.pysam.c
-+++ python-pysam/samtools/bam_markdup.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bam_markdup.c -- Mark duplicates from a coord sorted file that has gone
- through fixmates with the mate scoring option on.
-
-- Copyright (C) 2017-18 Genome Research Ltd.
-+ Copyright (C) 2017-2019 Genome Research Ltd.
-
- Author: Andrew Whitwham <aw7@sanger.ac.uk>
-
-@@ -24,6 +24,9 @@
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE
-+
-+Estimate library size derived from Picard DuplicationMetrics.java
-+Copyright (c) 2009,2018 The Broad Institute. MIT license.
- */
-
- #include <config.h>
-@@ -35,6 +38,7 @@
- #include <ctype.h>
- #include <time.h>
- #include <sys/stat.h>
-+#include <math.h>
- #include "htslib/thread_pool.h"
- #include "htslib/sam.h"
- #include "sam_opts.h"
-@@ -44,26 +48,53 @@
- #include "htslib/kstring.h"
- #include "tmp_file.h"
-
-+
-+typedef struct {
-+ samFile *in;
-+ samFile *out;
-+ char *prefix;
-+ int remove_dups;
-+ int32_t max_length;
-+ int do_stats;
-+ int supp;
-+ int tag;
-+ int opt_dist;
-+ int no_pg;
-+ int clear;
-+ int mode;
-+ int write_index;
-+ int include_fails;
-+ char *stats_file;
-+ char *arg_list;
-+ char *out_fn;
-+} md_param_t;
-+
- typedef struct {
-- int32_t single;
-+ hts_pos_t this_coord;
-+ hts_pos_t other_coord;
- int32_t this_ref;
-- int32_t this_coord;
- int32_t other_ref;
-- int32_t other_coord;
-- int32_t leftmost;
-- int32_t orientation;
-+ int8_t single;
-+ int8_t leftmost;
-+ int8_t orientation;
- } key_data_t;
-
-+typedef struct read_queue_s {
-+ key_data_t pair_key;
-+ key_data_t single_key;
-+ bam1_t *b;
-+ struct read_queue_s *duplicate;
-+ hts_pos_t pos;
-+} read_queue_t;
-+
- typedef struct {
-- bam1_t *p;
-+ read_queue_t *p;
- } in_hash_t;
-
- typedef struct {
-- bam1_t *b;
-- int32_t pos;
-- key_data_t pair_key;
-- key_data_t single_key;
--} read_queue_t;
-+ char *name;
-+ char type;
-+} dup_map_t;
-
-
-
-@@ -74,22 +105,22 @@
- khint_t hash;
-
- if (key.single) {
-- unsigned char sig[12];
-+ unsigned char sig[13];
-
- memcpy(sig + i, &key.this_ref, 4); i += 4;
-- memcpy(sig + i, &key.this_coord, 4); i += 4;
-- memcpy(sig + i, &key.orientation, 4); i += 4;
-+ memcpy(sig + i, &key.this_coord, 8); i += 8;
-+ memcpy(sig + i, &key.orientation, 1); i += 1;
-
- hash = do_hash(sig, i);
- } else {
-- unsigned char sig[24];
-+ unsigned char sig[26];
-
- memcpy(sig + i, &key.this_ref, 4); i += 4;
-- memcpy(sig + i, &key.this_coord, 4); i += 4;
-+ memcpy(sig + i, &key.this_coord, 8); i += 8;
- memcpy(sig + i, &key.other_ref, 4); i += 4;
-- memcpy(sig + i, &key.other_coord, 4); i += 4;
-- memcpy(sig + i, &key.leftmost, 4); i += 4;
-- memcpy(sig + i, &key.orientation, 4); i += 4;
-+ memcpy(sig + i, &key.other_coord, 8); i += 8;
-+ memcpy(sig + i, &key.leftmost, 1); i += 1;
-+ memcpy(sig + i, &key.orientation, 1); i += 1;
-
- hash = do_hash(sig, i);
- }
-@@ -124,21 +155,35 @@
-
-
- #define __free_queue_element(p)
-+
-+// Orientations (prime numbers to feed to hashing algorithm)
- #define O_FF 2
- #define O_RR 3
- #define O_FR 5
- #define O_RF 7
-
-+// Left or rightmost
-+#define R_LE 11
-+#define R_RI 13
-+
-+#define BMD_WARNING_MAX 10
-+
-+#define MD_MIN_QUALITY 15
-+
-+// Duplicate finding mode
-+#define MD_MODE_TEMPLATE 0
-+#define MD_MODE_SEQUENCE 1
-+
- KHASH_INIT(reads, key_data_t, in_hash_t, 1, hash_key, key_equal) // read map hash
- KLIST_INIT(read_queue, read_queue_t, __free_queue_element) // the reads buffer
--KHASH_MAP_INIT_STR(duplicates, int) // map of duplicates for supplementary dup id
-+KHASH_MAP_INIT_STR(duplicates, dup_map_t) // map of duplicates for supplementary dup id
-
-
- /* Calculate the mate's unclipped start based on position and cigar string from MC tag. */
-
--static int32_t unclipped_other_start(int32_t op, char *cigar) {
-+static hts_pos_t unclipped_other_start(hts_pos_t op, char *cigar) {
- char *c = cigar;
-- int32_t clipped = 0;
-+ int64_t clipped = 0;
-
- while (*c && *c != '*') {
- long num = 0;
-@@ -164,9 +209,9 @@
-
- /* Calculate the current read's start based on the stored cigar string. */
-
--static int32_t unclipped_start(bam1_t *b) {
-+static hts_pos_t unclipped_start(bam1_t *b) {
- uint32_t *cigar = bam_get_cigar(b);
-- int32_t clipped = 0;
-+ int64_t clipped = 0;
- uint32_t i;
-
- for (i = 0; i < b->core.n_cigar; i++) {
-@@ -185,9 +230,9 @@
-
- /* Calculate the mate's unclipped end based on start position and cigar string from MC tag.*/
-
--static int32_t unclipped_other_end(int32_t op, char *cigar) {
-+static hts_pos_t unclipped_other_end(int64_t op, char *cigar) {
- char *c = cigar;
-- int32_t refpos = 0;
-+ int64_t refpos = 0;
- int skip = 1;
-
- while (*c && *c != '*') {
-@@ -226,9 +271,9 @@
-
- /* Calculate the current read's end based on the stored cigar string. */
-
--static int32_t unclipped_end(bam1_t *b) {
-+static hts_pos_t unclipped_end(bam1_t *b) {
- uint32_t *cigar = bam_get_cigar(b);
-- int32_t end_pos, clipped = 0;
-+ hts_pos_t end_pos, clipped = 0;
- int32_t i;
-
- end_pos = bam_endpos(b);
-@@ -295,7 +340,7 @@
- int i;
-
- for (i = 0; i < b->core.l_qseq; i++) {
-- if (qual[i] >= 15) score += qual[i];
-+ if (qual[i] >= MD_MIN_QUALITY) score += qual[i];
- }
-
- return score;
-@@ -307,10 +352,10 @@
- the reference id, orientation and whether the current
- read is leftmost of the pair. */
-
--static int make_pair_key(key_data_t *key, bam1_t *bam) {
-- int32_t this_ref, this_coord, this_end;
-- int32_t other_ref, other_coord, other_end;
-- int32_t orientation, leftmost;
-+static int make_pair_key_template(key_data_t *key, bam1_t *bam) {
-+ hts_pos_t this_coord, other_coord, this_end, other_end;
-+ int32_t this_ref, other_ref;
-+ int8_t orientation, leftmost;
- uint8_t *data;
- char *cig;
-
-@@ -321,7 +366,11 @@
- this_end = unclipped_end(bam);
-
- if ((data = bam_aux_get(bam, "MC"))) {
-- cig = bam_aux2Z(data);
-+ if (!(cig = bam_aux2Z(data))) {
-+ fprintf(samtools_stderr, "[markdup] error: MC tag wrong type. Please use the MC tag provided by samtools fixmate.\n");
-+ return 1;
-+ }
-+
- other_end = unclipped_other_end(bam->core.mpos, cig);
- other_coord = unclipped_other_start(bam->core.mpos, cig);
- } else {
-@@ -404,9 +453,9 @@
- }
-
- if (!leftmost)
-- leftmost = 13;
-+ leftmost = R_RI;
- else
-- leftmost = 11;
-+ leftmost = R_LE;
-
- key->single = 0;
- key->this_ref = this_ref;
-@@ -420,13 +469,140 @@
- }
-
-
-+static int make_pair_key_sequence(key_data_t *key, bam1_t *bam) {
-+ hts_pos_t this_coord, this_end, other_coord, other_end, leftmost;
-+ int32_t this_ref, other_ref;
-+ int8_t orientation, left_read;
-+ uint8_t *data;
-+ char *cig;
-+
-+ this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash
-+ other_ref = bam->core.mtid + 1;
-+
-+ this_coord = unclipped_start(bam);
-+ this_end = unclipped_end(bam);
-+
-+ if ((data = bam_aux_get(bam, "MC"))) {
-+ if (!(cig = bam_aux2Z(data))) {
-+ fprintf(samtools_stderr, "[markdup] error: MC tag wrong type. Please use the MC tag provided by samtools fixmate.\n");
-+ return 1;
-+ }
-+
-+ other_end = unclipped_other_end(bam->core.mpos, cig);
-+ other_coord = unclipped_other_start(bam->core.mpos, cig);
-+ } else {
-+ fprintf(samtools_stderr, "[markdup] error: no MC tag. Please run samtools fixmate on file first.\n");
-+ return 1;
-+ }
-+
-+ // work out orientations
-+ if (this_ref != other_ref) {
-+ leftmost = this_ref - other_ref;
-+ } else {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+ if (!bam_is_rev(bam)) {
-+ leftmost = this_coord - other_coord;
-+ } else {
-+ leftmost = this_end - other_end;
-+ }
-+ } else {
-+ if (bam_is_rev(bam)) {
-+ leftmost = this_end - other_coord;
-+ } else {
-+ leftmost = this_coord - other_end;
-+ }
-+ }
-+ }
-+
-+ if (leftmost < 0) {
-+ leftmost = 1;
-+ } else if (leftmost > 0) {
-+ leftmost = 0;
-+ } else {
-+ // tie breaks
-+
-+ if (bam->core.pos == bam->core.mpos) {
-+ if (bam->core.flag & BAM_FREAD1) {
-+ leftmost = 1;
-+ } else {
-+ leftmost = 0;
-+ }
-+ } else if (bam->core.pos < bam->core.mpos) {
-+ leftmost = 1;
-+ } else {
-+ leftmost = 0;
-+ }
-+ }
-+
-+ // pair orientation
-+ if (leftmost) {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_FF;
-+ } else {
-+ orientation = O_RR;
-+ }
-+ } else {
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_FR;
-+ } else {
-+ orientation = O_RF;
-+ }
-+ }
-+ } else {
-+ if (bam_is_rev(bam) == bam_is_mrev(bam)) {
-+
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_RR;
-+ } else {
-+ orientation = O_FF;
-+ }
-+ } else {
-+ if (!bam_is_rev(bam)) {
-+ orientation = O_RF;
-+ } else {
-+ orientation = O_FR;
-+ }
-+ }
-+ }
-+
-+ if (!leftmost)
-+ left_read = R_RI;
-+ else
-+ left_read = R_LE;
-+
-+ if (!bam_is_rev(bam)) {
-+ this_coord = unclipped_start(bam);
-+ } else {
-+ this_coord = unclipped_end(bam);
-+ }
-+
-+ if (!bam_is_mrev(bam)) {
-+ other_coord = unclipped_other_start(bam->core.mpos, cig);
-+ } else {
-+ other_coord = unclipped_other_end(bam->core.mpos, cig);
-+ }
-+
-+ key->single = 0;
-+ key->this_ref = this_ref;
-+ key->this_coord = this_coord;
-+ key->other_ref = other_ref;
-+ key->other_coord = other_coord;
-+ key->leftmost = left_read;
-+ key->orientation = orientation;
-+
-+ return 0;
-+}
-+
- /* Create a signature hash of single read (or read with an unmatched pair).
- Uses unclipped start (or end depending on orientation), reference id,
- and orientation. */
-
- static void make_single_key(key_data_t *key, bam1_t *bam) {
-- int32_t this_ref, this_coord;
-- int32_t orientation;
-+ hts_pos_t this_coord;
-+ int32_t this_ref;
-+ int8_t orientation;
-
- this_ref = bam->core.tid + 1; // avoid a 0 being put into the hash
-
-@@ -444,23 +620,45 @@
- key->orientation = orientation;
- }
-
-+
- /* Add the duplicate name to a hash if it does not exist. */
-
--static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe) {
-+static int add_duplicate(khash_t(duplicates) *d_hash, bam1_t *dupe, char *orig_name, char type) {
- khiter_t d;
- int ret;
-
- d = kh_get(duplicates, d_hash, bam_get_qname(dupe));
-
- if (d == kh_end(d_hash)) {
-- d = kh_put(duplicates, d_hash, strdup(bam_get_qname(dupe)), &ret);
-+ char *name = strdup(bam_get_qname(dupe));
-+ if (name) {
-+ d = kh_put(duplicates, d_hash, name, &ret);
-+ } else {
-+ ret = -1;
-+ }
-+
-+ if (ret >= 0) {
-+ if (orig_name) {
-+ if (ret == 0) {
-+ // replace old name
-+ free(kh_value(d_hash, d).name);
-+ free(name);
-+ }
-
-- if (ret > 0) {
-- kh_value(d_hash, d) = 1;
-- } else if (ret == 0) {
-- kh_value(d_hash, d)++;
-+ kh_value(d_hash, d).name = strdup(orig_name);
-+
-+ if (kh_value(d_hash, d).name == NULL) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to allocate memory for duplicate original name.\n");
-+ return 1;
-+ }
-+ } else {
-+ kh_value(d_hash, d).name = NULL;
-+ }
-+
-+ kh_value(d_hash, d).type = type;
- } else {
- fprintf(samtools_stderr, "[markdup] error: unable to store supplementary duplicates.\n");
-+ free(name);
- return 1;
- }
- }
-@@ -469,6 +667,467 @@
- }
-
-
-+static inline int get_coordinate_positions(const char *qname, int *xpos, int *ypos) {
-+ int sep = 0;
-+ int pos = 0;
-+
-+ while (qname[pos]) {
-+ if (qname[pos] == ':') {
-+ sep++;
-+
-+ if (sep == 2) {
-+ *xpos = pos + 1;
-+ } else if (sep == 3) {
-+ *ypos = pos + 1;
-+ } else if (sep == 4) { // HiSeq style names
-+ *xpos = *ypos;
-+ *ypos = pos + 1;
-+ } else if (sep == 5) { // Newer Illumina format
-+ *xpos = pos + 1;
-+ } else if (sep == 6) {
-+ *ypos = pos + 1;
-+ }
-+ }
-+
-+ pos++;
-+ }
-+
-+ return sep;
-+}
-+
-+/* Using the coordinates from the Illumina read name, see whether the duplicated read is
-+ close enough (set by max_dist) to the original to be counted as optical.*/
-+
-+static int optical_duplicate(bam1_t *ori, bam1_t *dup, long max_dist, long *warnings) {
-+ int ret = 0, seps;
-+ char *original, *duplicate;
-+ int oxpos = 0, oypos = 0, dxpos = 0, dypos = 0;
-+
-+
-+ original = bam_get_qname(ori);
-+ duplicate = bam_get_qname(dup);
-+
-+ seps = get_coordinate_positions(original, &oxpos, &oypos);
-+
-+ if (!(seps == 3 || seps == 4 || seps == 6 || seps == 7)) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: cannot decipher read name %s for optical duplicate marking.\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ seps = get_coordinate_positions(duplicate, &dxpos, &dypos);
-+
-+ if (!(seps == 3 || seps == 4 || seps == 6 || seps == 7)) {
-+
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: cannot decipher read name %s for optical duplicate marking.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (strncmp(original, duplicate, oxpos - 1) == 0) {
-+ // the initial parts match, look at the numbers
-+ long ox, oy, dx, dy, xdiff, ydiff;
-+ char *end;
-+
-+ ox = strtol(original + oxpos, &end, 10);
-+
-+ if ((original + oxpos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: can not decipher X coordinate in %s .\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ dx = strtol(duplicate + dxpos, &end, 10);
-+
-+ if ((duplicate + dxpos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: can not decipher X coordinate in %s.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (ox > dx) {
-+ xdiff = ox - dx;
-+ } else {
-+ xdiff = dx - ox;
-+ }
-+
-+ if (xdiff <= max_dist) {
-+ // still might be optical
-+
-+ oy = strtol(original + oypos, &end, 10);
-+
-+ if ((original + oypos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: can not decipher Y coordinate in %s.\n", original);
-+ }
-+
-+ return ret;
-+ }
-+
-+ dy = strtol(duplicate + dypos, &end, 10);
-+
-+ if ((duplicate + dypos) == end) {
-+ (*warnings)++;
-+
-+ if (*warnings <= BMD_WARNING_MAX) {
-+ fprintf(samtools_stderr, "[markdup] warning: can not decipher Y coordinate in %s.\n", duplicate);
-+ }
-+
-+ return ret;
-+ }
-+
-+ if (oy > dy) {
-+ ydiff = oy - dy;
-+ } else {
-+ ydiff = dy - oy;
-+ }
-+
-+ if (ydiff <= max_dist) ret = 1;
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+
-+static int mark_duplicates(md_param_t *param, khash_t(duplicates) *dup_hash, bam1_t *ori, bam1_t *dup,
-+ long *optical, long *warn) {
-+ char dup_type = 0;
-+ long incoming_warnings = *warn;
-+
-+ dup->core.flag |= BAM_FDUP;
-+
-+ if (param->tag) {
-+ if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(ori)) + 1, (uint8_t*)bam_get_qname(ori))) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-+ return -1;
-+ }
-+ }
-+
-+ if (param->opt_dist) { // mark optical duplicates
-+ if (optical_duplicate(ori, dup, param->opt_dist, warn)) {
-+ bam_aux_append(dup, "dt", 'Z', 3, (const uint8_t *)"SQ");
-+ dup_type = 'O';
-+ (*optical)++;
-+ } else {
-+ // not an optical duplicate
-+ bam_aux_append(dup, "dt", 'Z', 3, (const uint8_t *)"LB");
-+ }
-+ }
-+
-+ if ((*warn == BMD_WARNING_MAX) && (incoming_warnings != *warn)) {
-+ fprintf(samtools_stderr, "[markdup] warning: %ld decipher read name warnings. New warnings will not be reported.\n",
-+ *warn);
-+ }
-+
-+ if (param->supp) {
-+ if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP) || bam_aux_get(dup, "XA")) {
-+ char *original = NULL;
-+
-+ if (param->tag) {
-+ original = bam_get_qname(ori);
-+ }
-+
-+ if (add_duplicate(dup_hash, dup, original, dup_type))
-+ return -1;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+
-+static inline int optical_retag(md_param_t *param, khash_t(duplicates) *dup_hash, bam1_t *b, int paired, long *optical_single, long *optical_pair) {
-+ int ret = 0;
-+ uint8_t *data;
-+
-+ // remove any existing dt tag
-+ if ((data = bam_aux_get(b, "dt")) != NULL) {
-+ bam_aux_del(b, data);
-+ }
-+
-+ if (bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"SQ")) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to append 'dt' tag.\n");
-+ ret = -1;
-+ }
-+
-+ if (paired) {
-+ (*optical_pair)++;
-+ } else {
-+ (*optical_single)++;
-+ }
-+
-+ if (param->supp) {
-+ // Change the duplicate type
-+
-+ if (bam_aux_get(b, "SA") || (b->core.flag & BAM_FMUNMAP)
-+ || bam_aux_get(b, "XA")) {
-+ khiter_t d;
-+
-+ d = kh_get(duplicates, dup_hash, bam_get_qname(b));
-+
-+ if (d == kh_end(dup_hash)) {
-+ // error, name should already be in dup hash
-+ fprintf(samtools_stderr, "[markdup] error: duplicate name %s not found in hash.\n",
-+ bam_get_qname(b));
-+ ret = -1;
-+ } else {
-+ kh_value(dup_hash, d).type = 'O';
-+ }
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+
-+
-+/*
-+ Where there is more than one duplicate go down the list and check for optical duplicates and change
-+ do tags (where used) to point to original (non-duplicate) read.
-+*/
-+static int duplicate_chain_check(md_param_t *param, khash_t(duplicates) *dup_hash, read_queue_t *ori,
-+ long *warn, long *optical_single, long *optical_pair) {
-+ int ret = 0;
-+ read_queue_t *current = ori->duplicate;
-+ char *ori_name = bam_get_qname(ori->b);
-+ int have_original = !(ori->b->core.flag & BAM_FDUP);
-+ int ori_paired = (ori->b->core.flag & BAM_FPAIRED) && !(ori->b->core.flag & BAM_FMUNMAP);
-+
-+ while (current) {
-+ int current_paired = (current->b->core.flag & BAM_FPAIRED) && !(current->b->core.flag & BAM_FMUNMAP);
-+
-+ if (param->tag && have_original) {
-+ uint8_t *data;
-+
-+ // at this stage all duplicates should have a do tag
-+ if ((data = bam_aux_get(current->b, "do")) != NULL) {
-+ // see if we need to change the tag
-+ char *old_name = bam_aux2Z(data);
-+
-+ if (old_name) {
-+ if (strcmp(old_name, ori_name) != 0) {
-+ bam_aux_del(current->b, data);
-+
-+ if (bam_aux_append(current->b, "do", 'Z', strlen(ori_name) + 1, (uint8_t*)ori_name)) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ } else {
-+ fprintf(samtools_stderr, "[markdup] error: 'do' tag has wrong type for read %s.\n", bam_get_qname(current->b));
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (param->opt_dist) {
-+ int is_cur_opt = 0, is_ori_opt = 0;
-+ uint8_t *data;
-+ char *dup_type;
-+
-+ if ((data = bam_aux_get(ori->b, "dt"))) {
-+ if ((dup_type = bam_aux2Z(data))) {
-+ if (strcmp(dup_type, "SQ") == 0) {
-+ is_ori_opt = 1;
-+ }
-+ }
-+ }
-+
-+ if ((data = bam_aux_get(current->b, "dt"))) {
-+ if ((dup_type = bam_aux2Z(data))) {
-+ if (strcmp(dup_type, "SQ") == 0) {
-+ is_cur_opt = 1;
-+ }
-+ }
-+ }
-+
-+ if (!(is_ori_opt && is_cur_opt)) {
-+ // if both are already optical duplicates there is no need to check again, otherwise...
-+
-+ if (optical_duplicate(ori->b, current->b, param->opt_dist, warn)) {
-+ // find out which one is the duplicate
-+ int is_cur_dup = 0;
-+
-+ if (have_original) {
-+ // compared against an original, this is a dup.
-+ is_cur_dup = 1;
-+ } else if (ori_paired != current_paired) {
-+ if (!current_paired) {
-+ // current is single vs pair, this is a dup.
-+ is_cur_dup = 1;
-+ }
-+ } else {
-+ // do it by scores
-+ int64_t ori_score, curr_score;
-+
-+ if ((ori->b->core.flag & BAM_FQCFAIL) != (current->b->core.flag & BAM_FQCFAIL)) {
-+ if (ori->b->core.flag & BAM_FQCFAIL) {
-+ ori_score = 0;
-+ curr_score = 1;
-+ } else {
-+ ori_score = 1;
-+ curr_score = 0;
-+ }
-+ } else {
-+ ori_score = calc_score(ori->b);
-+ curr_score = calc_score(current->b);
-+
-+ if (current_paired) {
-+ // they are pairs so add mate scores.
-+ int64_t mate_tmp;
-+
-+ if ((mate_tmp = get_mate_score(ori->b)) == -1) {
-+ fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ ret = -1;
-+ break;
-+ } else {
-+ ori_score += mate_tmp;
-+ }
-+
-+ if ((mate_tmp = get_mate_score(current->b)) == -1) {
-+ fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ ret = -1;
-+ break;
-+ } else {
-+ curr_score += mate_tmp;
-+ }
-+ }
-+ }
-+
-+ if (ori_score == curr_score) {
-+ if (strcmp(bam_get_qname(current->b), ori_name) < 0) {
-+ curr_score++;
-+ } else {
-+ curr_score--;
-+ }
-+ }
-+
-+ if (ori_score > curr_score) {
-+ is_cur_dup = 1;
-+ }
-+ }
-+
-+ if (is_cur_dup) {
-+ // the current is the optical duplicate
-+ if (!is_cur_opt) { // only change if not already an optical duplicate
-+ if (optical_retag(param, dup_hash, current->b, current_paired, optical_single, optical_pair)) {
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ } else {
-+ if (!is_ori_opt) {
-+ if (optical_retag(param, dup_hash, ori->b, ori_paired, optical_single, optical_pair)) {
-+ ret = -1;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+
-+ current = current->duplicate;
-+ }
-+
-+ return ret;
-+}
-+
-+/*
-+ Function to use when estimating library size.
-+
-+ This is based on an approximate formula for the coverage of a set
-+ obtained after sampling it a given number of times with replacement.
-+
-+ x = number of items in the set (the number of unique fragments in the library)
-+
-+ c = number of unique items (unique read pairs observed)
-+
-+ n = number of items samples (total number of read pairs)
-+
-+ c and n are known; x is unknown.
-+
-+ As n -> infinity, the coverage (c/x) can be given as:
-+
-+ c / x = 1 - exp(-n / x) (see https://math.stackexchange.com/questions/32800)
-+
-+ This needs to be solved for x, so it is rearranged to put both terms on the
-+ left side and estimate_library_size() finds a value of x which gives a
-+ result of zero (or as close as it can get).
-+ */
-+static inline double coverage_equation(double x, double c, double n) {
-+ return c / x - 1 + exp(-n / x);
-+}
-+
-+
-+/* estimate the library size, based on the Picard code in DuplicationMetrics.java*/
-+static unsigned long estimate_library_size(unsigned long read_pairs, unsigned long duplicate_pairs) {
-+ unsigned long estimated_size = 0;
-+
-+ read_pairs /= 2;
-+ duplicate_pairs /= 2;
-+
-+ if ((read_pairs && duplicate_pairs) && (read_pairs > duplicate_pairs)) {
-+ unsigned long unique_pairs = read_pairs - duplicate_pairs;
-+ double m = 1;
-+ double M = 100;
-+ int i;
-+
-+ if (coverage_equation(m * (double)unique_pairs, (double)unique_pairs, (double)read_pairs) < 0) {
-+ fprintf(samtools_stderr, "[markdup] warning: unable to calculate estimated library size.\n");
-+ return estimated_size;
-+ }
-+
-+ while (coverage_equation(M * (double)unique_pairs, (double)unique_pairs, (double)read_pairs) > 0) {
-+ M *= 10;
-+ }
-+
-+ for (i = 0; i < 40; i++) {
-+ double r = (m + M) / 2;
-+ double u = coverage_equation(r * (double)unique_pairs, (double)unique_pairs, (double)read_pairs);
-+
-+ if (u > 0) {
-+ m = r;
-+ } else if (u < 0) {
-+ M = r;
-+ } else {
-+ break;
-+ }
-+ }
-+
-+ estimated_size = (unsigned long)(unique_pairs * (m + M) / 2);
-+ } else {
-+ fprintf(samtools_stderr, "[markdup] warning: unable to calculate estimated library size."
-+ " Read pairs %ld should be greater than duplicate pairs %ld,"
-+ " which should both be non zero.\n",
-+ read_pairs, duplicate_pairs);
-+ }
-+
-+ return estimated_size;
-+}
-+
-+
- /* Compare the reads near each other (coordinate sorted) and try to spot the duplicates.
- Generally the highest quality scoring is chosen as the original and all others the duplicates.
- The score is based on the sum of the quality values (<= 15) of the read and its mate (if any).
-@@ -478,44 +1137,59 @@
- Marking the supplementary reads of a duplicate as also duplicates takes an extra file read/write
- step. This is because the duplicate can occur before the primary read.*/
-
--static int bam_mark_duplicates(samFile *in, samFile *out, char *prefix, int remove_dups, int32_t max_length, int do_stats, int supp, int tag) {
-- bam_hdr_t *header;
-+static int bam_mark_duplicates(md_param_t *param) {
-+ bam_hdr_t *header = NULL;
- khiter_t k;
- khash_t(reads) *pair_hash = kh_init(reads);
- khash_t(reads) *single_hash = kh_init(reads);
- klist_t(read_queue) *read_buffer = kl_init(read_queue);
- kliter_t(read_queue) *rq;
- khash_t(duplicates) *dup_hash = kh_init(duplicates);
-- int32_t prev_tid, prev_coord;
-+ int32_t prev_tid;
-+ hts_pos_t prev_coord;
- read_queue_t *in_read;
- int ret;
-- int reading, writing, excluded, duplicate, single, pair, single_dup, examined;
-+ long reading, writing, excluded, duplicate, single, pair, single_dup, examined, optical, single_optical;
-+ long np_duplicate, np_opt_duplicate;
-+ long opt_warnings = 0;
- tmp_file_t temp;
-+ char *idx_fn = NULL;
-+ int exclude = 0;
-
-- if ((header = sam_hdr_read(in)) == NULL) {
-+ if (!pair_hash || !single_hash || !read_buffer || !dup_hash) {
-+ fprintf(samtools_stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-+
-+ if ((header = sam_hdr_read(param->in)) == NULL) {
- fprintf(samtools_stderr, "[markdup] error reading header\n");
-- return 1;
-+ goto fail;
- }
-
- // accept unknown, unsorted or coordinate sort order, but error on queryname sorted.
- // only really works on coordinate sorted files.
-- if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) {
-- char *p, *q;
--
-- p = strstr(header->text, "\tSO:queryname");
-- q = strchr(header->text, '\n');
--
-- // looking for SO:queryname within @HD only
-- // (e.g. must ignore in a @CO comment line later in header)
-- if ((p != 0) && (p < q)) {
-- fprintf(samtools_stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n");
-- return 1;
-- }
-+ kstring_t str = KS_INITIALIZE;
-+ if (!sam_hdr_find_tag_hd(header, "SO", &str) && str.s && !strcmp(str.s, "queryname")) {
-+ fprintf(samtools_stderr, "[markdup] error: queryname sorted, must be sorted by coordinate.\n");
-+ ks_free(&str);
-+ goto fail;
-+ }
-+ ks_free(&str);
-+
-+ if (!param->no_pg && sam_hdr_add_pg(header, "samtools", "VN", samtools_version(),
-+ param->arg_list ? "CL" : NULL,
-+ param->arg_list ? param->arg_list : NULL,
-+ NULL) != 0) {
-+ fprintf(samtools_stderr, "[markdup] warning: unable to add @PG line to header.\n");
- }
-
-- if (sam_hdr_write(out, header) < 0) {
-+ if (sam_hdr_write(param->out, header) < 0) {
- fprintf(samtools_stderr, "[markdup] error writing header.\n");
-- return 1;
-+ goto fail;
-+ }
-+ if (param->write_index) {
-+ if (!(idx_fn = auto_index(param->out, param->out_fn, header)))
-+ goto fail;
- }
-
- // used for coordinate order checks
-@@ -523,30 +1197,35 @@
-
- // get the buffer going
- in_read = kl_pushp(read_queue, read_buffer);
-+ if (!in_read) {
-+ fprintf(samtools_stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-
- // handling supplementary reads needs a temporary file
-- if (supp) {
-- if (tmp_file_open_write(&temp, prefix, 1)) {
-- fprintf(samtools_stderr, "[markdup] error: unable to open tmp file %s.\n", prefix);
-- return 1;
-+ if (param->supp) {
-+ if (tmp_file_open_write(&temp, param->prefix, 1)) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to open tmp file %s.\n", param->prefix);
-+ goto fail;
- }
- }
-
- if ((in_read->b = bam_init1()) == NULL) {
- fprintf(samtools_stderr, "[markdup] error: unable to allocate memory for alignment.\n");
-- return 1;
-+ goto fail;
- }
-
-- reading = writing = excluded = single_dup = duplicate = examined = pair = single = 0;
-+ reading = writing = excluded = single_dup = duplicate = examined = pair = single = optical = single_optical = 0;
-+ np_duplicate = np_opt_duplicate = 0;
-
-- while ((ret = sam_read1(in, header, in_read->b)) >= 0) {
-+ while ((ret = sam_read1(param->in, header, in_read->b)) >= 0) {
-
- // do some basic coordinate order checks
- if (in_read->b->core.tid >= 0) { // -1 for unmapped reads
- if (in_read->b->core.tid < prev_tid ||
- ((in_read->b->core.tid == prev_tid) && (in_read->b->core.pos < prev_coord))) {
-- fprintf(samtools_stderr, "[markdup] error: bad coordinate order.\n");
-- return 1;
-+ fprintf(samtools_stderr, "[markdup] error: not in coordinate sorted order.\n");
-+ goto fail;
- }
- }
-
-@@ -557,10 +1236,30 @@
-
- reading++;
-
-- // read must not be secondary, supplementary, unmapped or failed QC
-- if (!(in_read->b->core.flag & (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL))) {
-- examined++;
-+ if (param->clear && (in_read->b->core.flag & BAM_FDUP)) {
-+ uint8_t *data;
-+
-+ in_read->b->core.flag ^= BAM_FDUP;
-
-+ if ((data = bam_aux_get(in_read->b, "dt")) != NULL) {
-+ bam_aux_del(in_read->b, data);
-+ }
-+
-+ if ((data = bam_aux_get(in_read->b, "do")) != NULL) {
-+ bam_aux_del(in_read->b, data);
-+ }
-+ }
-+
-+ if (param->include_fails) {
-+ exclude |= (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP);
-+ } else {
-+ exclude |= (BAM_FSECONDARY | BAM_FSUPPLEMENTARY | BAM_FUNMAP | BAM_FQCFAIL);
-+ }
-+
-+ // read must not be secondary, supplementary, unmapped or (possibly) failed QC
-+ if (!(in_read->b->core.flag & exclude)) {
-+ examined++;
-+ in_read->duplicate = NULL;
-
- // look at the pairs first
- if ((in_read->b->core.flag & BAM_FPAIRED) && !(in_read->b->core.flag & BAM_FMUNMAP)) {
-@@ -569,9 +1268,16 @@
- key_data_t single_key;
- in_hash_t *bp;
-
-- if (make_pair_key(&pair_key, in_read->b)) {
-- fprintf(samtools_stderr, "[markdup] error: unable to assign pair hash key.\n");
-- return 1;
-+ if (param->mode) {
-+ if (make_pair_key_sequence(&pair_key, in_read->b)) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to assign pair hash key.\n");
-+ goto fail;
-+ }
-+ } else {
-+ if (make_pair_key_template(&pair_key, in_read->b)) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to assign pair hash key.\n");
-+ goto fail;
-+ }
- }
-
- make_single_key(&single_key, in_read->b);
-@@ -585,40 +1291,32 @@
- if (ret > 0) { // new
- // add to single duplicate hash
- bp = &kh_val(single_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->single_key = single_key;
- } else if (ret == 0) { // exists
- // look at singles only for duplication marking
- bp = &kh_val(single_hash, k);
-
-- if (!(bp->p->core.flag & BAM_FPAIRED) || (bp->p->core.flag & BAM_FMUNMAP)) {
-- bam1_t *dup = bp->p;
-+ if (!(bp->p->b->core.flag & BAM_FPAIRED) || (bp->p->b->core.flag & BAM_FMUNMAP)) {
-+ // singleton will always be marked duplicate even if
-+ // scores more than one read of the pair
-+ bam1_t *dup = bp->p->b;
-+
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
-
-- // singleton will always be marked duplicate even if
-- // scores more than one read of the pair
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &single_optical, &opt_warnings))
-+ goto fail;
-
-- bp->p = in_read->b;
-- dup->core.flag |= BAM_FDUP;
- single_dup++;
-
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-- }
- }
- } else {
- fprintf(samtools_stderr, "[markdup] error: single hashing failure.\n");
-- return 1;
-+ goto fail;
- }
-
- // now do the pair
-@@ -627,33 +1325,44 @@
- if (ret > 0) { // new
- // add to the pair hash
- bp = &kh_val(pair_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->pair_key = pair_key;
- } else if (ret == 0) {
- int64_t old_score, new_score, tie_add = 0;
- bam1_t *dup;
-+ int check_chain = 0;
-
- bp = &kh_val(pair_hash, k);
-
-- if ((mate_tmp = get_mate_score(bp->p)) == -1) {
-- fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-- return 1;
-+ if ((bp->p->b->core.flag & BAM_FQCFAIL) != (in_read->b->core.flag & BAM_FQCFAIL)) {
-+ if (bp->p->b->core.flag & BAM_FQCFAIL) {
-+ old_score = 0;
-+ new_score = 1;
-+ } else {
-+ old_score = 1;
-+ new_score = 0;
-+ }
- } else {
-- old_score = calc_score(bp->p) + mate_tmp;
-- }
-+ if ((mate_tmp = get_mate_score(bp->p->b)) == -1) {
-+ fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ goto fail;
-+ } else {
-+ old_score = calc_score(bp->p->b) + mate_tmp;
-+ }
-
-- if ((mate_tmp = get_mate_score(in_read->b)) == -1) {
-- fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-- return 1;
-- } else {
-- new_score = calc_score(in_read->b) + mate_tmp;
-+ if ((mate_tmp = get_mate_score(in_read->b)) == -1) {
-+ fprintf(samtools_stderr, "[markdup] error: no ms score tag. Please run samtools fixmate on file first.\n");
-+ goto fail;
-+ } else {
-+ new_score = calc_score(in_read->b) + mate_tmp;
-+ }
- }
-
- // choose the highest score as the original
- // and add it to the pair hash, mark the other as duplicate
-
- if (new_score == old_score) {
-- if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p)) < 0) {
-+ if (strcmp(bam_get_qname(in_read->b), bam_get_qname(bp->p->b)) < 0) {
- tie_add = 1;
- } else {
- tie_add = -1;
-@@ -661,39 +1370,40 @@
- }
-
- if (new_score + tie_add > old_score) { // swap reads
-- dup = bp->p;
-- bp->p = in_read->b;
-+ dup = bp->p->b;
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
- } else {
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
-+ }
-+
-+ bp->p->duplicate = in_read;
- dup = in_read->b;
- }
-
-- dup->core.flag |= BAM_FDUP;
--
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &optical, &opt_warnings))
-+ goto fail;
-
-+ if (check_chain) {
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-
- duplicate++;
- } else {
- fprintf(samtools_stderr, "[markdup] error: pair hashing failure.\n");
-- return 1;
-+ goto fail;
- }
- } else { // do the single (or effectively single) reads
- int ret;
- key_data_t single_key;
- in_hash_t *bp;
-+ int check_chain = 0;
-
- make_single_key(&single_key, in_read->b);
-
-@@ -704,68 +1414,76 @@
-
- if (ret > 0) { // new
- bp = &kh_val(single_hash, k);
-- bp->p = in_read->b;
-+ bp->p = in_read;
- in_read->single_key = single_key;
- } else if (ret == 0) { // exists
- bp = &kh_val(single_hash, k);
-
-- if ((bp->p->core.flag & BAM_FPAIRED) && !(bp->p->core.flag & BAM_FMUNMAP)) {
-+ if ((bp->p->b->core.flag & BAM_FPAIRED) && !(bp->p->b->core.flag & BAM_FMUNMAP)) {
- // if matched against one of a pair just mark as duplicate
-
-- if (tag) {
-- if (bam_aux_append(in_read->b, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
- }
-
-- if (supp) {
-- if (bam_aux_get(in_read->b, "SA") || (in_read->b->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, in_read->b)) {
-- return 1;
-- }
-- }
-+ bp->p->duplicate = in_read;
-+
-+ if (mark_duplicates(param, dup_hash, bp->p->b, in_read->b, &single_optical, &opt_warnings))
-+ goto fail;
-+
-+ if (check_chain) {
-+ // check the new duplicate entry in the chain
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- in_read->b->core.flag |= BAM_FDUP;
-+ // check against the new original
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-+
- } else {
- int64_t old_score, new_score;
- bam1_t *dup;
-
-- old_score = calc_score(bp->p);
-+ old_score = calc_score(bp->p->b);
- new_score = calc_score(in_read->b);
-
- // choose the highest score as the original, add it
- // to the single hash and mark the other as duplicate
- if (new_score > old_score) { // swap reads
-- dup = bp->p;
-- bp->p = in_read->b;
-+ dup = bp->p->b;
-+ in_read->duplicate = bp->p;
-+ bp->p = in_read;
- } else {
-+ if (bp->p->duplicate) {
-+ in_read->duplicate = bp->p->duplicate;
-+ check_chain = 1;
-+ }
-+
-+ bp->p->duplicate = in_read;
- dup = in_read->b;
- }
-
-- dup->core.flag |= BAM_FDUP;
-+ if (mark_duplicates(param, dup_hash, bp->p->b, dup, &single_optical, &opt_warnings))
-+ goto fail;
-
-- if (tag) {
-- if (bam_aux_append(dup, "do", 'Z', strlen(bam_get_qname(bp->p)) + 1, (uint8_t*)bam_get_qname(bp->p))) {
-- fprintf(samtools_stderr, "[markdup] error: unable to append 'do' tag.\n");
-- return 1;
-- }
-+
-+ if (check_chain) {
-+ if (duplicate_chain_check(param, dup_hash, bp->p->duplicate, &opt_warnings, &single_optical, &optical))
-+ goto fail;
- }
-
-- if (supp) {
-- if (bam_aux_get(dup, "SA") || (dup->core.flag & BAM_FMUNMAP)) {
-- if (add_duplicate(dup_hash, dup)) {
-- return 1;
-- }
-- }
-+ if (duplicate_chain_check(param, dup_hash, bp->p, &opt_warnings, &single_optical, &optical))
-+ goto fail;
-+
-+
- }
-- }
-
- single_dup++;
- } else {
- fprintf(samtools_stderr, "[markdup] error: single hashing failure.\n");
-- return 1;
-+ goto fail;
- }
- }
- } else {
-@@ -780,20 +1498,20 @@
-
- /* keep a moving window of reads based on coordinates and max read length. Any unaligned reads
- should just be written as they cannot be matched as duplicates. */
-- if (in_read->pos + max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) {
-+ if (in_read->pos + param->max_length > prev_coord && in_read->b->core.tid == prev_tid && (prev_tid != -1 || prev_coord != -1)) {
- break;
- }
-
-- if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-- if (supp) {
-+ if (!param->remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-+ if (param->supp) {
- if (tmp_file_write(&temp, in_read->b)) {
- fprintf(samtools_stderr, "[markdup] error: writing temp output failed.\n");
-- return 1;
-+ goto fail;
- }
- } else {
-- if (sam_write1(out, header, in_read->b) < 0) {
-+ if (sam_write1(param->out, header, in_read->b) < 0) {
- fprintf(samtools_stderr, "[markdup] error: writing output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
-
-@@ -818,16 +1536,20 @@
-
- // set the next one up for reading
- in_read = kl_pushp(read_queue, read_buffer);
-+ if (!in_read) {
-+ fprintf(samtools_stderr, "[markdup] out of memory\n");
-+ goto fail;
-+ }
-
- if ((in_read->b = bam_init1()) == NULL) {
- fprintf(samtools_stderr, "[markdup] error: unable to allocate memory for alignment.\n");
-- return 1;
-+ goto fail;
- }
- }
-
- if (ret < -1) {
- fprintf(samtools_stderr, "[markdup] error: truncated input file.\n");
-- return 1;
-+ goto fail;
- }
-
- // write out the end of the list
-@@ -836,16 +1558,16 @@
- in_read = &kl_val(rq);
-
- if (bam_get_qname(in_read->b)) { // last entry will be blank
-- if (!remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-- if (supp) {
-+ if (!param->remove_dups || !(in_read->b->core.flag & BAM_FDUP)) {
-+ if (param->supp) {
- if (tmp_file_write(&temp, in_read->b)) {
- fprintf(samtools_stderr, "[markdup] error: writing temp output failed.\n");
-- return 1;
-+ goto fail;
- }
- } else {
-- if (sam_write1(out, header, in_read->b) < 0) {
-+ if (sam_write1(param->out, header, in_read->b) < 0) {
- fprintf(samtools_stderr, "[markdup] error: writing output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
-
-@@ -858,71 +1580,155 @@
- rq = kl_begin(read_buffer);
- }
-
-- if (supp) {
-+ if (param->supp) {
- bam1_t *b;
-
- if (tmp_file_end_write(&temp)) {
- fprintf(samtools_stderr, "[markdup] error: unable to end tmp writing.\n");
-- return 1;
-+ goto fail;
- }
-
- // read data from temp file and mark duplicate supplementary alignments
-
-- if (tmp_file_begin_read(&temp, NULL)) {
-- return 1;
-+ if (tmp_file_begin_read(&temp)) {
-+ goto fail;
- }
-
- b = bam_init1();
-
- while ((ret = tmp_file_read(&temp, b)) > 0) {
-
-- if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP)) {
-+ if ((b->core.flag & BAM_FSUPPLEMENTARY) || (b->core.flag & BAM_FUNMAP) || (b->core.flag & BAM_FSECONDARY)) {
-+
- k = kh_get(duplicates, dup_hash, bam_get_qname(b));
-
- if (k != kh_end(dup_hash)) {
-+
- b->core.flag |= BAM_FDUP;
-+ np_duplicate++;
-+
-+ if (param->tag && kh_val(dup_hash, k).name) {
-+ if (bam_aux_append(b, "do", 'Z', strlen(kh_val(dup_hash, k).name) + 1, (uint8_t*)kh_val(dup_hash, k).name)) {
-+ fprintf(samtools_stderr, "[markdup] error: unable to append supplementary 'do' tag.\n");
-+ goto fail;
-+ }
-+ }
-+
-+ if (param->opt_dist) {
-+ if (kh_val(dup_hash, k).type) {
-+ bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"SQ");
-+ np_opt_duplicate++;
-+ } else {
-+ bam_aux_append(b, "dt", 'Z', 3, (const uint8_t *)"LB");
-+ }
-+ }
- }
- }
-
-- if (!remove_dups || !(b->core.flag & BAM_FDUP)) {
-- if (sam_write1(out, header, b) < 0) {
-+ if (!param->remove_dups || !(b->core.flag & BAM_FDUP)) {
-+ if (sam_write1(param->out, header, b) < 0) {
- fprintf(samtools_stderr, "[markdup] error: writing final output failed.\n");
-- return 1;
-+ goto fail;
- }
- }
- }
-
- if (ret == -1) {
- fprintf(samtools_stderr, "[markdup] error: failed to read tmp file.\n");
-- return 1;
-+ goto fail;
- }
-
- for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) {
- if (kh_exist(dup_hash, k)) {
-+ free(kh_val(dup_hash, k).name);
- free((char *)kh_key(dup_hash, k));
-+ kh_key(dup_hash, k) = NULL;
- }
- }
-
-- tmp_file_destroy(&temp, b, 0);
-- kh_destroy(duplicates, dup_hash);
-+ tmp_file_destroy(&temp);
- bam_destroy1(b);
- }
-
-- if (do_stats) {
-- fprintf(samtools_stderr, "READ %d WRITTEN %d \n"
-- "EXCLUDED %d EXAMINED %d\n"
-- "PAIRED %d SINGLE %d\n"
-- "DULPICATE PAIR %d DUPLICATE SINGLE %d\n"
-- "DUPLICATE TOTAL %d\n", reading, writing, excluded, examined, pair, single,
-- duplicate, single_dup, single_dup + duplicate);
-+ if (opt_warnings) {
-+ fprintf(samtools_stderr, "[markdup] warning: number of failed attempts to get coordinates from read names = %ld\n",
-+ opt_warnings);
-+ }
-+
-+ if (param->do_stats) {
-+ FILE *fp;
-+ int file_open = 0;
-+ unsigned long els;
-+
-+ if (param->stats_file) {
-+ if (NULL == (fp = fopen(param->stats_file, "w"))) {
-+ fprintf(samtools_stderr, "[markdup] warning: cannot write stats to %s.\n", param->stats_file);
-+ fp = samtools_stderr;
-+ } else {
-+ file_open = 1;
-+ }
-+ } else {
-+ fp = samtools_stderr;
-+ }
-+
-+ els = estimate_library_size(pair, duplicate - optical);
-+
-+ fprintf(fp,
-+ "COMMAND: %s\n"
-+ "READ: %ld\n"
-+ "WRITTEN: %ld\n"
-+ "EXCLUDED: %ld\n"
-+ "EXAMINED: %ld\n"
-+ "PAIRED: %ld\n"
-+ "SINGLE: %ld\n"
-+ "DUPLICATE PAIR: %ld\n"
-+ "DUPLICATE SINGLE: %ld\n"
-+ "DUPLICATE PAIR OPTICAL: %ld\n"
-+ "DUPLICATE SINGLE OPTICAL: %ld\n"
-+ "DUPLICATE NON PRIMARY: %ld\n"
-+ "DUPLICATE NON PRIMARY OPTICAL: %ld\n"
-+ "DUPLICATE PRIMARY TOTAL: %ld\n"
-+ "DUPLICATE TOTAL: %ld\n"
-+ "ESTIMATED_LIBRARY_SIZE: %ld\n", param->arg_list, reading, writing, excluded, examined, pair, single,
-+ duplicate, single_dup, optical, single_optical, np_duplicate, np_opt_duplicate,
-+ single_dup + duplicate, single_dup + duplicate + np_duplicate, els);
-+
-+ if (file_open) {
-+ fclose(fp);
-+ }
-+ }
-+
-+ if (param->write_index) {
-+ if (sam_idx_save(param->out) < 0) {
-+ print_error_errno("markdup", "writing index failed");
-+ goto fail;
-+ }
- }
-
- kh_destroy(reads, pair_hash);
- kh_destroy(reads, single_hash);
- kl_destroy(read_queue, read_buffer);
-- bam_hdr_destroy(header);
-+ kh_destroy(duplicates, dup_hash);
-+ sam_hdr_destroy(header);
-
- return 0;
-+
-+ fail:
-+ for (rq = kl_begin(read_buffer); rq != kl_end(read_buffer); rq = kl_next(rq))
-+ bam_destroy1(kl_val(rq).b);
-+ kl_destroy(read_queue, read_buffer);
-+
-+ for (k = kh_begin(dup_hash); k != kh_end(dup_hash); ++k) {
-+ if (kh_exist(dup_hash, k)) {
-+ free((char *)kh_key(dup_hash, k));
-+ }
-+ }
-+ kh_destroy(duplicates, dup_hash);
-+
-+ kh_destroy(reads, pair_hash);
-+ kh_destroy(reads, single_hash);
-+ sam_hdr_destroy(header);
-+ return 1;
- }
-
-
-@@ -930,15 +1736,23 @@
- fprintf(samtools_stderr, "\n");
- fprintf(samtools_stderr, "Usage: samtools markdup <input.bam> <output.bam>\n\n");
- fprintf(samtools_stderr, "Option: \n");
-- fprintf(samtools_stderr, " -r Remove duplicate reads\n");
-- fprintf(samtools_stderr, " -l INT Max read length (default 300 bases)\n");
-- fprintf(samtools_stderr, " -S Mark supplemenary alignments of duplicates as duplicates (slower).\n");
-- fprintf(samtools_stderr, " -s Report stats.\n");
-- fprintf(samtools_stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n");
-- fprintf(samtools_stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag."
-+ fprintf(samtools_stderr, " -r Remove duplicate reads\n");
-+ fprintf(samtools_stderr, " -l INT Max read length (default 300 bases)\n");
-+ fprintf(samtools_stderr, " -S Mark supplementary alignments of duplicates as duplicates (slower).\n");
-+ fprintf(samtools_stderr, " -s Report stats.\n");
-+ fprintf(samtools_stderr, " -f NAME Write stats to named file. Implies -s.\n");
-+ fprintf(samtools_stderr, " -T PREFIX Write temporary files to PREFIX.samtools.nnnn.nnnn.tmp.\n");
-+ fprintf(samtools_stderr, " -d INT Optical distance (if set, marks with dt tag)\n");
-+ fprintf(samtools_stderr, " -c Clear previous duplicate settings and tags.\n");
-+ fprintf(samtools_stderr, " -m --mode TYPE Duplicate decision method for paired reads.\n"
-+ " TYPE = t measure positions based on template start/end (default).\n"
-+ " s measure positions based on sequence start.\n");
-+ fprintf(samtools_stderr, " --include-fails Include quality check failed reads.\n");
-+ fprintf(samtools_stderr, " --no-PG Do not add a PG line\n");
-+ fprintf(samtools_stderr, " -t Mark primary duplicates with the name of the original in a \'do\' tag."
- " Mainly for information and debugging.\n");
-
-- sam_global_opt_help(samtools_stderr, "-.O..@");
-+ sam_global_opt_help(samtools_stderr, "-.O..@..");
-
- fprintf(samtools_stderr, "\nThe input file must be coordinate sorted and must have gone"
- " through fixmates with the mate scoring option on.\n");
-@@ -948,29 +1762,47 @@
-
-
- int bam_markdup(int argc, char **argv) {
-- int c, ret, remove_dups = 0, report_stats = 0, include_supplementary = 0, tag_dup = 0;
-- int32_t max_length = 300;
-- samFile *in = NULL, *out = NULL;
-+ int c, ret;
- char wmode[3] = {'w', 'b', 0};
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- htsThreadPool p = {NULL, 0};
- kstring_t tmpprefix = {0, 0, NULL};
- struct stat st;
- unsigned int t;
-+ md_param_t param = {NULL, NULL, NULL, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL};
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
-+ {"include-fails", no_argument, NULL, 1001},
-+ {"no-PG", no_argument, NULL, 1002},
-+ {"mode", required_argument, NULL, 'm'},
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "rsl:StT:O:@:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "rsl:StT:O:@:f:d:ncm:", lopts, NULL)) >= 0) {
- switch (c) {
-- case 'r': remove_dups = 1; break;
-- case 'l': max_length = atoi(optarg); break;
-- case 's': report_stats = 1; break;
-+ case 'r': param.remove_dups = 1; break;
-+ case 'l': param.max_length = atoi(optarg); break;
-+ case 's': param.do_stats = 1; break;
- case 'T': kputs(optarg, &tmpprefix); break;
-- case 'S': include_supplementary = 1; break;
-- case 't': tag_dup = 1; break;
-+ case 'S': param.supp = 1; break;
-+ case 't': param.tag = 1; break;
-+ case 'f': param.stats_file = optarg; param.do_stats = 1; break;
-+ case 'd': param.opt_dist = atoi(optarg); break;
-+ case 'c': param.clear = 1; break;
-+ case 'm':
-+ if (strcmp(optarg, "t") == 0) {
-+ param.mode = MD_MODE_TEMPLATE;
-+ } else if (strcmp(optarg, "s") == 0) {
-+ param.mode = MD_MODE_SEQUENCE;
-+ } else {
-+ fprintf(samtools_stderr, "[markdup] error: unknown mode '%s'.\n", optarg);
-+ return markdup_usage();
-+ }
-+
-+ break;
-+ case 1001: param.include_fails = 1; break;
-+ case 1002: param.no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return markdup_usage();
-@@ -980,17 +1812,20 @@
- if (optind + 2 > argc)
- return markdup_usage();
-
-- in = sam_open_format(argv[optind], "r", &ga.in);
-+ if (param.opt_dist < 0) param.opt_dist = 0;
-+ if (param.max_length < 0) param.max_length = 300;
-+
-+ param.in = sam_open_format(argv[optind], "r", &ga.in);
-
-- if (!in) {
-+ if (!param.in) {
- print_error_errno("markdup", "failed to open \"%s\" for input", argv[optind]);
- return 1;
- }
-
- sam_open_mode(wmode + 1, argv[optind + 1], NULL);
-- out = sam_open_format(argv[optind + 1], wmode, &ga.out);
-+ param.out = sam_open_format(argv[optind + 1], wmode, &ga.out);
-
-- if (!out) {
-+ if (!param.out) {
- print_error_errno("markdup", "failed to open \"%s\" for output", argv[optind + 1]);
- return 1;
- }
-@@ -1001,8 +1836,8 @@
- return 1;
- }
-
-- hts_set_opt(in, HTS_OPT_THREAD_POOL, &p);
-- hts_set_opt(out, HTS_OPT_THREAD_POOL, &p);
-+ hts_set_opt(param.in, HTS_OPT_THREAD_POOL, &p);
-+ hts_set_opt(param.out, HTS_OPT_THREAD_POOL, &p);
- }
-
- // actual stuff happens here
-@@ -1022,18 +1857,24 @@
-
- t = ((unsigned) time(NULL)) ^ ((unsigned) clock());
- ksprintf(&tmpprefix, "samtools.%d.%u.tmp", (int) getpid(), t % 10000);
-+ param.prefix = tmpprefix.s;
-+
-+ param.arg_list = stringify_argv(argc + 1, argv - 1);
-+ param.write_index = ga.write_index;
-+ param.out_fn = argv[optind + 1];
-
-- ret = bam_mark_duplicates(in, out, tmpprefix.s, remove_dups, max_length, report_stats, include_supplementary, tag_dup);
-+ ret = bam_mark_duplicates(¶m);
-
-- sam_close(in);
-+ sam_close(param.in);
-
-- if (sam_close(out) < 0) {
-+ if (sam_close(param.out) < 0) {
- fprintf(samtools_stderr, "[markdup] error closing output file\n");
- ret = 1;
- }
-
- if (p.pool) hts_tpool_destroy(p.pool);
-
-+ free(param.arg_list);
- free(tmpprefix.s);
- sam_global_args_free(&ga);
-
---- python-pysam.orig/samtools/bam_mate.c
-+++ python-pysam/samtools/bam_mate.c
-@@ -1,6 +1,6 @@
- /* bam_mate.c -- fix mate pairing information and clean up flags.
-
-- Copyright (C) 2009, 2011-2017 Genome Research Ltd.
-+ Copyright (C) 2009, 2011-2017, 2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
- Portions copyright (C) 2012 Peter Cock, The James Hutton Institute.
-
-@@ -37,6 +37,9 @@
- #include "htslib/sam.h"
- #include "samtools.h"
-
-+
-+#define MD_MIN_QUALITY 15
-+
- /*
- * This function calculates ct tag for two bams, it assumes they are from the same template and
- * writes the tag to the first read in position terms.
-@@ -44,7 +47,8 @@
- static void bam_template_cigar(bam1_t *b1, bam1_t *b2, kstring_t *str)
- {
- bam1_t *swap;
-- int i, end;
-+ int i;
-+ hts_pos_t end;
- uint32_t *cigar;
- str->l = 0;
- if (b1->core.tid != b2->core.tid || b1->core.tid < 0 || b1->core.pos < 0 || b2->core.pos < 0 || b1->core.flag&BAM_FUNMAP || b2->core.flag&BAM_FUNMAP) return; // coordinateless or not on the same chr; skip
-@@ -140,8 +144,8 @@
-
- bam1_t* first = a;
- bam1_t* second = b;
-- int32_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos;
-- int32_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos;
-+ hts_pos_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos;
-+ hts_pos_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos;
- if (a_pos > b_pos) {
- first = b;
- second = a;
-@@ -226,7 +230,7 @@
- int i;
-
- for (i = 0; i < b->core.l_qseq; i++) {
-- if (qual[i] >= 15) score += qual[i];
-+ if (qual[i] >= MD_MIN_QUALITY) score += qual[i];
- }
-
- return score;
-@@ -250,31 +254,34 @@
- }
-
- // currently, this function ONLY works if each read has one hit
--static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring)
-+static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring, char *arg_list, int no_pg)
- {
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- bam1_t *b[2] = { NULL, NULL };
-- int curr, has_prev, pre_end = 0, cur_end = 0, result;
-- kstring_t str;
-+ int curr, has_prev, result;
-+ hts_pos_t pre_end = 0, cur_end = 0;
-+ kstring_t str = KS_INITIALIZE;
-
-- str.l = str.m = 0; str.s = 0;
- header = sam_hdr_read(in);
- if (header == NULL) {
- fprintf(stderr, "[bam_mating_core] ERROR: Couldn't read header\n");
- return 1;
- }
-+
- // Accept unknown, unsorted, or queryname sort order, but error on coordinate sorted.
-- if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) {
-- char *p, *q;
-- p = strstr(header->text, "\tSO:coordinate");
-- q = strchr(header->text, '\n');
-- // Looking for SO:coordinate within the @HD line only
-- // (e.g. must ignore in a @CO comment line later in header)
-- if ((p != 0) && (p < q)) {
-- fprintf(stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n");
-- goto fail;
-- }
-+ if (!sam_hdr_find_tag_hd(header, "SO", &str) && str.s && !strcmp(str.s, "coordinate")) {
-+ fprintf(stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n");
-+ goto fail;
- }
-+ ks_free(&str);
-+
-+ if (!no_pg && sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (sam_hdr_write(out, header) < 0) goto write_fail;
-
- b[0] = bam_init1();
-@@ -303,7 +310,7 @@
- cur_end = bam_endpos(cur);
-
- // Check cur_end isn't past the end of the contig we're on, if it is set the UNMAP'd flag
-- if (cur_end > (int)header->target_len[cur->core.tid]) cur->core.flag |= BAM_FUNMAP;
-+ if (cur_end > sam_hdr_tid2len(header, cur->core.tid)) cur->core.flag |= BAM_FUNMAP;
- }
- if (has_prev) { // do we have a pair of reads to examine?
- if (strcmp(bam_get_qname(cur), bam_get_qname(pre)) == 0) { // identical pair name
-@@ -314,7 +321,7 @@
- if (pre->core.tid == cur->core.tid && !(cur->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))
- && !(pre->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))) // if safe set TLEN/ISIZE
- {
-- uint32_t cur5, pre5;
-+ hts_pos_t cur5, pre5;
- cur5 = (cur->core.flag&BAM_FREVERSE)? cur_end : cur->core.pos;
- pre5 = (pre->core.flag&BAM_FREVERSE)? pre_end : pre->core.pos;
- cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5;
-@@ -378,18 +385,19 @@
-
- if (sam_write1(out, header, pre) < 0) goto write_fail;
- }
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- bam_destroy1(b[0]);
- bam_destroy1(b[1]);
-- free(str.s);
-+ ks_free(&str);
- return 0;
-
- write_fail:
- print_error_errno("fixmate", "Couldn't write to output file");
- fail:
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- bam_destroy1(b[0]);
- bam_destroy1(b[1]);
-+ ks_free(&str);
- return 1;
- }
-
-@@ -401,9 +409,10 @@
- " -r Remove unmapped reads and secondary alignments\n"
- " -p Disable FR proper pair check\n"
- " -c Add template cigar ct tag\n"
--" -m Add mate score tag\n");
-+" -m Add mate score tag\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(where, "-.O..@");
-+ sam_global_opt_help(where, "-.O..@-.");
-
- fprintf(where,
- "\n"
-@@ -416,13 +425,15 @@
- {
- htsThreadPool p = {NULL, 0};
- samFile *in = NULL, *out = NULL;
-- int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0;
-+ int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0, no_pg = 0;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- char wmode[3] = {'w', 'b', 0};
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-+ char *arg_list = NULL;
-
- // parse args
- if (argc == 1) { usage(stdout); return 0; }
-@@ -432,6 +443,7 @@
- case 'p': proper_pair_check = 0; break;
- case 'c': add_ct = 1; break;
- case 'm': mate_score = 1; break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': usage(stderr); goto fail;
-@@ -439,6 +451,9 @@
- }
- if (optind+1 >= argc) { usage(stderr); goto fail; }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1)))
-+ goto fail;
-+
- // init
- if ((in = sam_open_format(argv[optind], "rb", &ga.in)) == NULL) {
- print_error_errno("fixmate", "cannot open input file");
-@@ -460,7 +475,7 @@
- }
-
- // run
-- res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score);
-+ res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score, arg_list, no_pg);
-
- // cleanup
- sam_close(in);
-@@ -470,6 +485,7 @@
- }
-
- if (p.pool) hts_tpool_destroy(p.pool);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return res;
-
-@@ -477,6 +493,7 @@
- if (in) sam_close(in);
- if (out) sam_close(out);
- if (p.pool) hts_tpool_destroy(p.pool);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return 1;
- }
---- python-pysam.orig/samtools/bam_mate.c.pysam.c
-+++ python-pysam/samtools/bam_mate.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_mate.c -- fix mate pairing information and clean up flags.
-
-- Copyright (C) 2009, 2011-2017 Genome Research Ltd.
-+ Copyright (C) 2009, 2011-2017, 2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
- Portions copyright (C) 2012 Peter Cock, The James Hutton Institute.
-
-@@ -39,6 +39,9 @@
- #include "htslib/sam.h"
- #include "samtools.h"
-
-+
-+#define MD_MIN_QUALITY 15
-+
- /*
- * This function calculates ct tag for two bams, it assumes they are from the same template and
- * writes the tag to the first read in position terms.
-@@ -46,7 +49,8 @@
- static void bam_template_cigar(bam1_t *b1, bam1_t *b2, kstring_t *str)
- {
- bam1_t *swap;
-- int i, end;
-+ int i;
-+ hts_pos_t end;
- uint32_t *cigar;
- str->l = 0;
- if (b1->core.tid != b2->core.tid || b1->core.tid < 0 || b1->core.pos < 0 || b2->core.pos < 0 || b1->core.flag&BAM_FUNMAP || b2->core.flag&BAM_FUNMAP) return; // coordinateless or not on the same chr; skip
-@@ -142,8 +146,8 @@
-
- bam1_t* first = a;
- bam1_t* second = b;
-- int32_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos;
-- int32_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos;
-+ hts_pos_t a_pos = a->core.flag&BAM_FREVERSE ? bam_endpos(a) : a->core.pos;
-+ hts_pos_t b_pos = b->core.flag&BAM_FREVERSE ? bam_endpos(b) : b->core.pos;
- if (a_pos > b_pos) {
- first = b;
- second = a;
-@@ -228,7 +232,7 @@
- int i;
-
- for (i = 0; i < b->core.l_qseq; i++) {
-- if (qual[i] >= 15) score += qual[i];
-+ if (qual[i] >= MD_MIN_QUALITY) score += qual[i];
- }
-
- return score;
-@@ -252,31 +256,34 @@
- }
-
- // currently, this function ONLY works if each read has one hit
--static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring)
-+static int bam_mating_core(samFile *in, samFile *out, int remove_reads, int proper_pair_check, int add_ct, int do_mate_scoring, char *arg_list, int no_pg)
- {
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- bam1_t *b[2] = { NULL, NULL };
-- int curr, has_prev, pre_end = 0, cur_end = 0, result;
-- kstring_t str;
-+ int curr, has_prev, result;
-+ hts_pos_t pre_end = 0, cur_end = 0;
-+ kstring_t str = KS_INITIALIZE;
-
-- str.l = str.m = 0; str.s = 0;
- header = sam_hdr_read(in);
- if (header == NULL) {
- fprintf(samtools_stderr, "[bam_mating_core] ERROR: Couldn't read header\n");
- return 1;
- }
-+
- // Accept unknown, unsorted, or queryname sort order, but error on coordinate sorted.
-- if ((header->l_text > 3) && (strncmp(header->text, "@HD", 3) == 0)) {
-- char *p, *q;
-- p = strstr(header->text, "\tSO:coordinate");
-- q = strchr(header->text, '\n');
-- // Looking for SO:coordinate within the @HD line only
-- // (e.g. must ignore in a @CO comment line later in header)
-- if ((p != 0) && (p < q)) {
-- fprintf(samtools_stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n");
-- goto fail;
-- }
-+ if (!sam_hdr_find_tag_hd(header, "SO", &str) && str.s && !strcmp(str.s, "coordinate")) {
-+ fprintf(samtools_stderr, "[bam_mating_core] ERROR: Coordinate sorted, require grouped/sorted by queryname.\n");
-+ goto fail;
- }
-+ ks_free(&str);
-+
-+ if (!no_pg && sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))
-+ goto fail;
-+
- if (sam_hdr_write(out, header) < 0) goto write_fail;
-
- b[0] = bam_init1();
-@@ -305,7 +312,7 @@
- cur_end = bam_endpos(cur);
-
- // Check cur_end isn't past the end of the contig we're on, if it is set the UNMAP'd flag
-- if (cur_end > (int)header->target_len[cur->core.tid]) cur->core.flag |= BAM_FUNMAP;
-+ if (cur_end > sam_hdr_tid2len(header, cur->core.tid)) cur->core.flag |= BAM_FUNMAP;
- }
- if (has_prev) { // do we have a pair of reads to examine?
- if (strcmp(bam_get_qname(cur), bam_get_qname(pre)) == 0) { // identical pair name
-@@ -316,7 +323,7 @@
- if (pre->core.tid == cur->core.tid && !(cur->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))
- && !(pre->core.flag&(BAM_FUNMAP|BAM_FMUNMAP))) // if safe set TLEN/ISIZE
- {
-- uint32_t cur5, pre5;
-+ hts_pos_t cur5, pre5;
- cur5 = (cur->core.flag&BAM_FREVERSE)? cur_end : cur->core.pos;
- pre5 = (pre->core.flag&BAM_FREVERSE)? pre_end : pre->core.pos;
- cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5;
-@@ -380,18 +387,19 @@
-
- if (sam_write1(out, header, pre) < 0) goto write_fail;
- }
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- bam_destroy1(b[0]);
- bam_destroy1(b[1]);
-- free(str.s);
-+ ks_free(&str);
- return 0;
-
- write_fail:
- print_error_errno("fixmate", "Couldn't write to output file");
- fail:
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- bam_destroy1(b[0]);
- bam_destroy1(b[1]);
-+ ks_free(&str);
- return 1;
- }
-
-@@ -403,9 +411,10 @@
- " -r Remove unmapped reads and secondary alignments\n"
- " -p Disable FR proper pair check\n"
- " -c Add template cigar ct tag\n"
--" -m Add mate score tag\n");
-+" -m Add mate score tag\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(where, "-.O..@");
-+ sam_global_opt_help(where, "-.O..@-.");
-
- fprintf(where,
- "\n"
-@@ -418,13 +427,15 @@
- {
- htsThreadPool p = {NULL, 0};
- samFile *in = NULL, *out = NULL;
-- int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0;
-+ int c, remove_reads = 0, proper_pair_check = 1, add_ct = 0, res = 1, mate_score = 0, no_pg = 0;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- char wmode[3] = {'w', 'b', 0};
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-+ char *arg_list = NULL;
-
- // parse args
- if (argc == 1) { usage(samtools_stdout); return 0; }
-@@ -434,6 +445,7 @@
- case 'p': proper_pair_check = 0; break;
- case 'c': add_ct = 1; break;
- case 'm': mate_score = 1; break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': usage(samtools_stderr); goto fail;
-@@ -441,6 +453,9 @@
- }
- if (optind+1 >= argc) { usage(samtools_stderr); goto fail; }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1)))
-+ goto fail;
-+
- // init
- if ((in = sam_open_format(argv[optind], "rb", &ga.in)) == NULL) {
- print_error_errno("fixmate", "cannot open input file");
-@@ -462,7 +477,7 @@
- }
-
- // run
-- res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score);
-+ res = bam_mating_core(in, out, remove_reads, proper_pair_check, add_ct, mate_score, arg_list, no_pg);
-
- // cleanup
- sam_close(in);
-@@ -472,6 +487,7 @@
- }
-
- if (p.pool) hts_tpool_destroy(p.pool);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return res;
-
-@@ -479,6 +495,7 @@
- if (in) sam_close(in);
- if (out) sam_close(out);
- if (p.pool) hts_tpool_destroy(p.pool);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return 1;
- }
---- python-pysam.orig/samtools/bam_md.c
-+++ python-pysam/samtools/bam_md.c
-@@ -1,6 +1,6 @@
- /* bam_md.c -- calmd subcommand.
-
-- Copyright (C) 2009-2011, 2014-2015 Genome Research Ltd.
-+ Copyright (C) 2009-2011, 2014-2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -46,12 +46,13 @@
-
- int bam_aux_drop_other(bam1_t *b, uint8_t *s);
-
--void bam_fillmd1_core(bam1_t *b, char *ref, int ref_len, int flag, int max_nm, int quiet_mode)
-+void bam_fillmd1_core(bam1_t *b, char *ref, hts_pos_t ref_len, int flag, int max_nm, int quiet_mode)
- {
- uint8_t *seq = bam_get_seq(b);
- uint32_t *cigar = bam_get_cigar(b);
- bam1_core_t *c = &b->core;
-- int i, x, y, u = 0;
-+ int i, y, u = 0;
-+ hts_pos_t x;
- kstring_t *str;
- int32_t old_nm_i = -1, nm = 0;
-
-@@ -67,7 +68,7 @@
- if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f;
- ++u;
- } else {
-- kputw(u, str); kputc(ref[x+j], str);
-+ kputw(u, str); kputc(toupper(ref[x+j]), str);
- u = 0; ++nm;
- }
- }
-@@ -77,7 +78,7 @@
- kputw(u, str); kputc('^', str);
- for (j = 0; j < l; ++j) {
- if (x+j >= ref_len || ref[x+j] == '\0') break;
-- kputc(ref[x+j], str);
-+ kputc(toupper(ref[x+j]), str);
- }
- u = 0;
- x += j; nm += j;
-@@ -176,25 +177,28 @@
- " -A modify the quality string\n"
- " -Q use quiet mode to output less debug info to stdout\n"
- " -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n"
--" -E extended BAQ for better sensitivity but lower specificity\n");
-+" -E extended BAQ for better sensitivity but lower specificity\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(stderr, "-....@");
-+ sam_global_opt_help(stderr, "-....@-.");
- return 1;
- }
-
- int bam_fillmd(int argc, char *argv[])
- {
-- int c, flt_flag, tid = -2, ret, len, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag, quiet_mode;
-+ int c, flt_flag, tid = -2, ret, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag, quiet_mode, no_pg = 0;
-+ hts_pos_t len;
- htsThreadPool p = {NULL, 0};
- samFile *fp = NULL, *fpout = NULL;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- faidx_t *fai = NULL;
-- char *ref = NULL, mode_w[8], *ref_file;
-+ char *ref = NULL, mode_w[8], *ref_file, *arg_list = NULL;
- bam1_t *b = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0,'@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -217,6 +221,7 @@
- case 'A': baq_flag |= 1; break;
- case 'E': baq_flag |= 2; break;
- case 'Q': quiet_mode = 1; break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c);
- /* else fall-through */
-@@ -234,8 +239,13 @@
- return 1;
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("calmd", "failed to create arg_list");
-+ return 1;
-+ }
-+
- header = sam_hdr_read(fp);
-- if (header == NULL || header->n_targets == 0) {
-+ if (header == NULL || sam_hdr_nref(header) == 0) {
- fprintf(stderr, "[bam_fillmd] input SAM does not have header. Abort!\n");
- goto fail;
- }
-@@ -245,6 +255,14 @@
- print_error_errno("calmd", "Failed to open output");
- goto fail;
- }
-+ if (!no_pg && sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("calmd", "failed to add PG line to header");
-+ goto fail;
-+ }
- if (sam_hdr_write(fpout, header) < 0) {
- print_error_errno("calmd", "Failed to write sam header");
- goto fail;
-@@ -276,11 +294,11 @@
- if (b->core.tid >= 0) {
- if (tid != b->core.tid) {
- free(ref);
-- ref = fai_fetch(fai, header->target_name[b->core.tid], &len);
-+ ref = fai_fetch64(fai, sam_hdr_tid2name(header, b->core.tid), &len);
- tid = b->core.tid;
- if (ref == 0) { // FIXME: Should this always be fatal?
- fprintf(stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n",
-- header->target_name[tid]);
-+ sam_hdr_tid2name(header, tid));
- if (is_realn || capQ > 10) goto fail; // Would otherwise crash
- }
- }
-@@ -301,8 +319,9 @@
- goto fail;
- }
- bam_destroy1(b);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
-
-+ free(arg_list);
- free(ref);
- fai_destroy(fai);
- sam_close(fp);
-@@ -315,9 +334,10 @@
- return 0;
-
- fail:
-+ free(arg_list);
- free(ref);
- if (b) bam_destroy1(b);
-- if (header) bam_hdr_destroy(header);
-+ if (header) sam_hdr_destroy(header);
- if (fai) fai_destroy(fai);
- if (fp) sam_close(fp);
- if (fpout) sam_close(fpout);
---- python-pysam.orig/samtools/bam_md.c.pysam.c
-+++ python-pysam/samtools/bam_md.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_md.c -- calmd subcommand.
-
-- Copyright (C) 2009-2011, 2014-2015 Genome Research Ltd.
-+ Copyright (C) 2009-2011, 2014-2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -48,12 +48,13 @@
-
- int bam_aux_drop_other(bam1_t *b, uint8_t *s);
-
--void bam_fillmd1_core(bam1_t *b, char *ref, int ref_len, int flag, int max_nm, int quiet_mode)
-+void bam_fillmd1_core(bam1_t *b, char *ref, hts_pos_t ref_len, int flag, int max_nm, int quiet_mode)
- {
- uint8_t *seq = bam_get_seq(b);
- uint32_t *cigar = bam_get_cigar(b);
- bam1_core_t *c = &b->core;
-- int i, x, y, u = 0;
-+ int i, y, u = 0;
-+ hts_pos_t x;
- kstring_t *str;
- int32_t old_nm_i = -1, nm = 0;
-
-@@ -69,7 +70,7 @@
- if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f;
- ++u;
- } else {
-- kputw(u, str); kputc(ref[x+j], str);
-+ kputw(u, str); kputc(toupper(ref[x+j]), str);
- u = 0; ++nm;
- }
- }
-@@ -79,7 +80,7 @@
- kputw(u, str); kputc('^', str);
- for (j = 0; j < l; ++j) {
- if (x+j >= ref_len || ref[x+j] == '\0') break;
-- kputc(ref[x+j], str);
-+ kputc(toupper(ref[x+j]), str);
- }
- u = 0;
- x += j; nm += j;
-@@ -178,25 +179,28 @@
- " -A modify the quality string\n"
- " -Q use quiet mode to output less debug info to samtools_stdout\n"
- " -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n"
--" -E extended BAQ for better sensitivity but lower specificity\n");
-+" -E extended BAQ for better sensitivity but lower specificity\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(samtools_stderr, "-....@");
-+ sam_global_opt_help(samtools_stderr, "-....@-.");
- return 1;
- }
-
- int bam_fillmd(int argc, char *argv[])
- {
-- int c, flt_flag, tid = -2, ret, len, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag, quiet_mode;
-+ int c, flt_flag, tid = -2, ret, is_bam_out, is_uncompressed, max_nm, is_realn, capQ, baq_flag, quiet_mode, no_pg = 0;
-+ hts_pos_t len;
- htsThreadPool p = {NULL, 0};
- samFile *fp = NULL, *fpout = NULL;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- faidx_t *fai = NULL;
-- char *ref = NULL, mode_w[8], *ref_file;
-+ char *ref = NULL, mode_w[8], *ref_file, *arg_list = NULL;
- bam1_t *b = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0,'@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -219,6 +223,7 @@
- case 'A': baq_flag |= 1; break;
- case 'E': baq_flag |= 2; break;
- case 'Q': quiet_mode = 1; break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- fprintf(samtools_stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c);
- /* else fall-through */
-@@ -236,8 +241,13 @@
- return 1;
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("calmd", "failed to create arg_list");
-+ return 1;
-+ }
-+
- header = sam_hdr_read(fp);
-- if (header == NULL || header->n_targets == 0) {
-+ if (header == NULL || sam_hdr_nref(header) == 0) {
- fprintf(samtools_stderr, "[bam_fillmd] input SAM does not have header. Abort!\n");
- goto fail;
- }
-@@ -247,6 +257,14 @@
- print_error_errno("calmd", "Failed to open output");
- goto fail;
- }
-+ if (!no_pg && sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("calmd", "failed to add PG line to header");
-+ goto fail;
-+ }
- if (sam_hdr_write(fpout, header) < 0) {
- print_error_errno("calmd", "Failed to write sam header");
- goto fail;
-@@ -278,11 +296,11 @@
- if (b->core.tid >= 0) {
- if (tid != b->core.tid) {
- free(ref);
-- ref = fai_fetch(fai, header->target_name[b->core.tid], &len);
-+ ref = fai_fetch64(fai, sam_hdr_tid2name(header, b->core.tid), &len);
- tid = b->core.tid;
- if (ref == 0) { // FIXME: Should this always be fatal?
- fprintf(samtools_stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n",
-- header->target_name[tid]);
-+ sam_hdr_tid2name(header, tid));
- if (is_realn || capQ > 10) goto fail; // Would otherwise crash
- }
- }
-@@ -303,8 +321,9 @@
- goto fail;
- }
- bam_destroy1(b);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
-
-+ free(arg_list);
- free(ref);
- fai_destroy(fai);
- sam_close(fp);
-@@ -317,9 +336,10 @@
- return 0;
-
- fail:
-+ free(arg_list);
- free(ref);
- if (b) bam_destroy1(b);
-- if (header) bam_hdr_destroy(header);
-+ if (header) sam_hdr_destroy(header);
- if (fai) fai_destroy(fai);
- if (fp) sam_close(fp);
- if (fpout) sam_close(fpout);
---- python-pysam.orig/samtools/bam_plbuf.c
-+++ python-pysam/samtools/bam_plbuf.c
-@@ -58,11 +58,12 @@
-
- int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf)
- {
-- int ret, n_plp, tid, pos;
-+ int ret, n_plp, tid;
-+ hts_pos_t pos;
- const bam_pileup1_t *plp;
- ret = bam_plp_push(buf->iter, b);
- if (ret < 0) return ret;
-- while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0)
-+ while ((plp = bam_plp64_next(buf->iter, &tid, &pos, &n_plp)) != 0)
- buf->func(tid, pos, n_plp, plp, buf->data);
- return 0;
- }
---- python-pysam.orig/samtools/bam_plbuf.c.pysam.c
-+++ python-pysam/samtools/bam_plbuf.c.pysam.c
-@@ -60,11 +60,12 @@
-
- int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf)
- {
-- int ret, n_plp, tid, pos;
-+ int ret, n_plp, tid;
-+ hts_pos_t pos;
- const bam_pileup1_t *plp;
- ret = bam_plp_push(buf->iter, b);
- if (ret < 0) return ret;
-- while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0)
-+ while ((plp = bam_plp64_next(buf->iter, &tid, &pos, &n_plp)) != 0)
- buf->func(tid, pos, n_plp, plp, buf->data);
- return 0;
- }
---- python-pysam.orig/samtools/bam_plbuf.h
-+++ python-pysam/samtools/bam_plbuf.h
-@@ -29,7 +29,7 @@
-
- #ifndef BAM_PILEUP_F_DEFINED
- #define BAM_PILEUP_F_DEFINED
--typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data);
-+typedef int (*bam_pileup_f)(uint32_t tid, hts_pos_t pos, int n, const bam_pileup1_t *pl, void *data);
- #endif //BAM_PILEUP_F_DEFINED
-
- typedef struct {
---- python-pysam.orig/samtools/bam_plcmd.c
-+++ python-pysam/samtools/bam_plcmd.c
-@@ -1,6 +1,6 @@
- /* bam_plcmd.c -- mpileup subcommand.
-
-- Copyright (C) 2008-2015 Genome Research Ltd.
-+ Copyright (C) 2008-2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -36,14 +36,19 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/sam.h>
- #include <htslib/faidx.h>
- #include <htslib/kstring.h>
-+#include <htslib/klist.h>
- #include <htslib/khash_str2int.h>
--#include "sam_header.h"
- #include "samtools.h"
-+#include "bedidx.h"
- #include "sam_opts.h"
-
-+#define dummy_free(p)
-+KLIST_INIT(auxlist, char *, dummy_free)
-+
- static inline int printw(int c, FILE *fp)
- {
- char buf[16];
-@@ -59,7 +64,9 @@
- return 0;
- }
-
--static inline void pileup_seq(FILE *fp, const bam_pileup1_t *p, int pos, int ref_len, const char *ref)
-+static inline int pileup_seq(FILE *fp, const bam_pileup1_t *p, hts_pos_t pos,
-+ hts_pos_t ref_len, const char *ref, kstring_t *ks,
-+ int rev_del)
- {
- int j;
- if (p->is_head) {
-@@ -79,21 +86,31 @@
- else c = bam_is_rev(p->b)? tolower(c) : toupper(c);
- }
- putc(c, fp);
-- } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : '*', fp);
-+ } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : ((bam_is_rev(p->b) && rev_del) ? '#' : '*'), fp);
-+ int del_len = -p->indel;
- if (p->indel > 0) {
-- putc('+', fp); printw(p->indel, fp);
-- for (j = 1; j <= p->indel; ++j) {
-- int c = seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos + j)];
-- putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp);
-+ int len = bam_plp_insertion(p, ks, &del_len);
-+ if (len < 0)
-+ return -1;
-+ putc('+', fp); printw(len, fp);
-+ if (bam_is_rev(p->b)) {
-+ char pad = rev_del ? '#' : '*';
-+ for (j = 0; j < len; j++)
-+ putc(ks->s[j] != '*' ? tolower(ks->s[j]) : pad, fp);
-+ } else {
-+ for (j = 0; j < len; j++)
-+ putc(toupper(ks->s[j]), fp);
- }
-- } else if (p->indel < 0) {
-- printw(p->indel, fp);
-- for (j = 1; j <= -p->indel; ++j) {
-+ }
-+ if (del_len > 0) {
-+ printw(-del_len, fp);
-+ for (j = 1; j <= del_len; ++j) {
- int c = (ref && (int)pos+j < ref_len)? ref[pos+j] : 'N';
- putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp);
- }
- }
- if (p->is_tail) putc('$', fp);
-+ return 0;
- }
-
- #include <assert.h>
-@@ -109,36 +126,43 @@
- #define MPLP_REDO_BAQ (1<<6)
- #define MPLP_ILLUMINA13 (1<<7)
- #define MPLP_IGNORE_RG (1<<8)
--#define MPLP_PRINT_POS (1<<9)
--#define MPLP_PRINT_MAPQ (1<<10)
-+#define MPLP_PRINT_QPOS (1<<9)
- #define MPLP_PER_SAMPLE (1<<11)
- #define MPLP_SMART_OVERLAPS (1<<12)
-+
- #define MPLP_PRINT_QNAME (1<<13)
-+#define MPLP_PRINT_FLAG (1<<14)
-+#define MPLP_PRINT_RNAME (1<<15)
-+#define MPLP_PRINT_POS (1<<16)
-+#define MPLP_PRINT_MAPQ (1<<17)
-+#define MPLP_PRINT_CIGAR (1<<18)
-+#define MPLP_PRINT_RNEXT (1<<19)
-+#define MPLP_PRINT_PNEXT (1<<20)
-+#define MPLP_PRINT_TLEN (1<<21)
-+#define MPLP_PRINT_SEQ (1<<22)
-+#define MPLP_PRINT_QUAL (1<<23)
-
- #define MPLP_MAX_DEPTH 8000
- #define MPLP_MAX_INDEL_DEPTH 250
-
--void *bed_read(const char *fn);
--void bed_destroy(void *_h);
--int bed_overlap(const void *_h, const char *chr, int beg, int end);
--
- typedef struct {
-- int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all;
-+ int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all, rev_del;
- int rflag_require, rflag_filter;
- int openQ, extQ, tandemQ, min_support; // for indels
- double min_frac; // for indels
- char *reg, *pl_list, *fai_fname, *output_fname;
- faidx_t *fai;
-- void *bed, *rghash;
-+ void *bed, *rghash, *auxlist;
- int argc;
- char **argv;
-+ char sep, empty;
- sam_global_args ga;
- } mplp_conf_t;
-
- typedef struct {
- char *ref[2];
- int ref_id[2];
-- int ref_len[2];
-+ hts_pos_t ref_len[2];
- } mplp_ref_t;
-
- #define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}}
-@@ -146,7 +170,7 @@
- typedef struct {
- samFile *fp;
- hts_itr_t *iter;
-- bam_hdr_t *h;
-+ sam_hdr_t *h;
- mplp_ref_t *ref;
- const mplp_conf_t *conf;
- } mplp_aux_t;
-@@ -157,7 +181,54 @@
- bam_pileup1_t **plp;
- } mplp_pileup_t;
-
--static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) {
-+static int build_auxlist(mplp_conf_t *conf, char *optstring) {
-+ if (!optstring)
-+ return 0;
-+
-+ void *colhash = khash_str2int_init();
-+ if (!colhash)
-+ return 1;
-+
-+ struct active_cols {
-+ char *name;
-+ int supported;
-+ };
-+
-+ const struct active_cols colnames[11] = {
-+ {"QNAME", 1}, {"FLAG", 1}, {"RNAME", 1}, {"POS", 1}, {"MAPQ", 1}, {"CIGAR", 0}, {"RNEXT", 1}, {"PNEXT", 1}, {"TLEN", 0}, {"SEQ", 0}, {"QUAL", 0}
-+ };
-+
-+ int i, f = MPLP_PRINT_QNAME, colno = 11;
-+ for (i = 0; i < colno; i++, f <<= 1)
-+ if (colnames[i].supported)
-+ khash_str2int_set(colhash, colnames[i].name, f);
-+
-+ conf->auxlist = kl_init(auxlist);
-+ if (!conf->auxlist)
-+ return 1;
-+
-+ char *save_p;
-+ char *tag = strtok_r(optstring, ",", &save_p);
-+ while (tag) {
-+ if (khash_str2int_get(colhash, tag, &f) == 0) {
-+ conf->flag |= f;
-+ } else {
-+ if (strlen(tag) != 2) {
-+ fprintf(stderr, "[%s] tag '%s' has more than two characters or not supported\n", __func__, tag);
-+ } else {
-+ char **tag_p = kl_pushp(auxlist, conf->auxlist);
-+ *tag_p = tag;
-+ }
-+ }
-+ tag = strtok_r(NULL, ",", &save_p);
-+ }
-+
-+ khash_str2int_destroy(colhash);
-+
-+ return 0;
-+}
-+
-+static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, hts_pos_t *ref_len) {
- mplp_ref_t *r = ma->ref;
-
- //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]);
-@@ -177,9 +248,10 @@
- }
- if (tid == r->ref_id[1]) {
- // Last, swap over
-- int tmp;
-- tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp;
-- tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp;
-+ int tmp_id;
-+ hts_pos_t tmp_len;
-+ tmp_id = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp_id;
-+ tmp_len = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp_len;
-
- char *tc;
- tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc;
-@@ -195,10 +267,10 @@
- r->ref_len[1] = r->ref_len[0];
-
- r->ref_id[0] = tid;
-- r->ref[0] = faidx_fetch_seq(ma->conf->fai,
-- ma->h->target_name[r->ref_id[0]],
-+ r->ref[0] = faidx_fetch_seq64(ma->conf->fai,
-+ sam_hdr_tid2name(ma->h, r->ref_id[0]),
- 0,
-- INT_MAX,
-+ HTS_POS_MAX,
- &r->ref_len[0]);
-
- if (!r->ref[0]) {
-@@ -216,15 +288,25 @@
-
- static void
- print_empty_pileup(FILE *fp, const mplp_conf_t *conf, const char *tname,
-- int pos, int n, const char *ref, int ref_len)
-+ hts_pos_t pos, int n, const char *ref, hts_pos_t ref_len)
- {
- int i;
-- fprintf(fp, "%s\t%d\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N');
-+ fprintf(fp, "%s\t%"PRIhts_pos"\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N');
- for (i = 0; i < n; ++i) {
- fputs("\t0\t*\t*", fp);
-- if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", fp);
-- if (conf->flag & MPLP_PRINT_POS) fputs("\t*", fp);
-- if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", fp);
-+ if (conf->flag & MPLP_PRINT_QPOS)
-+ fputs("\t*", fp);
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value)
-+ fputs("\t*", fp);
-+ flag_value <<= 1;
-+ }
-+ if (conf->auxlist) {
-+ int t = 0;
-+ while(t++ < ((klist_t(auxlist) *)conf->auxlist)->size)
-+ fputs("\t*", fp);
-+ }
- }
- putc('\n', fp);
- }
-@@ -233,7 +315,9 @@
- {
- char *ref;
- mplp_aux_t *ma = (mplp_aux_t*)data;
-- int ret, skip = 0, ref_len;
-+ int ret, skip = 0;
-+ hts_pos_t ref_len;
-+
- do {
- int has_ref;
- ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b);
-@@ -247,7 +331,7 @@
- if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) { skip = 1; continue; }
- if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) { skip = 1; continue; }
- if (ma->conf->bed && ma->conf->all == 0) { // test overlap
-- skip = !bed_overlap(ma->conf->bed, ma->h->target_name[b->core.tid], b->core.pos, bam_endpos(b));
-+ skip = !bed_overlap(ma->conf->bed, sam_hdr_tid2name(ma->h, b->core.tid), b->core.pos, bam_endpos(b));
- if (skip) continue;
- }
- if (ma->conf->rghash) { // exclude read groups
-@@ -265,8 +349,8 @@
- if (ma->conf->fai && b->core.tid >= 0) {
- has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len);
- if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence
-- fprintf(stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n",
-- __func__, b->core.pos, ref_len, b->core.tid);
-+ fprintf(stderr,"[%s] Skipping because %"PRIhts_pos" is outside of %"PRIhts_pos" [ref:%d]\n",
-+ __func__, (int64_t) b->core.pos, ref_len, b->core.tid);
- skip = 1;
- continue;
- }
-@@ -319,17 +403,19 @@
- * @param conf configuration for this pileup
- * @param n number of files specified in fn
- * @param fn filenames
-+ * @param fn_idx index filenames
- */
--static int mpileup(mplp_conf_t *conf, int n, char **fn)
-+static int mpileup(mplp_conf_t *conf, int n, char **fn, char **fn_idx)
- {
- extern void *bcf_call_add_rg(void *rghash, const char *hdtext, const char *list);
- extern void bcf_call_del_rghash(void *rghash);
- mplp_aux_t **data;
-- int i, tid, pos, *n_plp, beg0 = 0, end0 = INT_MAX, tid0 = 0, ref_len, max_depth, max_indel_depth;
-+ int i, tid, *n_plp, tid0 = 0, max_depth, max_indel_depth;
-+ hts_pos_t pos, beg0 = 0, end0 = HTS_POS_MAX, ref_len;
- const bam_pileup1_t **plp;
- mplp_ref_t mp_ref = MPLP_REF_INIT;
- bam_mplp_t iter;
-- bam_hdr_t *h = NULL; /* header of first file in input list */
-+ sam_hdr_t *h = NULL; /* header of first file in input list */
- char *ref;
- void *rghash = NULL;
- FILE *pileup_fp = NULL;
-@@ -359,7 +445,7 @@
-
- // read the header of each file in the list and initialize data
- for (i = 0; i < n; ++i) {
-- bam_hdr_t *h_tmp;
-+ sam_hdr_t *h_tmp;
- data[i] = calloc(1, sizeof(mplp_aux_t));
- data[i]->fp = sam_open_format(fn[i], "rb", &conf->ga.in);
- if ( !data[i]->fp )
-@@ -383,13 +469,20 @@
- fprintf(stderr,"[%s] fail to read the header of %s\n", __func__, fn[i]);
- exit(EXIT_FAILURE);
- }
-- bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : h_tmp->text);
-+ bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : sam_hdr_str(h_tmp));
- if (conf->flag & MPLP_BCF) {
- // Collect read group IDs with PL (platform) listed in pl_list (note: fragile, strstr search)
-- rghash = bcf_call_add_rg(rghash, h_tmp->text, conf->pl_list);
-+ rghash = bcf_call_add_rg(rghash, sam_hdr_str(h_tmp), conf->pl_list);
- }
- if (conf->reg) {
-- hts_idx_t *idx = sam_index_load(data[i]->fp, fn[i]);
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx != NULL) {
-+ idx = sam_index_load2(data[i]->fp, fn[i], fn_idx[i]);
-+ } else {
-+ idx = sam_index_load(data[i]->fp, fn[i]);
-+ }
-+
- if (idx == NULL) {
- fprintf(stderr, "[%s] fail to load index for %s\n", __func__, fn[i]);
- exit(EXIT_FAILURE);
-@@ -407,7 +500,7 @@
- if (i == 0) h = data[i]->h = h_tmp; // save the header of the first file
- else {
- // FIXME: check consistency between h and h_tmp
-- bam_hdr_destroy(h_tmp);
-+ sam_hdr_destroy(h_tmp);
-
- // we store only the first file's header; it's (alleged to be)
- // compatible with the i-th file's target_name lookup needs
-@@ -459,10 +552,10 @@
-
- // Translate BAM @SQ tags to BCF ##contig tags
- // todo: use/write new BAM header manipulation routines, fill also UR, M5
-- for (i=0; i<h->n_targets; i++)
-+ for (i=0; i < sam_hdr_nref(h); i++)
- {
- str.l = 0;
-- ksprintf(&str, "##contig=<ID=%s,length=%d>", h->target_name[i], h->target_len[i]);
-+ ksprintf(&str, "##contig=<ID=%s,length=%"PRId64">", sam_hdr_tid2name(h, i), (int64_t) sam_hdr_tid2len(h, i));
- bcf_hdr_append(bcf_hdr, str.s);
- }
- free(str.s);
-@@ -515,7 +608,11 @@
- for (i=0; i<sm->n; i++)
- bcf_hdr_add_sample(bcf_hdr, sm->smpl[i]);
- bcf_hdr_add_sample(bcf_hdr, NULL);
-- bcf_hdr_write(bcf_fp, bcf_hdr);
-+ if (bcf_hdr_write(bcf_fp, bcf_hdr) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF header to \"%s\"",
-+ conf->output_fname? conf->output_fname : "standard output");
-+ exit(EXIT_FAILURE);
-+ }
- // End of BCF header creation
-
- // Initialise the calling algorithm
-@@ -574,16 +671,17 @@
- bam_mplp_set_maxcnt(iter, max_depth);
- bcf1_t *bcf_rec = bcf_init1();
- int ret;
-- int last_tid = -1, last_pos = -1;
-+ int last_tid = -1;
-+ hts_pos_t last_pos = -1;
-
- // begin pileup
-- while ( (ret=bam_mplp_auto(iter, &tid, &pos, n_plp, plp)) > 0) {
-+ while ( (ret=bam_mplp64_auto(iter, &tid, &pos, n_plp, plp)) > 0) {
- if (conf->reg && (pos < beg0 || pos >= end0)) continue; // out of the region requested
- mplp_get_ref(data[0], tid, &ref, &ref_len);
- //printf("tid=%d len=%d ref=%p/%s\n", tid, ref_len, ref, ref);
- if (conf->flag & MPLP_BCF) {
- int total_depth, _ref0, ref16;
-- if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue;
-+ if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), pos, pos+1)) continue;
- for (i = total_depth = 0; i < n; ++i) total_depth += n_plp[i];
- group_smpl(&gplp, sm, &buf, n, fn, n_plp, plp, conf->flag & MPLP_IGNORE_RG);
- _ref0 = (ref && pos < ref_len)? ref[pos] : 'N';
-@@ -595,7 +693,11 @@
- bcf_call_combine(gplp.n, bcr, bca, ref16, &bc);
- bcf_clear1(bcf_rec);
- bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, 0, 0);
-- bcf_write1(bcf_fp, bcf_hdr, bcf_rec);
-+ if (bcf_write1(bcf_fp, bcf_hdr, bcf_rec) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF record to \"%s\"",
-+ conf->output_fname?conf->output_fname:"standard output");
-+ exit(EXIT_FAILURE);
-+ }
- // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring?
- if (!(conf->flag&MPLP_NO_INDEL) && total_depth < max_indel_depth && bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref, rghash) >= 0)
- {
-@@ -605,7 +707,11 @@
- if (bcf_call_combine(gplp.n, bcr, bca, -1, &bc) >= 0) {
- bcf_clear1(bcf_rec);
- bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, bca, ref);
-- bcf_write1(bcf_fp, bcf_hdr, bcf_rec);
-+ if (bcf_write1(bcf_fp, bcf_hdr, bcf_rec) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF record to \"%s\"",
-+ conf->output_fname?conf->output_fname:"standard output");
-+ exit(EXIT_FAILURE);
-+ }
- }
- }
- } else {
-@@ -613,10 +719,10 @@
- // Deal with missing portions of previous tids
- while (tid > last_tid) {
- if (last_tid >= 0 && !conf->reg) {
-- while (++last_pos < h->target_len[last_tid]) {
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, last_tid), last_pos, n, ref, ref_len);
- }
- }
- last_tid++;
-@@ -629,16 +735,16 @@
- // Deal with missing portion of current tid
- while (++last_pos < pos) {
- if (conf->reg && last_pos < beg0) continue; // out of range; skip
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[tid], last_pos, last_pos + 1) == 0)
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, tid), last_pos, n, ref, ref_len);
- }
- last_tid = tid;
- last_pos = pos;
- }
-- if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue;
-+ if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), pos, pos+1)) continue;
-
-- fprintf(pileup_fp, "%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N');
-+ fprintf(pileup_fp, "%s\t%"PRIhts_pos"\t%c", sam_hdr_tid2name(h, tid), pos + 1, (ref && pos < ref_len)? ref[pos] : 'N');
- for (i = 0; i < n; ++i) {
- int j, cnt;
- for (j = cnt = 0; j < n_plp[i]; ++j) {
-@@ -651,22 +757,40 @@
- fprintf(pileup_fp, "\t%d\t", cnt);
- if (n_plp[i] == 0) {
- fputs("*\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_POS) fputs("\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", pileup_fp);
-+ if (conf->flag & MPLP_PRINT_QPOS)
-+ fputs("\t*", pileup_fp);
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value)
-+ fputs("\t*", pileup_fp);
-+ flag_value <<= 1;
-+ }
-+ if (conf->auxlist) {
-+ int t = 0;
-+ while(t++ < ((klist_t(auxlist) *)conf->auxlist)->size)
-+ fputs("\t*", pileup_fp);
-+ }
- } else {
- int n = 0;
-+ kstring_t ks = KS_INITIALIZE;
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
- int c = p->qpos < p->b->core.l_qseq
- ? bam_get_qual(p->b)[p->qpos]
- : 0;
-- if (c >= conf->min_baseQ)
-- n++, pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref);
-+ if (c >= conf->min_baseQ) {
-+ n++;
-+ if (pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref, &ks, conf->rev_del) < 0) {
-+ ret = 1;
-+ goto fail;
-+ }
-+ }
- }
- if (!n) putc('*', pileup_fp);
-
-+ /* Print base qualities */
- n = 0;
-+ ks_free(&ks);
- putc('\t', pileup_fp);
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
-@@ -681,55 +805,124 @@
- }
- if (!n) putc('*', pileup_fp);
-
-- if (conf->flag & MPLP_PRINT_MAPQ) {
-+ /* Print mpileup positions */
-+ if (conf->flag & MPLP_PRINT_QPOS) {
- n = 0;
- putc('\t', pileup_fp);
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
- if ( c < conf->min_baseQ ) continue;
-- c = plp[i][j].b->core.qual + 33;
-- if (c > 126) c = 126;
-- putc(c, pileup_fp);
-+ if (n > 0) putc(',', pileup_fp);
- n++;
-+ fprintf(pileup_fp, "%d", p->qpos + 1);
- }
- if (!n) putc('*', pileup_fp);
- }
-
-- if (conf->flag & MPLP_PRINT_POS) {
-- n = 0;
-- putc('\t', pileup_fp);
-- for (j = 0; j < n_plp[i]; ++j) {
-- const bam_pileup1_t *p = plp[i] + j;
-- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-- if ( c < conf->min_baseQ ) continue;
--
-- if (n > 0) putc(',', pileup_fp);
-- fprintf(pileup_fp, "%d", plp[i][j].qpos + 1); // FIXME: printf() is very slow...
-- n++;
-+ /* Print selected columns */
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value) {
-+ n = 0;
-+ putc('\t', pileup_fp);
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = &plp[i][j];
-+ int c = p->qpos < p->b->core.l_qseq
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
-+ if ( c < conf->min_baseQ ) continue;
-+ if (n > 0 && flag_value != MPLP_PRINT_MAPQ) putc(',', pileup_fp);
-+ n++;
-+
-+ switch (flag_value) {
-+ case MPLP_PRINT_QNAME:
-+ fputs(bam_get_qname(p->b), pileup_fp);
-+ break;
-+ case MPLP_PRINT_FLAG:
-+ fprintf(pileup_fp, "%d", p->b->core.flag);
-+ break;
-+ case MPLP_PRINT_RNAME:
-+ if (p->b->core.tid >= 0)
-+ fputs(sam_hdr_tid2name(h, p->b->core.tid), pileup_fp);
-+ else
-+ putc('*', pileup_fp);
-+ break;
-+ case MPLP_PRINT_POS:
-+ fprintf(pileup_fp, "%"PRId64, (int64_t) p->b->core.pos + 1);
-+ break;
-+ case MPLP_PRINT_MAPQ:
-+ c = p->b->core.qual + 33;
-+ if (c > 126) c = 126;
-+ putc(c, pileup_fp);
-+ break;
-+ case MPLP_PRINT_RNEXT:
-+ if (p->b->core.mtid >= 0)
-+ fputs(sam_hdr_tid2name(h, p->b->core.mtid), pileup_fp);
-+ else
-+ putc('*', pileup_fp);
-+ break;
-+ case MPLP_PRINT_PNEXT:
-+ fprintf(pileup_fp, "%"PRId64, (int64_t) p->b->core.mpos + 1);
-+ break;
-+ }
-+ }
-+ if (!n) putc('*', pileup_fp);
- }
-- if (!n) putc('*', pileup_fp);
-+ flag_value <<= 1;
- }
-
-- if (conf->flag & MPLP_PRINT_QNAME) {
-- n = 0;
-- putc('\t', pileup_fp);
-- for (j = 0; j < n_plp[i]; ++j) {
-- const bam_pileup1_t *p = &plp[i][j];
-- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-- if ( c < conf->min_baseQ ) continue;
--
-- if (n > 0) putc(',', pileup_fp);
-- fputs(bam_get_qname(p->b), pileup_fp);
-- n++;
-+ /* Print selected tags */
-+ klist_t(auxlist) *auxlist_p = ((klist_t(auxlist) *)conf->auxlist);
-+ if (auxlist_p && auxlist_p->size) {
-+ kliter_t(auxlist) *aux;
-+ for (aux = kl_begin(auxlist_p); aux != kl_end(auxlist_p); aux = kl_next(aux)) {
-+ n = 0;
-+ putc('\t', pileup_fp);
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = &plp[i][j];
-+ int c = p->qpos < p->b->core.l_qseq
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
-+ if ( c < conf->min_baseQ ) continue;
-+
-+ if (n > 0) putc(conf->sep, pileup_fp);
-+ n++;
-+ uint8_t* tag_u = bam_aux_get(p->b, kl_val(aux));
-+ if (!tag_u) {
-+ putc(conf->empty , pileup_fp);
-+ continue;
-+ }
-+
-+ /* Tag value is string */
-+ if (*tag_u == 'Z' || *tag_u == 'H') {
-+ char *tag_s = bam_aux2Z(tag_u);
-+ if (!tag_s) continue;
-+ fputs(tag_s, pileup_fp);
-+ }
-+
-+ /* Tag value is integer */
-+ if (*tag_u == 'I' || *tag_u == 'i' || *tag_u == 'C' || *tag_u == 'c' || *tag_u == 'S' || *tag_u == 's') {
-+ int64_t tag_i = bam_aux2i(tag_u);
-+ fprintf(pileup_fp, "%" PRId64 "", tag_i);
-+ }
-+
-+ /* Tag value is float */
-+ if (*tag_u == 'd' || *tag_u == 'f') {
-+ double tag_f = bam_aux2f(tag_u);
-+ fprintf(pileup_fp, "%lf", tag_f);
-+ }
-+
-+ /* Tag value is character */
-+ if (*tag_u == 'A') {
-+ char tag_c = bam_aux2A(tag_u);
-+ putc(tag_c, pileup_fp);
-+ }
-+ }
-+ if (!n) putc('*', pileup_fp);
- }
-- if (!n) putc('*', pileup_fp);
- }
- }
- }
-@@ -744,12 +937,12 @@
- last_pos = beg0-1;
- mplp_get_ref(data[0], tid0, &ref, &ref_len);
- }
-- while (last_tid >= 0 && last_tid < h->n_targets) {
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (last_tid >= 0 && last_tid < sam_hdr_nref(h)) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- if (last_pos >= end0) break;
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, last_tid), last_pos, n, ref, ref_len);
- }
- last_tid++;
- last_pos = -1;
-@@ -758,6 +951,7 @@
- }
- }
-
-+fail:
- // clean up
- free(bc.tmp.s);
- bcf_destroy1(bcf_rec);
-@@ -779,7 +973,7 @@
- free(gplp.plp); free(gplp.n_plp); free(gplp.m_plp);
- bcf_call_del_rghash(rghash);
- bam_mplp_destroy(iter);
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
- for (i = 0; i < n; ++i) {
- sam_close(data[i]->fp);
- if (data[i]->iter) hts_itr_destroy(data[i]->iter);
-@@ -922,17 +1116,22 @@
- " [%s]\n", tmp_filter);
- fprintf(fp,
- " -x, --ignore-overlaps disable read-pair overlap detection\n"
-+" -X, --customized-index use customized index files\n" // -X flag for index filename
- "\n"
- "Output options:\n"
- " -o, --output FILE write output to FILE [standard output]\n"
- " -O, --output-BP output base positions on reads\n"
- " -s, --output-MQ output mapping quality\n"
- " --output-QNAME output read names\n"
-+" --output-extra STR output extra read fields and read tag values\n"
-+" --output-sep CHAR set the separator character for tag lists [,]\n"
-+" --output-empty CHAR set the no value character for tag lists [*]\n"
-+" --reverse-del use '#' character for deletions on the reverse strand\n"
- " -a output all positions (including zero depth)\n"
- " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n"
- "\n"
- "Generic options:\n");
-- sam_global_opt_help(fp, "-.--.-");
-+ sam_global_opt_help(fp, "-.--.--.");
-
- fprintf(fp, "\n"
- "Note that using \"samtools mpileup\" to generate BCF or VCF files is now\n"
-@@ -952,7 +1151,7 @@
- int c;
- const char *file_list = NULL;
- char **fn = NULL;
-- int nfiles = 0, use_orphan = 0;
-+ int nfiles = 0, use_orphan = 0, has_index_file = 0;
- mplp_conf_t mplp;
- memset(&mplp, 0, sizeof(mplp_conf_t));
- mplp.min_baseQ = 13;
-@@ -966,6 +1165,9 @@
- mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP;
- mplp.output_fname = NULL;
- mplp.all = 0;
-+ mplp.rev_del = 0;
-+ mplp.sep = ',';
-+ mplp.empty = '*';
- sam_global_args_init(&mplp.ga);
-
- static const struct option lopts[] =
-@@ -1020,9 +1222,15 @@
- {"per-sample-mF", no_argument, NULL, 'p'},
- {"per-sample-mf", no_argument, NULL, 'p'},
- {"platforms", required_argument, NULL, 'P'},
-+ {"customized-index", no_argument, NULL, 'X'},
-+ {"reverse-del", no_argument, NULL, 6},
-+ {"output-extra", required_argument, NULL, 7},
-+ {"output-sep", required_argument, NULL, 8},
-+ {"output-empty", required_argument, NULL, 9},
- {NULL, 0, NULL, 0}
- };
-- while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxt:a",lopts,NULL)) >= 0) {
-+
-+ while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxXt:a",lopts,NULL)) >= 0) {
- switch (c) {
- case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break;
- case 1 :
-@@ -1036,6 +1244,15 @@
- case 3 : mplp.output_fname = optarg; break;
- case 4 : mplp.openQ = atoi(optarg); break;
- case 5 : mplp.flag |= MPLP_PRINT_QNAME; break;
-+ case 6 : mplp.rev_del = 1; break;
-+ case 7 :
-+ if (build_auxlist(&mplp, optarg) != 0) {
-+ fprintf(stderr,"Could not build aux list using '%s'\n", optarg);
-+ return 1;
-+ }
-+ break;
-+ case 8: mplp.sep = optarg[0]; break;
-+ case 9: mplp.empty = optarg[0]; break;
- case 'f':
- mplp.fai = fai_load(optarg);
- if (mplp.fai == NULL) return 1;
-@@ -1056,6 +1273,7 @@
- case 'v': mplp.flag |= MPLP_BCF | MPLP_VCF; deprecated(c); break;
- case 'u': mplp.flag |= MPLP_NO_COMP | MPLP_BCF; deprecated(c); break;
- case 'B': mplp.flag &= ~MPLP_REALN; break;
-+ case 'X': has_index_file = 1; break;
- case 'D': mplp.fmt_flag |= B2B_FMT_DP; deprecated(c); break;
- case 'S': mplp.fmt_flag |= B2B_FMT_SP; deprecated(c); break;
- case 'V': mplp.fmt_flag |= B2B_FMT_DV; deprecated(c); break;
-@@ -1064,7 +1282,7 @@
- case '6': mplp.flag |= MPLP_ILLUMINA13; break;
- case 'R': mplp.flag |= MPLP_IGNORE_RG; break;
- case 's': mplp.flag |= MPLP_PRINT_MAPQ; break;
-- case 'O': mplp.flag |= MPLP_PRINT_POS; break;
-+ case 'O': mplp.flag |= MPLP_PRINT_QPOS; break;
- case 'C': mplp.capQ_thres = atoi(optarg); break;
- case 'q': mplp.min_mq = atoi(optarg); break;
- case 'Q': mplp.min_baseQ = atoi(optarg); break;
-@@ -1129,16 +1347,32 @@
- }
- int ret;
- if (file_list) {
-+ if (has_index_file) {
-+ fprintf(stderr,"Error: The -b option cannot be combined with -X\n"); // No customize index loc in file list mode
-+ return 1;
-+ }
- if ( read_file_list(file_list,&nfiles,&fn) ) return 1;
-- ret = mpileup(&mplp,nfiles,fn);
-+ ret = mpileup(&mplp,nfiles,fn,NULL);
- for (c=0; c<nfiles; c++) free(fn[c]);
- free(fn);
- }
-- else
-- ret = mpileup(&mplp, argc - optind, argv + optind);
-+ else {
-+ if (has_index_file) {
-+ if ((argc - optind)%2 !=0) { // Calculate # of input BAM files
-+ fprintf(stderr, "Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ nfiles = (argc - optind)/2;
-+ ret = mpileup(&mplp, nfiles, argv + optind, argv + nfiles + optind);
-+ } else {
-+ nfiles = argc - optind;
-+ ret = mpileup(&mplp, nfiles, argv + optind, NULL);
-+ }
-+ }
- if (mplp.rghash) khash_str2int_destroy_free(mplp.rghash);
- free(mplp.reg); free(mplp.pl_list);
- if (mplp.fai) fai_destroy(mplp.fai);
- if (mplp.bed) bed_destroy(mplp.bed);
-+ if (mplp.auxlist) kl_destroy(auxlist, (klist_t(auxlist) *)mplp.auxlist);
- return ret;
- }
---- python-pysam.orig/samtools/bam_plcmd.c.pysam.c
-+++ python-pysam/samtools/bam_plcmd.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_plcmd.c -- mpileup subcommand.
-
-- Copyright (C) 2008-2015 Genome Research Ltd.
-+ Copyright (C) 2008-2015, 2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -38,14 +38,19 @@
- #include <errno.h>
- #include <sys/stat.h>
- #include <getopt.h>
-+#include <inttypes.h>
- #include <htslib/sam.h>
- #include <htslib/faidx.h>
- #include <htslib/kstring.h>
-+#include <htslib/klist.h>
- #include <htslib/khash_str2int.h>
--#include "sam_header.h"
- #include "samtools.h"
-+#include "bedidx.h"
- #include "sam_opts.h"
-
-+#define dummy_free(p)
-+KLIST_INIT(auxlist, char *, dummy_free)
-+
- static inline int printw(int c, FILE *fp)
- {
- char buf[16];
-@@ -61,7 +66,9 @@
- return 0;
- }
-
--static inline void pileup_seq(FILE *fp, const bam_pileup1_t *p, int pos, int ref_len, const char *ref)
-+static inline int pileup_seq(FILE *fp, const bam_pileup1_t *p, hts_pos_t pos,
-+ hts_pos_t ref_len, const char *ref, kstring_t *ks,
-+ int rev_del)
- {
- int j;
- if (p->is_head) {
-@@ -81,21 +88,31 @@
- else c = bam_is_rev(p->b)? tolower(c) : toupper(c);
- }
- putc(c, fp);
-- } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : '*', fp);
-+ } else putc(p->is_refskip? (bam_is_rev(p->b)? '<' : '>') : ((bam_is_rev(p->b) && rev_del) ? '#' : '*'), fp);
-+ int del_len = -p->indel;
- if (p->indel > 0) {
-- putc('+', fp); printw(p->indel, fp);
-- for (j = 1; j <= p->indel; ++j) {
-- int c = seq_nt16_str[bam_seqi(bam_get_seq(p->b), p->qpos + j)];
-- putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp);
-+ int len = bam_plp_insertion(p, ks, &del_len);
-+ if (len < 0)
-+ return -1;
-+ putc('+', fp); printw(len, fp);
-+ if (bam_is_rev(p->b)) {
-+ char pad = rev_del ? '#' : '*';
-+ for (j = 0; j < len; j++)
-+ putc(ks->s[j] != '*' ? tolower(ks->s[j]) : pad, fp);
-+ } else {
-+ for (j = 0; j < len; j++)
-+ putc(toupper(ks->s[j]), fp);
- }
-- } else if (p->indel < 0) {
-- printw(p->indel, fp);
-- for (j = 1; j <= -p->indel; ++j) {
-+ }
-+ if (del_len > 0) {
-+ printw(-del_len, fp);
-+ for (j = 1; j <= del_len; ++j) {
- int c = (ref && (int)pos+j < ref_len)? ref[pos+j] : 'N';
- putc(bam_is_rev(p->b)? tolower(c) : toupper(c), fp);
- }
- }
- if (p->is_tail) putc('$', fp);
-+ return 0;
- }
-
- #include <assert.h>
-@@ -111,36 +128,43 @@
- #define MPLP_REDO_BAQ (1<<6)
- #define MPLP_ILLUMINA13 (1<<7)
- #define MPLP_IGNORE_RG (1<<8)
--#define MPLP_PRINT_POS (1<<9)
--#define MPLP_PRINT_MAPQ (1<<10)
-+#define MPLP_PRINT_QPOS (1<<9)
- #define MPLP_PER_SAMPLE (1<<11)
- #define MPLP_SMART_OVERLAPS (1<<12)
-+
- #define MPLP_PRINT_QNAME (1<<13)
-+#define MPLP_PRINT_FLAG (1<<14)
-+#define MPLP_PRINT_RNAME (1<<15)
-+#define MPLP_PRINT_POS (1<<16)
-+#define MPLP_PRINT_MAPQ (1<<17)
-+#define MPLP_PRINT_CIGAR (1<<18)
-+#define MPLP_PRINT_RNEXT (1<<19)
-+#define MPLP_PRINT_PNEXT (1<<20)
-+#define MPLP_PRINT_TLEN (1<<21)
-+#define MPLP_PRINT_SEQ (1<<22)
-+#define MPLP_PRINT_QUAL (1<<23)
-
- #define MPLP_MAX_DEPTH 8000
- #define MPLP_MAX_INDEL_DEPTH 250
-
--void *bed_read(const char *fn);
--void bed_destroy(void *_h);
--int bed_overlap(const void *_h, const char *chr, int beg, int end);
--
- typedef struct {
-- int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all;
-+ int min_mq, flag, min_baseQ, capQ_thres, max_depth, max_indel_depth, fmt_flag, all, rev_del;
- int rflag_require, rflag_filter;
- int openQ, extQ, tandemQ, min_support; // for indels
- double min_frac; // for indels
- char *reg, *pl_list, *fai_fname, *output_fname;
- faidx_t *fai;
-- void *bed, *rghash;
-+ void *bed, *rghash, *auxlist;
- int argc;
- char **argv;
-+ char sep, empty;
- sam_global_args ga;
- } mplp_conf_t;
-
- typedef struct {
- char *ref[2];
- int ref_id[2];
-- int ref_len[2];
-+ hts_pos_t ref_len[2];
- } mplp_ref_t;
-
- #define MPLP_REF_INIT {{NULL,NULL},{-1,-1},{0,0}}
-@@ -148,7 +172,7 @@
- typedef struct {
- samFile *fp;
- hts_itr_t *iter;
-- bam_hdr_t *h;
-+ sam_hdr_t *h;
- mplp_ref_t *ref;
- const mplp_conf_t *conf;
- } mplp_aux_t;
-@@ -159,7 +183,54 @@
- bam_pileup1_t **plp;
- } mplp_pileup_t;
-
--static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, int *ref_len) {
-+static int build_auxlist(mplp_conf_t *conf, char *optstring) {
-+ if (!optstring)
-+ return 0;
-+
-+ void *colhash = khash_str2int_init();
-+ if (!colhash)
-+ return 1;
-+
-+ struct active_cols {
-+ char *name;
-+ int supported;
-+ };
-+
-+ const struct active_cols colnames[11] = {
-+ {"QNAME", 1}, {"FLAG", 1}, {"RNAME", 1}, {"POS", 1}, {"MAPQ", 1}, {"CIGAR", 0}, {"RNEXT", 1}, {"PNEXT", 1}, {"TLEN", 0}, {"SEQ", 0}, {"QUAL", 0}
-+ };
-+
-+ int i, f = MPLP_PRINT_QNAME, colno = 11;
-+ for (i = 0; i < colno; i++, f <<= 1)
-+ if (colnames[i].supported)
-+ khash_str2int_set(colhash, colnames[i].name, f);
-+
-+ conf->auxlist = kl_init(auxlist);
-+ if (!conf->auxlist)
-+ return 1;
-+
-+ char *save_p;
-+ char *tag = strtok_r(optstring, ",", &save_p);
-+ while (tag) {
-+ if (khash_str2int_get(colhash, tag, &f) == 0) {
-+ conf->flag |= f;
-+ } else {
-+ if (strlen(tag) != 2) {
-+ fprintf(samtools_stderr, "[%s] tag '%s' has more than two characters or not supported\n", __func__, tag);
-+ } else {
-+ char **tag_p = kl_pushp(auxlist, conf->auxlist);
-+ *tag_p = tag;
-+ }
-+ }
-+ tag = strtok_r(NULL, ",", &save_p);
-+ }
-+
-+ khash_str2int_destroy(colhash);
-+
-+ return 0;
-+}
-+
-+static int mplp_get_ref(mplp_aux_t *ma, int tid, char **ref, hts_pos_t *ref_len) {
- mplp_ref_t *r = ma->ref;
-
- //printf("get ref %d {%d/%p, %d/%p}\n", tid, r->ref_id[0], r->ref[0], r->ref_id[1], r->ref[1]);
-@@ -179,9 +250,10 @@
- }
- if (tid == r->ref_id[1]) {
- // Last, swap over
-- int tmp;
-- tmp = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp;
-- tmp = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp;
-+ int tmp_id;
-+ hts_pos_t tmp_len;
-+ tmp_id = r->ref_id[0]; r->ref_id[0] = r->ref_id[1]; r->ref_id[1] = tmp_id;
-+ tmp_len = r->ref_len[0]; r->ref_len[0] = r->ref_len[1]; r->ref_len[1] = tmp_len;
-
- char *tc;
- tc = r->ref[0]; r->ref[0] = r->ref[1]; r->ref[1] = tc;
-@@ -197,10 +269,10 @@
- r->ref_len[1] = r->ref_len[0];
-
- r->ref_id[0] = tid;
-- r->ref[0] = faidx_fetch_seq(ma->conf->fai,
-- ma->h->target_name[r->ref_id[0]],
-+ r->ref[0] = faidx_fetch_seq64(ma->conf->fai,
-+ sam_hdr_tid2name(ma->h, r->ref_id[0]),
- 0,
-- INT_MAX,
-+ HTS_POS_MAX,
- &r->ref_len[0]);
-
- if (!r->ref[0]) {
-@@ -218,15 +290,25 @@
-
- static void
- print_empty_pileup(FILE *fp, const mplp_conf_t *conf, const char *tname,
-- int pos, int n, const char *ref, int ref_len)
-+ hts_pos_t pos, int n, const char *ref, hts_pos_t ref_len)
- {
- int i;
-- fprintf(fp, "%s\t%d\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N');
-+ fprintf(fp, "%s\t%"PRIhts_pos"\t%c", tname, pos+1, (ref && pos < ref_len)? ref[pos] : 'N');
- for (i = 0; i < n; ++i) {
- fputs("\t0\t*\t*", fp);
-- if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", fp);
-- if (conf->flag & MPLP_PRINT_POS) fputs("\t*", fp);
-- if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", fp);
-+ if (conf->flag & MPLP_PRINT_QPOS)
-+ fputs("\t*", fp);
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value)
-+ fputs("\t*", fp);
-+ flag_value <<= 1;
-+ }
-+ if (conf->auxlist) {
-+ int t = 0;
-+ while(t++ < ((klist_t(auxlist) *)conf->auxlist)->size)
-+ fputs("\t*", fp);
-+ }
- }
- putc('\n', fp);
- }
-@@ -235,7 +317,9 @@
- {
- char *ref;
- mplp_aux_t *ma = (mplp_aux_t*)data;
-- int ret, skip = 0, ref_len;
-+ int ret, skip = 0;
-+ hts_pos_t ref_len;
-+
- do {
- int has_ref;
- ret = ma->iter? sam_itr_next(ma->fp, ma->iter, b) : sam_read1(ma->fp, ma->h, b);
-@@ -249,7 +333,7 @@
- if (ma->conf->rflag_require && !(ma->conf->rflag_require&b->core.flag)) { skip = 1; continue; }
- if (ma->conf->rflag_filter && ma->conf->rflag_filter&b->core.flag) { skip = 1; continue; }
- if (ma->conf->bed && ma->conf->all == 0) { // test overlap
-- skip = !bed_overlap(ma->conf->bed, ma->h->target_name[b->core.tid], b->core.pos, bam_endpos(b));
-+ skip = !bed_overlap(ma->conf->bed, sam_hdr_tid2name(ma->h, b->core.tid), b->core.pos, bam_endpos(b));
- if (skip) continue;
- }
- if (ma->conf->rghash) { // exclude read groups
-@@ -267,8 +351,8 @@
- if (ma->conf->fai && b->core.tid >= 0) {
- has_ref = mplp_get_ref(ma, b->core.tid, &ref, &ref_len);
- if (has_ref && ref_len <= b->core.pos) { // exclude reads outside of the reference sequence
-- fprintf(samtools_stderr,"[%s] Skipping because %d is outside of %d [ref:%d]\n",
-- __func__, b->core.pos, ref_len, b->core.tid);
-+ fprintf(samtools_stderr,"[%s] Skipping because %"PRIhts_pos" is outside of %"PRIhts_pos" [ref:%d]\n",
-+ __func__, (int64_t) b->core.pos, ref_len, b->core.tid);
- skip = 1;
- continue;
- }
-@@ -321,17 +405,19 @@
- * @param conf configuration for this pileup
- * @param n number of files specified in fn
- * @param fn filenames
-+ * @param fn_idx index filenames
- */
--static int mpileup(mplp_conf_t *conf, int n, char **fn)
-+static int mpileup(mplp_conf_t *conf, int n, char **fn, char **fn_idx)
- {
- extern void *bcf_call_add_rg(void *rghash, const char *hdtext, const char *list);
- extern void bcf_call_del_rghash(void *rghash);
- mplp_aux_t **data;
-- int i, tid, pos, *n_plp, beg0 = 0, end0 = INT_MAX, tid0 = 0, ref_len, max_depth, max_indel_depth;
-+ int i, tid, *n_plp, tid0 = 0, max_depth, max_indel_depth;
-+ hts_pos_t pos, beg0 = 0, end0 = HTS_POS_MAX, ref_len;
- const bam_pileup1_t **plp;
- mplp_ref_t mp_ref = MPLP_REF_INIT;
- bam_mplp_t iter;
-- bam_hdr_t *h = NULL; /* header of first file in input list */
-+ sam_hdr_t *h = NULL; /* header of first file in input list */
- char *ref;
- void *rghash = NULL;
- FILE *pileup_fp = NULL;
-@@ -361,7 +447,7 @@
-
- // read the header of each file in the list and initialize data
- for (i = 0; i < n; ++i) {
-- bam_hdr_t *h_tmp;
-+ sam_hdr_t *h_tmp;
- data[i] = calloc(1, sizeof(mplp_aux_t));
- data[i]->fp = sam_open_format(fn[i], "rb", &conf->ga.in);
- if ( !data[i]->fp )
-@@ -385,13 +471,20 @@
- fprintf(samtools_stderr,"[%s] fail to read the header of %s\n", __func__, fn[i]);
- exit(EXIT_FAILURE);
- }
-- bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : h_tmp->text);
-+ bam_smpl_add(sm, fn[i], (conf->flag&MPLP_IGNORE_RG)? 0 : sam_hdr_str(h_tmp));
- if (conf->flag & MPLP_BCF) {
- // Collect read group IDs with PL (platform) listed in pl_list (note: fragile, strstr search)
-- rghash = bcf_call_add_rg(rghash, h_tmp->text, conf->pl_list);
-+ rghash = bcf_call_add_rg(rghash, sam_hdr_str(h_tmp), conf->pl_list);
- }
- if (conf->reg) {
-- hts_idx_t *idx = sam_index_load(data[i]->fp, fn[i]);
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx != NULL) {
-+ idx = sam_index_load2(data[i]->fp, fn[i], fn_idx[i]);
-+ } else {
-+ idx = sam_index_load(data[i]->fp, fn[i]);
-+ }
-+
- if (idx == NULL) {
- fprintf(samtools_stderr, "[%s] fail to load index for %s\n", __func__, fn[i]);
- exit(EXIT_FAILURE);
-@@ -409,7 +502,7 @@
- if (i == 0) h = data[i]->h = h_tmp; // save the header of the first file
- else {
- // FIXME: check consistency between h and h_tmp
-- bam_hdr_destroy(h_tmp);
-+ sam_hdr_destroy(h_tmp);
-
- // we store only the first file's header; it's (alleged to be)
- // compatible with the i-th file's target_name lookup needs
-@@ -461,10 +554,10 @@
-
- // Translate BAM @SQ tags to BCF ##contig tags
- // todo: use/write new BAM header manipulation routines, fill also UR, M5
-- for (i=0; i<h->n_targets; i++)
-+ for (i=0; i < sam_hdr_nref(h); i++)
- {
- str.l = 0;
-- ksprintf(&str, "##contig=<ID=%s,length=%d>", h->target_name[i], h->target_len[i]);
-+ ksprintf(&str, "##contig=<ID=%s,length=%"PRId64">", sam_hdr_tid2name(h, i), (int64_t) sam_hdr_tid2len(h, i));
- bcf_hdr_append(bcf_hdr, str.s);
- }
- free(str.s);
-@@ -517,7 +610,11 @@
- for (i=0; i<sm->n; i++)
- bcf_hdr_add_sample(bcf_hdr, sm->smpl[i]);
- bcf_hdr_add_sample(bcf_hdr, NULL);
-- bcf_hdr_write(bcf_fp, bcf_hdr);
-+ if (bcf_hdr_write(bcf_fp, bcf_hdr) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF header to \"%s\"",
-+ conf->output_fname? conf->output_fname : "standard output");
-+ exit(EXIT_FAILURE);
-+ }
- // End of BCF header creation
-
- // Initialise the calling algorithm
-@@ -576,16 +673,17 @@
- bam_mplp_set_maxcnt(iter, max_depth);
- bcf1_t *bcf_rec = bcf_init1();
- int ret;
-- int last_tid = -1, last_pos = -1;
-+ int last_tid = -1;
-+ hts_pos_t last_pos = -1;
-
- // begin pileup
-- while ( (ret=bam_mplp_auto(iter, &tid, &pos, n_plp, plp)) > 0) {
-+ while ( (ret=bam_mplp64_auto(iter, &tid, &pos, n_plp, plp)) > 0) {
- if (conf->reg && (pos < beg0 || pos >= end0)) continue; // out of the region requested
- mplp_get_ref(data[0], tid, &ref, &ref_len);
- //printf("tid=%d len=%d ref=%p/%s\n", tid, ref_len, ref, ref);
- if (conf->flag & MPLP_BCF) {
- int total_depth, _ref0, ref16;
-- if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue;
-+ if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), pos, pos+1)) continue;
- for (i = total_depth = 0; i < n; ++i) total_depth += n_plp[i];
- group_smpl(&gplp, sm, &buf, n, fn, n_plp, plp, conf->flag & MPLP_IGNORE_RG);
- _ref0 = (ref && pos < ref_len)? ref[pos] : 'N';
-@@ -597,7 +695,11 @@
- bcf_call_combine(gplp.n, bcr, bca, ref16, &bc);
- bcf_clear1(bcf_rec);
- bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, 0, 0);
-- bcf_write1(bcf_fp, bcf_hdr, bcf_rec);
-+ if (bcf_write1(bcf_fp, bcf_hdr, bcf_rec) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF record to \"%s\"",
-+ conf->output_fname?conf->output_fname:"standard output");
-+ exit(EXIT_FAILURE);
-+ }
- // call indels; todo: subsampling with total_depth>max_indel_depth instead of ignoring?
- if (!(conf->flag&MPLP_NO_INDEL) && total_depth < max_indel_depth && bcf_call_gap_prep(gplp.n, gplp.n_plp, gplp.plp, pos, bca, ref, rghash) >= 0)
- {
-@@ -607,7 +709,11 @@
- if (bcf_call_combine(gplp.n, bcr, bca, -1, &bc) >= 0) {
- bcf_clear1(bcf_rec);
- bcf_call2bcf(&bc, bcf_rec, bcr, conf->fmt_flag, bca, ref);
-- bcf_write1(bcf_fp, bcf_hdr, bcf_rec);
-+ if (bcf_write1(bcf_fp, bcf_hdr, bcf_rec) != 0) {
-+ print_error_errno("mpileup", "Failed to write VCF/BCF record to \"%s\"",
-+ conf->output_fname?conf->output_fname:"standard output");
-+ exit(EXIT_FAILURE);
-+ }
- }
- }
- } else {
-@@ -615,10 +721,10 @@
- // Deal with missing portions of previous tids
- while (tid > last_tid) {
- if (last_tid >= 0 && !conf->reg) {
-- while (++last_pos < h->target_len[last_tid]) {
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, last_tid), last_pos, n, ref, ref_len);
- }
- }
- last_tid++;
-@@ -631,16 +737,16 @@
- // Deal with missing portion of current tid
- while (++last_pos < pos) {
- if (conf->reg && last_pos < beg0) continue; // out of range; skip
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[tid], last_pos, last_pos + 1) == 0)
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, tid), last_pos, n, ref, ref_len);
- }
- last_tid = tid;
- last_pos = pos;
- }
-- if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, h->target_name[tid], pos, pos+1)) continue;
-+ if (conf->bed && tid >= 0 && !bed_overlap(conf->bed, sam_hdr_tid2name(h, tid), pos, pos+1)) continue;
-
-- fprintf(pileup_fp, "%s\t%d\t%c", h->target_name[tid], pos + 1, (ref && pos < ref_len)? ref[pos] : 'N');
-+ fprintf(pileup_fp, "%s\t%"PRIhts_pos"\t%c", sam_hdr_tid2name(h, tid), pos + 1, (ref && pos < ref_len)? ref[pos] : 'N');
- for (i = 0; i < n; ++i) {
- int j, cnt;
- for (j = cnt = 0; j < n_plp[i]; ++j) {
-@@ -653,22 +759,40 @@
- fprintf(pileup_fp, "\t%d\t", cnt);
- if (n_plp[i] == 0) {
- fputs("*\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_MAPQ) fputs("\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_POS) fputs("\t*", pileup_fp);
-- if (conf->flag & MPLP_PRINT_QNAME) fputs("\t*", pileup_fp);
-+ if (conf->flag & MPLP_PRINT_QPOS)
-+ fputs("\t*", pileup_fp);
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value)
-+ fputs("\t*", pileup_fp);
-+ flag_value <<= 1;
-+ }
-+ if (conf->auxlist) {
-+ int t = 0;
-+ while(t++ < ((klist_t(auxlist) *)conf->auxlist)->size)
-+ fputs("\t*", pileup_fp);
-+ }
- } else {
- int n = 0;
-+ kstring_t ks = KS_INITIALIZE;
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
- int c = p->qpos < p->b->core.l_qseq
- ? bam_get_qual(p->b)[p->qpos]
- : 0;
-- if (c >= conf->min_baseQ)
-- n++, pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref);
-+ if (c >= conf->min_baseQ) {
-+ n++;
-+ if (pileup_seq(pileup_fp, plp[i] + j, pos, ref_len, ref, &ks, conf->rev_del) < 0) {
-+ ret = 1;
-+ goto fail;
-+ }
-+ }
- }
- if (!n) putc('*', pileup_fp);
-
-+ /* Print base qualities */
- n = 0;
-+ ks_free(&ks);
- putc('\t', pileup_fp);
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
-@@ -683,55 +807,124 @@
- }
- if (!n) putc('*', pileup_fp);
-
-- if (conf->flag & MPLP_PRINT_MAPQ) {
-+ /* Print mpileup positions */
-+ if (conf->flag & MPLP_PRINT_QPOS) {
- n = 0;
- putc('\t', pileup_fp);
- for (j = 0; j < n_plp[i]; ++j) {
- const bam_pileup1_t *p = plp[i] + j;
- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
- if ( c < conf->min_baseQ ) continue;
-- c = plp[i][j].b->core.qual + 33;
-- if (c > 126) c = 126;
-- putc(c, pileup_fp);
-+ if (n > 0) putc(',', pileup_fp);
- n++;
-+ fprintf(pileup_fp, "%d", p->qpos + 1);
- }
- if (!n) putc('*', pileup_fp);
- }
-
-- if (conf->flag & MPLP_PRINT_POS) {
-- n = 0;
-- putc('\t', pileup_fp);
-- for (j = 0; j < n_plp[i]; ++j) {
-- const bam_pileup1_t *p = plp[i] + j;
-- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-- if ( c < conf->min_baseQ ) continue;
--
-- if (n > 0) putc(',', pileup_fp);
-- fprintf(pileup_fp, "%d", plp[i][j].qpos + 1); // FIXME: fprintf(samtools_stdout, ) is very slow...
-- n++;
-+ /* Print selected columns */
-+ int flag_value = MPLP_PRINT_QNAME;
-+ while(flag_value < MPLP_PRINT_QUAL + 1) {
-+ if (conf->flag & flag_value) {
-+ n = 0;
-+ putc('\t', pileup_fp);
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = &plp[i][j];
-+ int c = p->qpos < p->b->core.l_qseq
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
-+ if ( c < conf->min_baseQ ) continue;
-+ if (n > 0 && flag_value != MPLP_PRINT_MAPQ) putc(',', pileup_fp);
-+ n++;
-+
-+ switch (flag_value) {
-+ case MPLP_PRINT_QNAME:
-+ fputs(bam_get_qname(p->b), pileup_fp);
-+ break;
-+ case MPLP_PRINT_FLAG:
-+ fprintf(pileup_fp, "%d", p->b->core.flag);
-+ break;
-+ case MPLP_PRINT_RNAME:
-+ if (p->b->core.tid >= 0)
-+ fputs(sam_hdr_tid2name(h, p->b->core.tid), pileup_fp);
-+ else
-+ putc('*', pileup_fp);
-+ break;
-+ case MPLP_PRINT_POS:
-+ fprintf(pileup_fp, "%"PRId64, (int64_t) p->b->core.pos + 1);
-+ break;
-+ case MPLP_PRINT_MAPQ:
-+ c = p->b->core.qual + 33;
-+ if (c > 126) c = 126;
-+ putc(c, pileup_fp);
-+ break;
-+ case MPLP_PRINT_RNEXT:
-+ if (p->b->core.mtid >= 0)
-+ fputs(sam_hdr_tid2name(h, p->b->core.mtid), pileup_fp);
-+ else
-+ putc('*', pileup_fp);
-+ break;
-+ case MPLP_PRINT_PNEXT:
-+ fprintf(pileup_fp, "%"PRId64, (int64_t) p->b->core.mpos + 1);
-+ break;
-+ }
-+ }
-+ if (!n) putc('*', pileup_fp);
- }
-- if (!n) putc('*', pileup_fp);
-+ flag_value <<= 1;
- }
-
-- if (conf->flag & MPLP_PRINT_QNAME) {
-- n = 0;
-- putc('\t', pileup_fp);
-- for (j = 0; j < n_plp[i]; ++j) {
-- const bam_pileup1_t *p = &plp[i][j];
-- int c = p->qpos < p->b->core.l_qseq
-- ? bam_get_qual(p->b)[p->qpos]
-- : 0;
-- if ( c < conf->min_baseQ ) continue;
--
-- if (n > 0) putc(',', pileup_fp);
-- fputs(bam_get_qname(p->b), pileup_fp);
-- n++;
-+ /* Print selected tags */
-+ klist_t(auxlist) *auxlist_p = ((klist_t(auxlist) *)conf->auxlist);
-+ if (auxlist_p && auxlist_p->size) {
-+ kliter_t(auxlist) *aux;
-+ for (aux = kl_begin(auxlist_p); aux != kl_end(auxlist_p); aux = kl_next(aux)) {
-+ n = 0;
-+ putc('\t', pileup_fp);
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = &plp[i][j];
-+ int c = p->qpos < p->b->core.l_qseq
-+ ? bam_get_qual(p->b)[p->qpos]
-+ : 0;
-+ if ( c < conf->min_baseQ ) continue;
-+
-+ if (n > 0) putc(conf->sep, pileup_fp);
-+ n++;
-+ uint8_t* tag_u = bam_aux_get(p->b, kl_val(aux));
-+ if (!tag_u) {
-+ putc(conf->empty , pileup_fp);
-+ continue;
-+ }
-+
-+ /* Tag value is string */
-+ if (*tag_u == 'Z' || *tag_u == 'H') {
-+ char *tag_s = bam_aux2Z(tag_u);
-+ if (!tag_s) continue;
-+ fputs(tag_s, pileup_fp);
-+ }
-+
-+ /* Tag value is integer */
-+ if (*tag_u == 'I' || *tag_u == 'i' || *tag_u == 'C' || *tag_u == 'c' || *tag_u == 'S' || *tag_u == 's') {
-+ int64_t tag_i = bam_aux2i(tag_u);
-+ fprintf(pileup_fp, "%" PRId64 "", tag_i);
-+ }
-+
-+ /* Tag value is float */
-+ if (*tag_u == 'd' || *tag_u == 'f') {
-+ double tag_f = bam_aux2f(tag_u);
-+ fprintf(pileup_fp, "%lf", tag_f);
-+ }
-+
-+ /* Tag value is character */
-+ if (*tag_u == 'A') {
-+ char tag_c = bam_aux2A(tag_u);
-+ putc(tag_c, pileup_fp);
-+ }
-+ }
-+ if (!n) putc('*', pileup_fp);
- }
-- if (!n) putc('*', pileup_fp);
- }
- }
- }
-@@ -746,12 +939,12 @@
- last_pos = beg0-1;
- mplp_get_ref(data[0], tid0, &ref, &ref_len);
- }
-- while (last_tid >= 0 && last_tid < h->n_targets) {
-- while (++last_pos < h->target_len[last_tid]) {
-+ while (last_tid >= 0 && last_tid < sam_hdr_nref(h)) {
-+ while (++last_pos < sam_hdr_tid2len(h, last_tid)) {
- if (last_pos >= end0) break;
-- if (conf->bed && bed_overlap(conf->bed, h->target_name[last_tid], last_pos, last_pos + 1) == 0)
-+ if (conf->bed && bed_overlap(conf->bed, sam_hdr_tid2name(h, last_tid), last_pos, last_pos + 1) == 0)
- continue;
-- print_empty_pileup(pileup_fp, conf, h->target_name[last_tid], last_pos, n, ref, ref_len);
-+ print_empty_pileup(pileup_fp, conf, sam_hdr_tid2name(h, last_tid), last_pos, n, ref, ref_len);
- }
- last_tid++;
- last_pos = -1;
-@@ -760,6 +953,7 @@
- }
- }
-
-+fail:
- // clean up
- free(bc.tmp.s);
- bcf_destroy1(bcf_rec);
-@@ -781,7 +975,7 @@
- free(gplp.plp); free(gplp.n_plp); free(gplp.m_plp);
- bcf_call_del_rghash(rghash);
- bam_mplp_destroy(iter);
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
- for (i = 0; i < n; ++i) {
- sam_close(data[i]->fp);
- if (data[i]->iter) hts_itr_destroy(data[i]->iter);
-@@ -924,17 +1118,22 @@
- " [%s]\n", tmp_filter);
- fprintf(fp,
- " -x, --ignore-overlaps disable read-pair overlap detection\n"
-+" -X, --customized-index use customized index files\n" // -X flag for index filename
- "\n"
- "Output options:\n"
- " -o, --output FILE write output to FILE [standard output]\n"
- " -O, --output-BP output base positions on reads\n"
- " -s, --output-MQ output mapping quality\n"
- " --output-QNAME output read names\n"
-+" --output-extra STR output extra read fields and read tag values\n"
-+" --output-sep CHAR set the separator character for tag lists [,]\n"
-+" --output-empty CHAR set the no value character for tag lists [*]\n"
-+" --reverse-del use '#' character for deletions on the reverse strand\n"
- " -a output all positions (including zero depth)\n"
- " -a -a (or -aa) output absolutely all positions, including unused ref. sequences\n"
- "\n"
- "Generic options:\n");
-- sam_global_opt_help(fp, "-.--.-");
-+ sam_global_opt_help(fp, "-.--.--.");
-
- fprintf(fp, "\n"
- "Note that using \"samtools mpileup\" to generate BCF or VCF files is now\n"
-@@ -954,7 +1153,7 @@
- int c;
- const char *file_list = NULL;
- char **fn = NULL;
-- int nfiles = 0, use_orphan = 0;
-+ int nfiles = 0, use_orphan = 0, has_index_file = 0;
- mplp_conf_t mplp;
- memset(&mplp, 0, sizeof(mplp_conf_t));
- mplp.min_baseQ = 13;
-@@ -968,6 +1167,9 @@
- mplp.rflag_filter = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP;
- mplp.output_fname = NULL;
- mplp.all = 0;
-+ mplp.rev_del = 0;
-+ mplp.sep = ',';
-+ mplp.empty = '*';
- sam_global_args_init(&mplp.ga);
-
- static const struct option lopts[] =
-@@ -1022,9 +1224,15 @@
- {"per-sample-mF", no_argument, NULL, 'p'},
- {"per-sample-mf", no_argument, NULL, 'p'},
- {"platforms", required_argument, NULL, 'P'},
-+ {"customized-index", no_argument, NULL, 'X'},
-+ {"reverse-del", no_argument, NULL, 6},
-+ {"output-extra", required_argument, NULL, 7},
-+ {"output-sep", required_argument, NULL, 8},
-+ {"output-empty", required_argument, NULL, 9},
- {NULL, 0, NULL, 0}
- };
-- while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxt:a",lopts,NULL)) >= 0) {
-+
-+ while ((c = getopt_long(argc, argv, "Agf:r:l:q:Q:uRC:BDSd:L:b:P:po:e:h:Im:F:EG:6OsVvxXt:a",lopts,NULL)) >= 0) {
- switch (c) {
- case 'x': mplp.flag &= ~MPLP_SMART_OVERLAPS; break;
- case 1 :
-@@ -1038,6 +1246,15 @@
- case 3 : mplp.output_fname = optarg; break;
- case 4 : mplp.openQ = atoi(optarg); break;
- case 5 : mplp.flag |= MPLP_PRINT_QNAME; break;
-+ case 6 : mplp.rev_del = 1; break;
-+ case 7 :
-+ if (build_auxlist(&mplp, optarg) != 0) {
-+ fprintf(samtools_stderr,"Could not build aux list using '%s'\n", optarg);
-+ return 1;
-+ }
-+ break;
-+ case 8: mplp.sep = optarg[0]; break;
-+ case 9: mplp.empty = optarg[0]; break;
- case 'f':
- mplp.fai = fai_load(optarg);
- if (mplp.fai == NULL) return 1;
-@@ -1058,6 +1275,7 @@
- case 'v': mplp.flag |= MPLP_BCF | MPLP_VCF; deprecated(c); break;
- case 'u': mplp.flag |= MPLP_NO_COMP | MPLP_BCF; deprecated(c); break;
- case 'B': mplp.flag &= ~MPLP_REALN; break;
-+ case 'X': has_index_file = 1; break;
- case 'D': mplp.fmt_flag |= B2B_FMT_DP; deprecated(c); break;
- case 'S': mplp.fmt_flag |= B2B_FMT_SP; deprecated(c); break;
- case 'V': mplp.fmt_flag |= B2B_FMT_DV; deprecated(c); break;
-@@ -1066,7 +1284,7 @@
- case '6': mplp.flag |= MPLP_ILLUMINA13; break;
- case 'R': mplp.flag |= MPLP_IGNORE_RG; break;
- case 's': mplp.flag |= MPLP_PRINT_MAPQ; break;
-- case 'O': mplp.flag |= MPLP_PRINT_POS; break;
-+ case 'O': mplp.flag |= MPLP_PRINT_QPOS; break;
- case 'C': mplp.capQ_thres = atoi(optarg); break;
- case 'q': mplp.min_mq = atoi(optarg); break;
- case 'Q': mplp.min_baseQ = atoi(optarg); break;
-@@ -1131,16 +1349,32 @@
- }
- int ret;
- if (file_list) {
-+ if (has_index_file) {
-+ fprintf(samtools_stderr,"Error: The -b option cannot be combined with -X\n"); // No customize index loc in file list mode
-+ return 1;
-+ }
- if ( read_file_list(file_list,&nfiles,&fn) ) return 1;
-- ret = mpileup(&mplp,nfiles,fn);
-+ ret = mpileup(&mplp,nfiles,fn,NULL);
- for (c=0; c<nfiles; c++) free(fn[c]);
- free(fn);
- }
-- else
-- ret = mpileup(&mplp, argc - optind, argv + optind);
-+ else {
-+ if (has_index_file) {
-+ if ((argc - optind)%2 !=0) { // Calculate # of input BAM files
-+ fprintf(samtools_stderr, "Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ nfiles = (argc - optind)/2;
-+ ret = mpileup(&mplp, nfiles, argv + optind, argv + nfiles + optind);
-+ } else {
-+ nfiles = argc - optind;
-+ ret = mpileup(&mplp, nfiles, argv + optind, NULL);
-+ }
-+ }
- if (mplp.rghash) khash_str2int_destroy_free(mplp.rghash);
- free(mplp.reg); free(mplp.pl_list);
- if (mplp.fai) fai_destroy(mplp.fai);
- if (mplp.bed) bed_destroy(mplp.bed);
-+ if (mplp.auxlist) kl_destroy(auxlist, (klist_t(auxlist) *)mplp.auxlist);
- return ret;
- }
---- python-pysam.orig/samtools/bam_quickcheck.c
-+++ python-pysam/samtools/bam_quickcheck.c
-@@ -1,6 +1,6 @@
- /* bam_quickcheck.c -- quickcheck subcommand.
-
-- Copyright (C) 2015 Genome Research Ltd.
-+ Copyright (C) 2015-2017 Genome Research Ltd.
-
- Author: Joshua C. Randall <jcrandall@alum.mit.edu>
-
-@@ -46,6 +46,7 @@
- "Options:\n"
- " -v verbose output (repeat for more verbosity)\n"
- " -q suppress warning messages\n"
-+" -u unmapped input (do not require targets in header)\n"
- "\n"
- "Notes:\n"
- "\n"
-@@ -77,13 +78,16 @@
-
- int main_quickcheck(int argc, char** argv)
- {
-- int verbose = 0, quiet = 0;
-+ int verbose = 0, quiet = 0, unmapped = 0;
- hts_verbose = 0;
-
-- const char* optstring = "vq";
-+ const char* optstring = "vqu";
- int opt;
- while ((opt = getopt(argc, argv, optstring)) != -1) {
- switch (opt) {
-+ case 'u':
-+ unmapped = 1;
-+ break;
- case 'v':
- verbose++;
- break;
-@@ -136,17 +140,17 @@
- else {
- if (verbose >= 3) fprintf(stderr, "%s is sequence data\n", fn);
- // check header
-- bam_hdr_t *header = sam_hdr_read(hts_fp);
-+ sam_hdr_t *header = sam_hdr_read(hts_fp);
- if (header == NULL) {
- QC_ERR(QC_BAD_HEADER, 2, "%s caused an error whilst reading its header.\n", fn);
- } else {
-- if (header->n_targets <= 0) {
-+ if (!unmapped && sam_hdr_nref(header) <= 0) {
- QC_ERR(QC_BAD_HEADER, 2, "%s had no targets in header.\n", fn);
- }
- else {
-- if (verbose >= 3) fprintf(stderr, "%s has %d targets in header.\n", fn, header->n_targets);
-+ if (verbose >= 3) fprintf(stderr, "%s has %d targets in header.\n", fn, sam_hdr_nref(header));
- }
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- }
- }
- // check EOF on formats that support this
---- python-pysam.orig/samtools/bam_quickcheck.c.pysam.c
-+++ python-pysam/samtools/bam_quickcheck.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_quickcheck.c -- quickcheck subcommand.
-
-- Copyright (C) 2015 Genome Research Ltd.
-+ Copyright (C) 2015-2017 Genome Research Ltd.
-
- Author: Joshua C. Randall <jcrandall@alum.mit.edu>
-
-@@ -48,6 +48,7 @@
- "Options:\n"
- " -v verbose output (repeat for more verbosity)\n"
- " -q suppress warning messages\n"
-+" -u unmapped input (do not require targets in header)\n"
- "\n"
- "Notes:\n"
- "\n"
-@@ -79,13 +80,16 @@
-
- int main_quickcheck(int argc, char** argv)
- {
-- int verbose = 0, quiet = 0;
-+ int verbose = 0, quiet = 0, unmapped = 0;
- hts_verbose = 0;
-
-- const char* optstring = "vq";
-+ const char* optstring = "vqu";
- int opt;
- while ((opt = getopt(argc, argv, optstring)) != -1) {
- switch (opt) {
-+ case 'u':
-+ unmapped = 1;
-+ break;
- case 'v':
- verbose++;
- break;
-@@ -138,17 +142,17 @@
- else {
- if (verbose >= 3) fprintf(samtools_stderr, "%s is sequence data\n", fn);
- // check header
-- bam_hdr_t *header = sam_hdr_read(hts_fp);
-+ sam_hdr_t *header = sam_hdr_read(hts_fp);
- if (header == NULL) {
- QC_ERR(QC_BAD_HEADER, 2, "%s caused an error whilst reading its header.\n", fn);
- } else {
-- if (header->n_targets <= 0) {
-+ if (!unmapped && sam_hdr_nref(header) <= 0) {
- QC_ERR(QC_BAD_HEADER, 2, "%s had no targets in header.\n", fn);
- }
- else {
-- if (verbose >= 3) fprintf(samtools_stderr, "%s has %d targets in header.\n", fn, header->n_targets);
-+ if (verbose >= 3) fprintf(samtools_stderr, "%s has %d targets in header.\n", fn, sam_hdr_nref(header));
- }
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- }
- }
- // check EOF on formats that support this
---- python-pysam.orig/samtools/bam_reheader.c
-+++ python-pysam/samtools/bam_reheader.c
-@@ -1,7 +1,7 @@
- /* bam_reheader.c -- reheader subcommand.
-
- Copyright (C) 2010 Broad Institute.
-- Copyright (C) 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -29,6 +29,7 @@
- #include <stdlib.h>
- #include <assert.h>
- #include <getopt.h>
-+#include <unistd.h>
-
- #include "htslib/bgzf.h"
- #include "htslib/sam.h"
-@@ -42,50 +43,44 @@
- * Reads a file and outputs a new BAM file to fd with 'h' replaced as
- * the header. No checks are made to the validity.
- */
--int bam_reheader(BGZF *in, bam_hdr_t *h, int fd,
-- const char *arg_list, int add_PG)
-+int bam_reheader(BGZF *in, sam_hdr_t *h, int fd,
-+ const char *arg_list, int no_pg, int skip_header)
- {
- BGZF *fp = NULL;
- ssize_t len;
- uint8_t *buf = NULL;
-- SAM_hdr *sh = NULL;
-+ sam_hdr_t *tmp;
-+ if (!h)
-+ return -1;
-+
- if (in->is_write) return -1;
- buf = malloc(BUF_SIZE);
- if (!buf) {
- fprintf(stderr, "Out of memory\n");
- return -1;
- }
-- if (bam_hdr_read(in) == NULL) {
-- fprintf(stderr, "Couldn't read header\n");
-- goto fail;
-+
-+ if (!skip_header) {
-+ if ((tmp = bam_hdr_read(in)) == NULL) {
-+ fprintf(stderr, "Couldn't read header\n");
-+ goto fail;
-+ }
-+ sam_hdr_destroy(tmp);
- }
-+
- fp = bgzf_fdopen(fd, "w");
- if (!fp) {
- print_error_errno("reheader", "Couldn't open output file");
- goto fail;
- }
-
-- if (add_PG) {
-- // Around the houses, but it'll do until we can manipulate bam_hdr_t natively.
-- sh = sam_hdr_parse_(h->text, h->l_text);
-- if (!sh)
-- goto fail;
-- if (sam_hdr_add_PG(sh, "samtools",
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
- "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL) != 0)
- goto fail;
-
-- free(h->text);
-- h->text = strdup(sam_hdr_str(sh));
-- h->l_text = sam_hdr_length(sh);
-- if (!h->text)
-- goto fail;
-- sam_hdr_free(sh);
-- sh = NULL;
-- }
--
- if (bam_hdr_write(fp, h) < 0) {
- print_error_errno("reheader", "Couldn't write header");
- goto fail;
-@@ -114,7 +109,6 @@
- fail:
- bgzf_close(fp);
- free(buf);
-- sam_hdr_free(sh);
- return -1;
- }
-
-@@ -124,32 +118,28 @@
- *
- * FIXME: error checking
- */
--int cram_reheader(cram_fd *in, bam_hdr_t *h, const char *arg_list, int add_PG)
-+int cram_reheader(cram_fd *in, sam_hdr_t *h, const char *arg_list, int no_pg)
- {
- htsFile *h_out = hts_open("-", "wc");
- cram_fd *out = h_out->fp.cram;
- cram_container *c = NULL;
- int ret = -1;
-+ if (!h)
-+ return ret;
-
- // Attempt to fill out a cram->refs[] array from @SQ headers
-- cram_fd_set_header(out, sam_hdr_parse_(h->text, h->l_text));
-- if (add_PG) {
-- if (sam_hdr_add_PG(cram_fd_get_header(out), "samtools",
-+ sam_hdr_t *cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
-+ return -1;
-+ cram_fd_set_header(out, cram_h);
-+ if (!no_pg && sam_hdr_add_pg(cram_fd_get_header(out), "samtools",
- "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
-- NULL) != 0)
-+ NULL))
- goto err;
-
-- // Covert back to bam_hdr_t struct
-- free(h->text);
-- h->text = strdup(sam_hdr_str(cram_fd_get_header(out)));
-- h->l_text = sam_hdr_length(cram_fd_get_header(out));
-- if (!h->text)
-- goto err;
-- }
--
-- if (sam_hdr_write(h_out, h) != 0)
-+ if (sam_hdr_write(h_out, cram_h) != 0)
- goto err;
- cram_set_option(out, CRAM_OPT_REFERENCE, NULL);
-
-@@ -192,14 +182,16 @@
- * -1 on general failure;
- * -2 on failure due to insufficient size
- */
--int cram_reheader_inplace2(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace2(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- cram_container *c = NULL;
- cram_block *b = NULL;
-- SAM_hdr *hdr = NULL;
-+ sam_hdr_t *cram_h = NULL;
- off_t start;
- int ret = -1;
-+ if (!h)
-+ goto err;
-
- if (cram_major_vers(fd) < 2 ||
- cram_major_vers(fd) > 3) {
-@@ -208,16 +200,17 @@
- goto err;
- }
-
-- if (!(hdr = sam_hdr_parse_(h->text, h->l_text)))
-+ cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
- goto err;
-
-- if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(),
-+ if (!no_pg && sam_hdr_add_pg(cram_h, "samtools", "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL))
- goto err;
-
-- int header_len = sam_hdr_length(hdr);
-+ int header_len = sam_hdr_length(cram_h);
- /* Fix M5 strings? Maybe out of scope for this tool */
-
- // Load the existing header
-@@ -244,7 +237,7 @@
-
- cram_block_set_offset(b, 0); // rewind block
- int32_put_blk(b, header_len);
-- cram_block_append(b, sam_hdr_str(hdr), header_len);
-+ cram_block_append(b, (void *)sam_hdr_str(cram_h), header_len);
- // Zero the remaining block
- memset((char *)cram_block_get_data(b)+cram_block_get_offset(b), 0,
- cram_block_get_uncomp_size(b) - cram_block_get_offset(b));
-@@ -265,7 +258,7 @@
- err:
- if (c) cram_free_container(c);
- if (b) cram_free_block(b);
-- if (hdr) sam_hdr_free(hdr);
-+ if (cram_h) sam_hdr_destroy(cram_h);
-
- return ret;
- }
-@@ -286,16 +279,18 @@
- * -1 on general failure;
- * -2 on failure due to insufficient size
- */
--int cram_reheader_inplace3(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace3(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- cram_container *c = NULL;
- cram_block *b = NULL;
-- SAM_hdr *hdr = NULL;
-+ sam_hdr_t *cram_h = NULL;
- off_t start, sz, end;
- int container_sz, max_container_sz;
- char *buf = NULL;
- int ret = -1;
-+ if (!h)
-+ goto err;
-
- if (cram_major_vers(fd) < 2 ||
- cram_major_vers(fd) > 3) {
-@@ -304,16 +299,17 @@
- goto err;
- }
-
-- if (!(hdr = sam_hdr_parse_(h->text, h->l_text)))
-+ cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
- goto err;
-
-- if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(),
-+ if (!no_pg && sam_hdr_add_pg(cram_h, "samtools", "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL))
- goto err;
-
-- int header_len = sam_hdr_length(hdr);
-+ int header_len = sam_hdr_length(cram_h);
- /* Fix M5 strings? Maybe out of scope for this tool */
-
- // Find current size of SAM header block
-@@ -381,7 +377,7 @@
- // Version 3.0 supports compressed header
- b = cram_new_block(FILE_HEADER, 0);
- int32_put_blk(b, header_len);
-- cram_block_append(b, sam_hdr_str(hdr), header_len);
-+ cram_block_append(b, (void *)sam_hdr_str(cram_h), header_len);
- cram_block_update_size(b);
-
- cram_compress_block(fd, b, NULL, -1, -1);
-@@ -416,17 +412,17 @@
- if (c) cram_free_container(c);
- if (buf) free(buf);
- if (b) cram_free_block(b);
-- if (hdr) sam_hdr_free(hdr);
-+ if (cram_h) sam_hdr_destroy(cram_h);
-
- return ret;
- }
-
--int cram_reheader_inplace(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- switch (cram_major_vers(fd)) {
-- case 2: return cram_reheader_inplace2(fd, h, arg_list, add_PG);
-- case 3: return cram_reheader_inplace3(fd, h, arg_list, add_PG);
-+ case 2: return cram_reheader_inplace2(fd, h, arg_list, no_pg);
-+ case 3: return cram_reheader_inplace3(fd, h, arg_list, no_pg);
- default:
- fprintf(stderr, "[%s] unsupported CRAM version %d\n", __func__,
- cram_major_vers(fd));
-@@ -437,33 +433,124 @@
- static void usage(FILE *fp, int ret) {
- fprintf(fp,
- "Usage: samtools reheader [-P] in.header.sam in.bam > out.bam\n"
-- " or samtools reheader [-P] -i in.header.sam file.bam\n"
-+ " or samtools reheader [-P] -i in.header.sam file.cram\n"
-+ " or samtools reheader -c CMD in.bam\n"
-+ " or samtools reheader -c CMD in.cram\n"
- "\n"
- "Options:\n"
-- " -P, --no-PG Do not generate an @PG header line.\n"
-- " -i, --in-place Modify the bam/cram file directly.\n"
-- " (Defaults to outputting to stdout.)\n");
-+ " -P, --no-PG Do not generate a @PG header line.\n"
-+ " -i, --in-place Modify the CRAM file directly, if possible.\n"
-+ " (Defaults to outputting to stdout.)\n"
-+ " -c, --command CMD Pass the header in SAM format to external program CMD.\n");
- exit(ret);
- }
-
-+static sam_hdr_t* external_reheader(samFile* in, const char* external) {
-+ char *command = NULL;
-+ sam_hdr_t* h = NULL;
-+ sam_hdr_t* ih = sam_hdr_read(in);
-+ if (ih == NULL) {
-+ fprintf(stderr, "[%s] failed to read the header for '%s'.\n", __func__, in->fn);
-+ return NULL;
-+ }
-+ char tmp_fn[] = "reheaderXXXXXX";
-+ int tmp_fd = mkstemp(tmp_fn);
-+ if (tmp_fd < 0) {
-+ print_error_errno("reheader", "fail to open temp file '%s'", tmp_fn);
-+ return NULL;
-+ }
-+ hFILE* tmp_hf = hdopen(tmp_fd, "w");
-+ if (!tmp_hf) {
-+ fprintf(stderr, "[%s] failed to convert to hFILE.\n", __func__);
-+ goto cleanup;
-+ }
-+ samFile* tmp_sf = hts_hopen(tmp_hf, tmp_fn, "w");
-+ if (!tmp_sf) {
-+ fprintf(stderr, "[%s] failed to convert to samFile.\n", __func__);
-+ goto cleanup;
-+ }
-+ if (-1 == sam_hdr_write(tmp_sf, ih)) {
-+ fprintf(stderr, "[%s] failed to write the header to the temp file.\n", __func__);
-+ goto cleanup;
-+ }
-+ sam_close(tmp_sf);
-+ sam_hdr_destroy(ih);
-+ int comm_len = strlen(external) + strlen(tmp_fn) + 8;
-+ command = calloc(comm_len, 1);
-+ if (!command || snprintf(command, comm_len, "( %s ) < %s", external, tmp_fn) != comm_len - 1) {
-+ fprintf(stderr, "[%s] failed to create command string.\n", __func__);
-+ goto cleanup;
-+ }
-+ FILE* nh = popen(command, "r");
-+ if (!nh) {
-+ print_error_errno("reheader", "[%s] failed to run external command '%s'.\n", __func__, command);
-+ goto cleanup;
-+ }
-+
-+ int nh_fd = dup(fileno(nh));
-+ if (nh_fd < 0) {
-+ fprintf(stderr, "[%s] failed to get the file descriptor.\n", __func__);
-+ goto cleanup;
-+ }
-+ hFILE* nh_hf = hdopen(nh_fd, "r");
-+ if (!nh_hf) {
-+ fprintf(stderr, "[%s] failed to convert to hFILE.\n", __func__);
-+ goto cleanup;
-+ }
-+ samFile* nh_sf = hts_hopen(nh_hf, tmp_fn, "r");
-+ if (!nh_sf) {
-+ fprintf(stderr, "[%s] failed to convert to samFile.\n", __func__);
-+ goto cleanup;
-+ }
-+
-+ h = sam_hdr_read(nh_sf);
-+ sam_close(nh_sf);
-+ if (h == NULL) {
-+ fprintf(stderr, "[%s] failed to read the header from the temp file.\n", __func__);
-+ }
-+ int res = pclose(nh);
-+ if (res != 0) {
-+ if (res < 0) {
-+ print_error_errno("reheader",
-+ "Error on closing pipe from command '%s'.\n",
-+ command);
-+ } else {
-+ print_error("reheader",
-+ "Non-zero exit code returned by command '%s'\n",
-+ command);
-+ }
-+ if (h) sam_hdr_destroy(h);
-+ h = NULL;
-+ }
-+cleanup:
-+ free(command);
-+ if (unlink(tmp_fn) != 0) {
-+ print_error_errno("reheader", "failed to remove the temp file '%s'", tmp_fn);
-+ }
-+
-+ return h;
-+}
-+
- int main_reheader(int argc, char *argv[])
- {
-- int inplace = 0, r, add_PG = 1, c;
-- bam_hdr_t *h;
-+ int inplace = 0, r, no_pg = 0, c, skip_header = 0;
-+ sam_hdr_t *h;
- samFile *in;
-- char *arg_list = stringify_argv(argc+1, argv-1);
-+ char *arg_list = NULL, *external = NULL;
-
- static const struct option lopts[] = {
- {"help", no_argument, NULL, 'h'},
- {"in-place", no_argument, NULL, 'i'},
- {"no-PG", no_argument, NULL, 'P'},
-+ {"command", required_argument, NULL, 'c'},
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "hiP", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "hiPc:", lopts, NULL)) >= 0) {
- switch (c) {
-- case 'P': add_PG = 0; break;
-+ case 'P': no_pg = 1; break;
- case 'i': inplace = 1; break;
-+ case 'c': external = optarg; break;
- case 'h': usage(stdout, 0); break;
- default:
- fprintf(stderr, "Invalid option '%c'\n", c);
-@@ -471,10 +558,29 @@
- }
- }
-
-- if (argc - optind != 2)
-+ if ((argc - optind != 2 || external) && (argc - optind != 1 || !external))
- usage(stderr, 1);
-
-- { // read the header
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("reheader", "failed to create arg_list");
-+ return 1;
-+ }
-+
-+ if (external) {
-+ skip_header = 1;
-+ in = sam_open(argv[optind], inplace?"r+":"r");
-+ if (in == 0) {
-+ print_error_errno("reheader", "fail to open file '%s'", argv[optind]);
-+ return 1;
-+ }
-+
-+ h = external_reheader(in, external);
-+ if (h == NULL) {
-+ fprintf(stderr, "[%s] failed to read the header from '%s'.\n", __func__, external);
-+ sam_close(in);
-+ return 1;
-+ }
-+ } else { // read the header from a separate file
- samFile *fph = sam_open(argv[optind], "r");
- if (fph == 0) {
- print_error_errno("reheader", "fail to read the header from '%s'", argv[optind]);
-@@ -487,25 +593,34 @@
- __func__, argv[1]);
- return 1;
- }
-+ in = sam_open(argv[optind+1], inplace?"r+":"r");
-+ if (in == 0) {
-+ print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]);
-+ return 1;
-+ }
- }
-- in = sam_open(argv[optind+1], inplace?"r+":"r");
-- if (in == 0) {
-- print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]);
-- return 1;
-- }
-+
- if (hts_get_format(in)->format == bam) {
-- r = bam_reheader(in->fp.bgzf, h, fileno(stdout), arg_list, add_PG);
-- } else {
-+ if (inplace) {
-+ print_error("reheader", "cannot reheader BAM '%s' in-place", argv[optind+1]);
-+ r = -1;
-+ } else {
-+ r = bam_reheader(in->fp.bgzf, h, fileno(stdout), arg_list, no_pg, skip_header);
-+ }
-+ } else if (hts_get_format(in)->format == cram) {
- if (inplace)
-- r = cram_reheader_inplace(in->fp.cram, h, arg_list, add_PG);
-+ r = cram_reheader_inplace(in->fp.cram, h, arg_list, no_pg);
- else
-- r = cram_reheader(in->fp.cram, h, arg_list, add_PG);
-+ r = cram_reheader(in->fp.cram, h, arg_list, no_pg);
-+ } else {
-+ print_error("reheader", "input file '%s' must be BAM or CRAM", argv[optind+1]);
-+ r = -1;
- }
-
- if (sam_close(in) != 0)
- r = -1;
-
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
-
- if (arg_list)
- free(arg_list);
---- python-pysam.orig/samtools/bam_reheader.c.pysam.c
-+++ python-pysam/samtools/bam_reheader.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bam_reheader.c -- reheader subcommand.
-
- Copyright (C) 2010 Broad Institute.
-- Copyright (C) 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -31,6 +31,7 @@
- #include <stdlib.h>
- #include <assert.h>
- #include <getopt.h>
-+#include <unistd.h>
-
- #include "htslib/bgzf.h"
- #include "htslib/sam.h"
-@@ -44,50 +45,44 @@
- * Reads a file and outputs a new BAM file to fd with 'h' replaced as
- * the header. No checks are made to the validity.
- */
--int bam_reheader(BGZF *in, bam_hdr_t *h, int fd,
-- const char *arg_list, int add_PG)
-+int bam_reheader(BGZF *in, sam_hdr_t *h, int fd,
-+ const char *arg_list, int no_pg, int skip_header)
- {
- BGZF *fp = NULL;
- ssize_t len;
- uint8_t *buf = NULL;
-- SAM_hdr *sh = NULL;
-+ sam_hdr_t *tmp;
-+ if (!h)
-+ return -1;
-+
- if (in->is_write) return -1;
- buf = malloc(BUF_SIZE);
- if (!buf) {
- fprintf(samtools_stderr, "Out of memory\n");
- return -1;
- }
-- if (bam_hdr_read(in) == NULL) {
-- fprintf(samtools_stderr, "Couldn't read header\n");
-- goto fail;
-+
-+ if (!skip_header) {
-+ if ((tmp = bam_hdr_read(in)) == NULL) {
-+ fprintf(samtools_stderr, "Couldn't read header\n");
-+ goto fail;
-+ }
-+ sam_hdr_destroy(tmp);
- }
-+
- fp = bgzf_fdopen(fd, "w");
- if (!fp) {
- print_error_errno("reheader", "Couldn't open output file");
- goto fail;
- }
-
-- if (add_PG) {
-- // Around the houses, but it'll do until we can manipulate bam_hdr_t natively.
-- sh = sam_hdr_parse_(h->text, h->l_text);
-- if (!sh)
-- goto fail;
-- if (sam_hdr_add_PG(sh, "samtools",
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
- "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL) != 0)
- goto fail;
-
-- free(h->text);
-- h->text = strdup(sam_hdr_str(sh));
-- h->l_text = sam_hdr_length(sh);
-- if (!h->text)
-- goto fail;
-- sam_hdr_free(sh);
-- sh = NULL;
-- }
--
- if (bam_hdr_write(fp, h) < 0) {
- print_error_errno("reheader", "Couldn't write header");
- goto fail;
-@@ -116,7 +111,6 @@
- fail:
- bgzf_close(fp);
- free(buf);
-- sam_hdr_free(sh);
- return -1;
- }
-
-@@ -126,32 +120,28 @@
- *
- * FIXME: error checking
- */
--int cram_reheader(cram_fd *in, bam_hdr_t *h, const char *arg_list, int add_PG)
-+int cram_reheader(cram_fd *in, sam_hdr_t *h, const char *arg_list, int no_pg)
- {
- htsFile *h_out = hts_open("-", "wc");
- cram_fd *out = h_out->fp.cram;
- cram_container *c = NULL;
- int ret = -1;
-+ if (!h)
-+ return ret;
-
- // Attempt to fill out a cram->refs[] array from @SQ headers
-- cram_fd_set_header(out, sam_hdr_parse_(h->text, h->l_text));
-- if (add_PG) {
-- if (sam_hdr_add_PG(cram_fd_get_header(out), "samtools",
-+ sam_hdr_t *cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
-+ return -1;
-+ cram_fd_set_header(out, cram_h);
-+ if (!no_pg && sam_hdr_add_pg(cram_fd_get_header(out), "samtools",
- "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
-- NULL) != 0)
-+ NULL))
- goto err;
-
-- // Covert back to bam_hdr_t struct
-- free(h->text);
-- h->text = strdup(sam_hdr_str(cram_fd_get_header(out)));
-- h->l_text = sam_hdr_length(cram_fd_get_header(out));
-- if (!h->text)
-- goto err;
-- }
--
-- if (sam_hdr_write(h_out, h) != 0)
-+ if (sam_hdr_write(h_out, cram_h) != 0)
- goto err;
- cram_set_option(out, CRAM_OPT_REFERENCE, NULL);
-
-@@ -194,14 +184,16 @@
- * -1 on general failure;
- * -2 on failure due to insufficient size
- */
--int cram_reheader_inplace2(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace2(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- cram_container *c = NULL;
- cram_block *b = NULL;
-- SAM_hdr *hdr = NULL;
-+ sam_hdr_t *cram_h = NULL;
- off_t start;
- int ret = -1;
-+ if (!h)
-+ goto err;
-
- if (cram_major_vers(fd) < 2 ||
- cram_major_vers(fd) > 3) {
-@@ -210,16 +202,17 @@
- goto err;
- }
-
-- if (!(hdr = sam_hdr_parse_(h->text, h->l_text)))
-+ cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
- goto err;
-
-- if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(),
-+ if (!no_pg && sam_hdr_add_pg(cram_h, "samtools", "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL))
- goto err;
-
-- int header_len = sam_hdr_length(hdr);
-+ int header_len = sam_hdr_length(cram_h);
- /* Fix M5 strings? Maybe out of scope for this tool */
-
- // Load the existing header
-@@ -246,7 +239,7 @@
-
- cram_block_set_offset(b, 0); // rewind block
- int32_put_blk(b, header_len);
-- cram_block_append(b, sam_hdr_str(hdr), header_len);
-+ cram_block_append(b, (void *)sam_hdr_str(cram_h), header_len);
- // Zero the remaining block
- memset((char *)cram_block_get_data(b)+cram_block_get_offset(b), 0,
- cram_block_get_uncomp_size(b) - cram_block_get_offset(b));
-@@ -267,7 +260,7 @@
- err:
- if (c) cram_free_container(c);
- if (b) cram_free_block(b);
-- if (hdr) sam_hdr_free(hdr);
-+ if (cram_h) sam_hdr_destroy(cram_h);
-
- return ret;
- }
-@@ -288,16 +281,18 @@
- * -1 on general failure;
- * -2 on failure due to insufficient size
- */
--int cram_reheader_inplace3(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace3(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- cram_container *c = NULL;
- cram_block *b = NULL;
-- SAM_hdr *hdr = NULL;
-+ sam_hdr_t *cram_h = NULL;
- off_t start, sz, end;
- int container_sz, max_container_sz;
- char *buf = NULL;
- int ret = -1;
-+ if (!h)
-+ goto err;
-
- if (cram_major_vers(fd) < 2 ||
- cram_major_vers(fd) > 3) {
-@@ -306,16 +301,17 @@
- goto err;
- }
-
-- if (!(hdr = sam_hdr_parse_(h->text, h->l_text)))
-+ cram_h = sam_hdr_dup(h);
-+ if (!cram_h)
- goto err;
-
-- if (add_PG && sam_hdr_add_PG(hdr, "samtools", "VN", samtools_version(),
-+ if (!no_pg && sam_hdr_add_pg(cram_h, "samtools", "VN", samtools_version(),
- arg_list ? "CL": NULL,
- arg_list ? arg_list : NULL,
- NULL))
- goto err;
-
-- int header_len = sam_hdr_length(hdr);
-+ int header_len = sam_hdr_length(cram_h);
- /* Fix M5 strings? Maybe out of scope for this tool */
-
- // Find current size of SAM header block
-@@ -383,7 +379,7 @@
- // Version 3.0 supports compressed header
- b = cram_new_block(FILE_HEADER, 0);
- int32_put_blk(b, header_len);
-- cram_block_append(b, sam_hdr_str(hdr), header_len);
-+ cram_block_append(b, (void *)sam_hdr_str(cram_h), header_len);
- cram_block_update_size(b);
-
- cram_compress_block(fd, b, NULL, -1, -1);
-@@ -418,17 +414,17 @@
- if (c) cram_free_container(c);
- if (buf) free(buf);
- if (b) cram_free_block(b);
-- if (hdr) sam_hdr_free(hdr);
-+ if (cram_h) sam_hdr_destroy(cram_h);
-
- return ret;
- }
-
--int cram_reheader_inplace(cram_fd *fd, const bam_hdr_t *h, const char *arg_list,
-- int add_PG)
-+int cram_reheader_inplace(cram_fd *fd, sam_hdr_t *h, const char *arg_list,
-+ int no_pg)
- {
- switch (cram_major_vers(fd)) {
-- case 2: return cram_reheader_inplace2(fd, h, arg_list, add_PG);
-- case 3: return cram_reheader_inplace3(fd, h, arg_list, add_PG);
-+ case 2: return cram_reheader_inplace2(fd, h, arg_list, no_pg);
-+ case 3: return cram_reheader_inplace3(fd, h, arg_list, no_pg);
- default:
- fprintf(samtools_stderr, "[%s] unsupported CRAM version %d\n", __func__,
- cram_major_vers(fd));
-@@ -439,33 +435,124 @@
- static void usage(FILE *fp, int ret) {
- fprintf(fp,
- "Usage: samtools reheader [-P] in.header.sam in.bam > out.bam\n"
-- " or samtools reheader [-P] -i in.header.sam file.bam\n"
-+ " or samtools reheader [-P] -i in.header.sam file.cram\n"
-+ " or samtools reheader -c CMD in.bam\n"
-+ " or samtools reheader -c CMD in.cram\n"
- "\n"
- "Options:\n"
-- " -P, --no-PG Do not generate an @PG header line.\n"
-- " -i, --in-place Modify the bam/cram file directly.\n"
-- " (Defaults to outputting to samtools_stdout.)\n");
-+ " -P, --no-PG Do not generate a @PG header line.\n"
-+ " -i, --in-place Modify the CRAM file directly, if possible.\n"
-+ " (Defaults to outputting to samtools_stdout.)\n"
-+ " -c, --command CMD Pass the header in SAM format to external program CMD.\n");
- exit(ret);
- }
-
-+static sam_hdr_t* external_reheader(samFile* in, const char* external) {
-+ char *command = NULL;
-+ sam_hdr_t* h = NULL;
-+ sam_hdr_t* ih = sam_hdr_read(in);
-+ if (ih == NULL) {
-+ fprintf(samtools_stderr, "[%s] failed to read the header for '%s'.\n", __func__, in->fn);
-+ return NULL;
-+ }
-+ char tmp_fn[] = "reheaderXXXXXX";
-+ int tmp_fd = mkstemp(tmp_fn);
-+ if (tmp_fd < 0) {
-+ print_error_errno("reheader", "fail to open temp file '%s'", tmp_fn);
-+ return NULL;
-+ }
-+ hFILE* tmp_hf = hdopen(tmp_fd, "w");
-+ if (!tmp_hf) {
-+ fprintf(samtools_stderr, "[%s] failed to convert to hFILE.\n", __func__);
-+ goto cleanup;
-+ }
-+ samFile* tmp_sf = hts_hopen(tmp_hf, tmp_fn, "w");
-+ if (!tmp_sf) {
-+ fprintf(samtools_stderr, "[%s] failed to convert to samFile.\n", __func__);
-+ goto cleanup;
-+ }
-+ if (-1 == sam_hdr_write(tmp_sf, ih)) {
-+ fprintf(samtools_stderr, "[%s] failed to write the header to the temp file.\n", __func__);
-+ goto cleanup;
-+ }
-+ sam_close(tmp_sf);
-+ sam_hdr_destroy(ih);
-+ int comm_len = strlen(external) + strlen(tmp_fn) + 8;
-+ command = calloc(comm_len, 1);
-+ if (!command || snprintf(command, comm_len, "( %s ) < %s", external, tmp_fn) != comm_len - 1) {
-+ fprintf(samtools_stderr, "[%s] failed to create command string.\n", __func__);
-+ goto cleanup;
-+ }
-+ FILE* nh = popen(command, "r");
-+ if (!nh) {
-+ print_error_errno("reheader", "[%s] failed to run external command '%s'.\n", __func__, command);
-+ goto cleanup;
-+ }
-+
-+ int nh_fd = dup(fileno(nh));
-+ if (nh_fd < 0) {
-+ fprintf(samtools_stderr, "[%s] failed to get the file descriptor.\n", __func__);
-+ goto cleanup;
-+ }
-+ hFILE* nh_hf = hdopen(nh_fd, "r");
-+ if (!nh_hf) {
-+ fprintf(samtools_stderr, "[%s] failed to convert to hFILE.\n", __func__);
-+ goto cleanup;
-+ }
-+ samFile* nh_sf = hts_hopen(nh_hf, tmp_fn, "r");
-+ if (!nh_sf) {
-+ fprintf(samtools_stderr, "[%s] failed to convert to samFile.\n", __func__);
-+ goto cleanup;
-+ }
-+
-+ h = sam_hdr_read(nh_sf);
-+ sam_close(nh_sf);
-+ if (h == NULL) {
-+ fprintf(samtools_stderr, "[%s] failed to read the header from the temp file.\n", __func__);
-+ }
-+ int res = pclose(nh);
-+ if (res != 0) {
-+ if (res < 0) {
-+ print_error_errno("reheader",
-+ "Error on closing pipe from command '%s'.\n",
-+ command);
-+ } else {
-+ print_error("reheader",
-+ "Non-zero exit code returned by command '%s'\n",
-+ command);
-+ }
-+ if (h) sam_hdr_destroy(h);
-+ h = NULL;
-+ }
-+cleanup:
-+ free(command);
-+ if (unlink(tmp_fn) != 0) {
-+ print_error_errno("reheader", "failed to remove the temp file '%s'", tmp_fn);
-+ }
-+
-+ return h;
-+}
-+
- int main_reheader(int argc, char *argv[])
- {
-- int inplace = 0, r, add_PG = 1, c;
-- bam_hdr_t *h;
-+ int inplace = 0, r, no_pg = 0, c, skip_header = 0;
-+ sam_hdr_t *h;
- samFile *in;
-- char *arg_list = stringify_argv(argc+1, argv-1);
-+ char *arg_list = NULL, *external = NULL;
-
- static const struct option lopts[] = {
- {"help", no_argument, NULL, 'h'},
- {"in-place", no_argument, NULL, 'i'},
- {"no-PG", no_argument, NULL, 'P'},
-+ {"command", required_argument, NULL, 'c'},
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "hiP", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "hiPc:", lopts, NULL)) >= 0) {
- switch (c) {
-- case 'P': add_PG = 0; break;
-+ case 'P': no_pg = 1; break;
- case 'i': inplace = 1; break;
-+ case 'c': external = optarg; break;
- case 'h': usage(samtools_stdout, 0); break;
- default:
- fprintf(samtools_stderr, "Invalid option '%c'\n", c);
-@@ -473,10 +560,29 @@
- }
- }
-
-- if (argc - optind != 2)
-+ if ((argc - optind != 2 || external) && (argc - optind != 1 || !external))
- usage(samtools_stderr, 1);
-
-- { // read the header
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("reheader", "failed to create arg_list");
-+ return 1;
-+ }
-+
-+ if (external) {
-+ skip_header = 1;
-+ in = sam_open(argv[optind], inplace?"r+":"r");
-+ if (in == 0) {
-+ print_error_errno("reheader", "fail to open file '%s'", argv[optind]);
-+ return 1;
-+ }
-+
-+ h = external_reheader(in, external);
-+ if (h == NULL) {
-+ fprintf(samtools_stderr, "[%s] failed to read the header from '%s'.\n", __func__, external);
-+ sam_close(in);
-+ return 1;
-+ }
-+ } else { // read the header from a separate file
- samFile *fph = sam_open(argv[optind], "r");
- if (fph == 0) {
- print_error_errno("reheader", "fail to read the header from '%s'", argv[optind]);
-@@ -489,25 +595,34 @@
- __func__, argv[1]);
- return 1;
- }
-+ in = sam_open(argv[optind+1], inplace?"r+":"r");
-+ if (in == 0) {
-+ print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]);
-+ return 1;
-+ }
- }
-- in = sam_open(argv[optind+1], inplace?"r+":"r");
-- if (in == 0) {
-- print_error_errno("reheader", "fail to open file '%s'", argv[optind+1]);
-- return 1;
-- }
-+
- if (hts_get_format(in)->format == bam) {
-- r = bam_reheader(in->fp.bgzf, h, fileno(samtools_stdout), arg_list, add_PG);
-- } else {
-+ if (inplace) {
-+ print_error("reheader", "cannot reheader BAM '%s' in-place", argv[optind+1]);
-+ r = -1;
-+ } else {
-+ r = bam_reheader(in->fp.bgzf, h, fileno(samtools_stdout), arg_list, no_pg, skip_header);
-+ }
-+ } else if (hts_get_format(in)->format == cram) {
- if (inplace)
-- r = cram_reheader_inplace(in->fp.cram, h, arg_list, add_PG);
-+ r = cram_reheader_inplace(in->fp.cram, h, arg_list, no_pg);
- else
-- r = cram_reheader(in->fp.cram, h, arg_list, add_PG);
-+ r = cram_reheader(in->fp.cram, h, arg_list, no_pg);
-+ } else {
-+ print_error("reheader", "input file '%s' must be BAM or CRAM", argv[optind+1]);
-+ r = -1;
- }
-
- if (sam_close(in) != 0)
- r = -1;
-
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
-
- if (arg_list)
- free(arg_list);
---- python-pysam.orig/samtools/bam_rmdup.c
-+++ python-pysam/samtools/bam_rmdup.c
-@@ -1,6 +1,6 @@
- /* bam_rmdup.c -- duplicate read detection.
-
-- Copyright (C) 2009, 2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2015, 2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2009 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -63,7 +63,7 @@
- stack->a[stack->n++] = b;
- }
-
--static inline int dump_best(tmp_stack_t *stack, samFile *out, bam_hdr_t *hdr)
-+static inline int dump_best(tmp_stack_t *stack, samFile *out, sam_hdr_t *hdr)
- {
- int i;
- for (i = 0; i != stack->n; ++i) {
-@@ -127,7 +127,7 @@
- return q;
- }
-
--int bam_rmdup_core(samFile *in, bam_hdr_t *hdr, samFile *out)
-+int bam_rmdup_core(samFile *in, sam_hdr_t *hdr, samFile *out)
- {
- bam1_t *b = NULL;
- int last_tid = -1, last_pos = -1, r;
-@@ -165,7 +165,7 @@
- break;
- }
- last_tid = c->tid;
-- fprintf(stderr, "[bam_rmdup_core] processing reference %s...\n", hdr->target_name[c->tid]);
-+ fprintf(stderr, "[bam_rmdup_core] processing reference %s...\n", sam_hdr_tid2name(hdr, c->tid));
- }
- }
- if (!(c->flag&BAM_FPAIRED) || (c->flag&(BAM_FUNMAP|BAM_FMUNMAP)) || (c->mtid >= 0 && c->tid != c->mtid)) {
-@@ -179,13 +179,16 @@
- q = lib? get_aux(aux, lib) : get_aux(aux, "\t");
- ++q->n_checked;
- k = kh_put(pos, q->best_hash, key, &ret);
-+ if (ret < 0) goto fail;
- if (ret == 0) { // found in best_hash
- bam1_t *p = kh_val(q->best_hash, k);
- ++q->n_removed;
- if (sum_qual(p) < sum_qual(b)) { // the current alignment is better; this can be accelerated in principle
- kh_put(name, del_set, strdup(bam_get_qname(p)), &ret); // p will be removed
-- bam_copy1(p, b); // replaced as b
-+ if (ret < 0) goto fail;
-+ if (bam_copy1(p, b) == NULL) goto fail; // replaced as b
- } else kh_put(name, del_set, strdup(bam_get_qname(b)), &ret); // b will be removed
-+ if (ret < 0) goto fail;
- if (ret == 0)
- fprintf(stderr, "[bam_rmdup_core] inconsistent BAM file for pair '%s'. Continue anyway.\n", bam_get_qname(b));
- } else { // not found in best_hash
-@@ -250,7 +253,7 @@
- return 1;
- }
-
--int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se);
-+int bam_rmdupse_core(samFile *in, sam_hdr_t *hdr, samFile *out, int force_se);
-
- static int rmdup_usage(void) {
- fprintf(stderr, "\n");
-@@ -258,7 +261,7 @@
- fprintf(stderr, "Option: -s rmdup for SE reads\n");
- fprintf(stderr, " -S treat PE reads as SE in rmdup (force -s)\n");
-
-- sam_global_opt_help(stderr, "-....-");
-+ sam_global_opt_help(stderr, "-....--.");
- return 1;
- }
-
-@@ -266,7 +269,7 @@
- {
- int c, ret, is_se = 0, force_se = 0;
- samFile *in, *out;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- char wmode[3] = {'w', 'b', 0};
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
-@@ -293,7 +296,7 @@
- return 1;
- }
- header = sam_hdr_read(in);
-- if (header == NULL || header->n_targets == 0) {
-+ if (header == NULL || sam_hdr_nref(header) == 0) {
- fprintf(stderr, "[bam_rmdup] input SAM does not have header. Abort!\n");
- return 1;
- }
-@@ -312,7 +315,7 @@
- if (is_se) ret = bam_rmdupse_core(in, header, out, force_se);
- else ret = bam_rmdup_core(in, header, out);
-
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(in);
- if (sam_close(out) < 0) {
- fprintf(stderr, "[bam_rmdup] error closing output file\n");
---- python-pysam.orig/samtools/bam_rmdup.c.pysam.c
-+++ python-pysam/samtools/bam_rmdup.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_rmdup.c -- duplicate read detection.
-
-- Copyright (C) 2009, 2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2015, 2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2009 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -65,7 +65,7 @@
- stack->a[stack->n++] = b;
- }
-
--static inline int dump_best(tmp_stack_t *stack, samFile *out, bam_hdr_t *hdr)
-+static inline int dump_best(tmp_stack_t *stack, samFile *out, sam_hdr_t *hdr)
- {
- int i;
- for (i = 0; i != stack->n; ++i) {
-@@ -129,7 +129,7 @@
- return q;
- }
-
--int bam_rmdup_core(samFile *in, bam_hdr_t *hdr, samFile *out)
-+int bam_rmdup_core(samFile *in, sam_hdr_t *hdr, samFile *out)
- {
- bam1_t *b = NULL;
- int last_tid = -1, last_pos = -1, r;
-@@ -167,7 +167,7 @@
- break;
- }
- last_tid = c->tid;
-- fprintf(samtools_stderr, "[bam_rmdup_core] processing reference %s...\n", hdr->target_name[c->tid]);
-+ fprintf(samtools_stderr, "[bam_rmdup_core] processing reference %s...\n", sam_hdr_tid2name(hdr, c->tid));
- }
- }
- if (!(c->flag&BAM_FPAIRED) || (c->flag&(BAM_FUNMAP|BAM_FMUNMAP)) || (c->mtid >= 0 && c->tid != c->mtid)) {
-@@ -181,13 +181,16 @@
- q = lib? get_aux(aux, lib) : get_aux(aux, "\t");
- ++q->n_checked;
- k = kh_put(pos, q->best_hash, key, &ret);
-+ if (ret < 0) goto fail;
- if (ret == 0) { // found in best_hash
- bam1_t *p = kh_val(q->best_hash, k);
- ++q->n_removed;
- if (sum_qual(p) < sum_qual(b)) { // the current alignment is better; this can be accelerated in principle
- kh_put(name, del_set, strdup(bam_get_qname(p)), &ret); // p will be removed
-- bam_copy1(p, b); // replaced as b
-+ if (ret < 0) goto fail;
-+ if (bam_copy1(p, b) == NULL) goto fail; // replaced as b
- } else kh_put(name, del_set, strdup(bam_get_qname(b)), &ret); // b will be removed
-+ if (ret < 0) goto fail;
- if (ret == 0)
- fprintf(samtools_stderr, "[bam_rmdup_core] inconsistent BAM file for pair '%s'. Continue anyway.\n", bam_get_qname(b));
- } else { // not found in best_hash
-@@ -252,7 +255,7 @@
- return 1;
- }
-
--int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se);
-+int bam_rmdupse_core(samFile *in, sam_hdr_t *hdr, samFile *out, int force_se);
-
- static int rmdup_usage(void) {
- fprintf(samtools_stderr, "\n");
-@@ -260,7 +263,7 @@
- fprintf(samtools_stderr, "Option: -s rmdup for SE reads\n");
- fprintf(samtools_stderr, " -S treat PE reads as SE in rmdup (force -s)\n");
-
-- sam_global_opt_help(samtools_stderr, "-....-");
-+ sam_global_opt_help(samtools_stderr, "-....--.");
- return 1;
- }
-
-@@ -268,7 +271,7 @@
- {
- int c, ret, is_se = 0, force_se = 0;
- samFile *in, *out;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- char wmode[3] = {'w', 'b', 0};
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
-@@ -295,7 +298,7 @@
- return 1;
- }
- header = sam_hdr_read(in);
-- if (header == NULL || header->n_targets == 0) {
-+ if (header == NULL || sam_hdr_nref(header) == 0) {
- fprintf(samtools_stderr, "[bam_rmdup] input SAM does not have header. Abort!\n");
- return 1;
- }
-@@ -314,7 +317,7 @@
- if (is_se) ret = bam_rmdupse_core(in, header, out, force_se);
- else ret = bam_rmdup_core(in, header, out);
-
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(in);
- if (sam_close(out) < 0) {
- fprintf(samtools_stderr, "[bam_rmdup] error closing output file\n");
---- python-pysam.orig/samtools/bam_rmdupse.c
-+++ python-pysam/samtools/bam_rmdupse.c
-@@ -1,6 +1,6 @@
- /* bam_rmdupse.c -- duplicate read detection for unpaired reads.
-
-- Copyright (C) 2009, 2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2015, 2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2009 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -84,7 +84,8 @@
- p->discarded = 0;
- p->endpos = endpos; p->score = score;
- if (p->b == 0) p->b = bam_init1();
-- bam_copy1(p->b, b);
-+ if (!p->b) { perror(NULL); exit(EXIT_FAILURE); }
-+ if (bam_copy1(p->b, b) == NULL) { perror(NULL); exit(EXIT_FAILURE); }
- return p;
- }
-
-@@ -96,7 +97,7 @@
- kh_del(best, h, k);
- }
-
--static int dump_alignment(samFile *out, bam_hdr_t *hdr,
-+static int dump_alignment(samFile *out, sam_hdr_t *hdr,
- queue_t *queue, int32_t pos, khash_t(lib) *h)
- {
- if (queue->size > QUEUE_CLEAR_SIZE || pos == MAX_POS) {
-@@ -125,7 +126,7 @@
- return 0;
- }
-
--int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se)
-+int bam_rmdupse_core(samFile *in, sam_hdr_t *hdr, samFile *out, int force_se)
- {
- bam1_t *b = NULL;
- queue_t *queue = NULL;
-@@ -179,7 +180,9 @@
- kh_val(h, k) = push_queue(queue, b, endpos, score);
- } else { // replace
- p->score = score; p->endpos = endpos;
-- bam_copy1(p->b, b);
-+ if (bam_copy1(p->b, b) == NULL) {
-+ perror(NULL); exit(EXIT_FAILURE);
-+ }
- }
- } // otherwise, discard the alignment
- } else kh_val(h, k) = push_queue(queue, b, endpos, score);
---- python-pysam.orig/samtools/bam_rmdupse.c.pysam.c
-+++ python-pysam/samtools/bam_rmdupse.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_rmdupse.c -- duplicate read detection for unpaired reads.
-
-- Copyright (C) 2009, 2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2015, 2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2009 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -86,7 +86,8 @@
- p->discarded = 0;
- p->endpos = endpos; p->score = score;
- if (p->b == 0) p->b = bam_init1();
-- bam_copy1(p->b, b);
-+ if (!p->b) { perror(NULL); exit(EXIT_FAILURE); }
-+ if (bam_copy1(p->b, b) == NULL) { perror(NULL); exit(EXIT_FAILURE); }
- return p;
- }
-
-@@ -98,7 +99,7 @@
- kh_del(best, h, k);
- }
-
--static int dump_alignment(samFile *out, bam_hdr_t *hdr,
-+static int dump_alignment(samFile *out, sam_hdr_t *hdr,
- queue_t *queue, int32_t pos, khash_t(lib) *h)
- {
- if (queue->size > QUEUE_CLEAR_SIZE || pos == MAX_POS) {
-@@ -127,7 +128,7 @@
- return 0;
- }
-
--int bam_rmdupse_core(samFile *in, bam_hdr_t *hdr, samFile *out, int force_se)
-+int bam_rmdupse_core(samFile *in, sam_hdr_t *hdr, samFile *out, int force_se)
- {
- bam1_t *b = NULL;
- queue_t *queue = NULL;
-@@ -181,7 +182,9 @@
- kh_val(h, k) = push_queue(queue, b, endpos, score);
- } else { // replace
- p->score = score; p->endpos = endpos;
-- bam_copy1(p->b, b);
-+ if (bam_copy1(p->b, b) == NULL) {
-+ perror(NULL); exit(EXIT_FAILURE);
-+ }
- }
- } // otherwise, discard the alignment
- } else kh_val(h, k) = push_queue(queue, b, endpos, score);
---- python-pysam.orig/samtools/bam_sort.c
-+++ python-pysam/samtools/bam_sort.c
-@@ -1,6 +1,6 @@
- /* bam_sort.c -- sorting and merging.
-
-- Copyright (C) 2008-2016 Genome Research Ltd.
-+ Copyright (C) 2008-2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -44,6 +44,7 @@
- #include "htslib/klist.h"
- #include "htslib/kstring.h"
- #include "htslib/sam.h"
-+#include "htslib/hts_endian.h"
- #include "sam_opts.h"
- #include "samtools.h"
-
-@@ -55,7 +56,7 @@
- bam1_t *bam_record;
- union {
- const uint8_t *tag;
-- uint64_t pos;
-+ uint8_t pos_tid[12];
- } u;
- } bam1_tag;
-
-@@ -122,12 +123,12 @@
- return *pa? 1 : *pb? -1 : 0;
- }
-
--#define HEAP_EMPTY UINT64_MAX
-+#define HEAP_EMPTY (UINT64_MAX >> 1)
-
- typedef struct {
- int i;
-- uint32_t rev;
-- uint64_t pos, idx;
-+ uint32_t tid;
-+ uint64_t pos:63, rev:1, idx;
- bam1_tag entry;
- } heap1_t;
-
-@@ -153,6 +154,7 @@
- fb = b.entry.bam_record->core.flag & 0xc0;
- if (fa != fb) return fa > fb;
- } else {
-+ if (a.tid != b.tid) return a.tid > b.tid;
- if (a.pos != b.pos) return a.pos > b.pos;
- if (a.rev != b.rev) return a.rev > b.rev;
- }
-@@ -164,8 +166,7 @@
- KSORT_INIT(heap, heap1_t, heap_lt)
-
- typedef struct merged_header {
-- kstring_t out_hd;
-- kstring_t out_sq;
-+ sam_hdr_t *hdr;
- kstring_t out_rg;
- kstring_t out_pg;
- kstring_t out_co;
-@@ -187,80 +188,6 @@
- bool lost_coord_sort;
- } trans_tbl_t;
-
--/* Something to look like a regmatch_t */
--typedef struct hdr_match {
-- ptrdiff_t rm_so;
-- ptrdiff_t rm_eo;
--} hdr_match_t;
--
--/*
-- * Search for header lines of a particular record type.
-- *
-- * This replaces a regex search for something like /^@SQ.*\tSN:([^\t]+).*$/
-- * but is much quicker. The locations found are returned in *matches,
-- * which has a signature the same as that of a regmatch_t.
-- *
-- * rec is the record type to match (i.e. @HD, @SQ, @PG or @RG)
-- * tag is a tag type in the record to match (SN for @SQ, ID for @PG or @RG)
-- *
-- * The location of the record (if found) is returned in matches[0]
-- * If tag is not NULL, the record is searched for the presence of the
-- * given tag. If found, the location of the value is returned in matches[1].
-- * If the tag isn't found then the record is ignored and the search resumes
-- * on the next header line.
-- *
-- * For simplicity, some assumptions are made about rec and tag:
-- * rec should include the leading '@' sign and be three characters long.
-- * tag should be exactly two characters long.
-- * These are always string constants when this is called below, so we don't
-- * bother to check here.
-- *
-- * Returns 0 if a match was found, -1 if not.
-- */
--
--
--static int hdr_line_match(const char *text, const char *rec,
-- const char *tag, hdr_match_t *matches) {
-- const char *line_start, *line_end = text;
-- const char *tag_start, *tag_end;
--
-- for (;;) {
-- // Find record, ensure either at start of text or follows '\n'
-- line_start = strstr(line_end, rec);
-- while (line_start && line_start > text && *(line_start - 1) != '\n') {
-- line_start = strstr(line_start + 3, rec);
-- }
-- if (!line_start) return -1;
--
-- // Find end of header line
-- line_end = strchr(line_start, '\n');
-- if (!line_end) line_end = line_start + strlen(line_start);
--
-- matches[0].rm_so = line_start - text;
-- matches[0].rm_eo = line_end - text;
-- if (!tag) return 0; // Match found if not looking for tag.
--
-- for (tag_start = line_start + 3; tag_start < line_end; tag_start++) {
-- // Find possible tag start. Hacky but quick.
-- while (*tag_start > '\n') tag_start++;
--
-- // Check it
-- if (tag_start[0] == '\t'
-- && strncmp(tag_start + 1, tag, 2) == 0
-- && tag_start[3] == ':') {
-- // Found tag, record location and return.
-- tag_end = tag_start + 4;
-- while (*tag_end && *tag_end != '\t' && *tag_end != '\n')
-- ++tag_end;
-- matches[1].rm_so = tag_start - text + 4;
-- matches[1].rm_eo = tag_end - text;
-- return 0;
-- }
-- }
-- // Couldn't find tag, try again from end of current record.
-- }
--}
--
- static void trans_tbl_destroy(trans_tbl_t *tbl) {
- khiter_t iter;
-
-@@ -299,6 +226,9 @@
- merged_hdr = calloc(1, sizeof(*merged_hdr));
- if (merged_hdr == NULL) return NULL;
-
-+ merged_hdr->hdr = sam_hdr_init();
-+ if (!merged_hdr->hdr) goto fail;
-+
- merged_hdr->targets_sz = 16;
- merged_hdr->target_name = malloc(merged_hdr->targets_sz
- * sizeof(*merged_hdr->target_name));
-@@ -326,6 +256,7 @@
- kh_destroy(c2i, merged_hdr->sq_tids);
- free(merged_hdr->target_name);
- free(merged_hdr->target_len);
-+ sam_hdr_destroy(merged_hdr->hdr);
- free(merged_hdr);
- return NULL;
- }
-@@ -338,12 +269,6 @@
- return kputsn(src + from, to - from, dest) != to - from;
- }
-
--// Append a header line match to kstring
--static inline int match_to_ks(const char *src, const hdr_match_t *match,
-- kstring_t *dest) {
-- return range_to_ks(src, match->rm_so, match->rm_eo, dest);
--}
--
- // Append a kstring to a kstring
- static inline int ks_to_ks(kstring_t *src, kstring_t *dest) {
- return kputsn(ks_str(src), ks_len(src), dest) != ks_len(src);
-@@ -385,48 +310,32 @@
- */
-
- static int trans_tbl_add_hd(merged_header_t* merged_hdr,
-- bam_hdr_t *translate) {
-- hdr_match_t match = {0, 0};
-+ sam_hdr_t *translate) {
-+ kstring_t hd_line = { 0, 0, NULL };
-+ int res;
-
- // TODO: handle case when @HD needs merging.
- if (merged_hdr->have_hd) return 0;
-
-- if (hdr_line_match(translate->text, "@HD", NULL, &match) != 0) {
-- return 0;
-+ res = sam_hdr_find_hd(translate, &hd_line);
-+ if (res < -1) {
-+ print_error("merge", "failed to get @HD line from header");
-+ return -1;
- }
-
-- if (match_to_ks(translate->text, &match, &merged_hdr->out_hd)) goto memfail;
-- if (kputc('\n', &merged_hdr->out_hd) == EOF) goto memfail;
-- merged_hdr->have_hd = true;
--
-- return 0;
--
-- memfail:
-- perror(__func__);
-- return -1;
--}
-+ if (res < 0) // Not found
-+ return 0;
-
--static inline int grow_target_list(merged_header_t* merged_hdr) {
-- size_t new_size;
-- char **new_names;
-- uint32_t *new_len;
--
-- new_size = merged_hdr->targets_sz * 2;
-- new_names = realloc(merged_hdr->target_name, sizeof(*new_names) * new_size);
-- if (!new_names) goto fail;
-- merged_hdr->target_name = new_names;
--
-- new_len = realloc(merged_hdr->target_len, sizeof(*new_len) * new_size);
-- if (!new_len) goto fail;
-- merged_hdr->target_len = new_len;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, hd_line.s, hd_line.l) < 0) {
-+ print_error("merge", "failed to add @HD line to new header");
-+ free(hd_line.s);
-+ return -1;
-+ }
-
-- merged_hdr->targets_sz = new_size;
-+ free(hd_line.s);
-+ merged_hdr->have_hd = true;
-
- return 0;
--
-- fail:
-- perror(__func__);
-- return -1;
- }
-
- /*
-@@ -444,54 +353,48 @@
- * Returns 0 on success, -1 on failure.
- */
-
--static int trans_tbl_add_sq(merged_header_t* merged_hdr, bam_hdr_t *translate,
-+static int trans_tbl_add_sq(merged_header_t* merged_hdr, sam_hdr_t *translate,
- trans_tbl_t* tbl) {
--
-- kstring_t *out_text = &merged_hdr->out_sq;
-- khash_t(c2i)* sq_tids = merged_hdr->sq_tids;
-- hdr_match_t *new_sq_matches = NULL;
-- char *text;
-- hdr_match_t matches[2];
- int32_t i;
-- int32_t old_n_targets = merged_hdr->n_targets;
-- khiter_t iter;
-- int min_tid = -1;
-+ int min_tid = -1, res;
-+ kstring_t sq_line = { 0, 0, NULL }, sq_sn = { 0, 0, NULL };
-
- // Fill in the tid part of the translation table, adding new targets
- // to the merged header as we go.
-
-- for (i = 0; i < translate->n_targets; ++i) {
-+ for (i = 0; i < sam_hdr_nref(translate); ++i) {
-+ int trans_tid;
-+ sq_sn.l = 0;
-+ res = sam_hdr_find_tag_pos(translate, "SQ", i, "SN", &sq_sn);
-+ if (res < 0) {
-+ print_error("merge", "failed to get @SQ SN #%d from header", i + 1);
-+ goto fail;
-+ }
-
-- // Check if it's a new target.
-- iter = kh_get(c2i, sq_tids, translate->target_name[i]);
-+ trans_tid = sam_hdr_name2tid(merged_hdr->hdr, sq_sn.s);
-+ if (trans_tid < -1) {
-+ print_error("merge", "failed to lookup ref");
-+ goto fail;
-+ }
-
-- if (iter == kh_end(sq_tids)) {
-- int ret;
-+ if (trans_tid < 0) {
- // Append missing entries to out_hdr
--
-- if (merged_hdr->n_targets == merged_hdr->targets_sz) {
-- if (grow_target_list(merged_hdr)) goto fail;
-+ sq_line.l = 0;
-+ res = sam_hdr_find_line_id(translate, "SQ", "SN", sq_sn.s, &sq_line);
-+ if (res < 0) {
-+ print_error("merge", "failed to get @SQ SN:%s from header", sq_sn.s);
-+ goto fail;
- }
-
-- merged_hdr->target_name[merged_hdr->n_targets] = strdup(translate->target_name[i]);
-- if (merged_hdr->target_name[merged_hdr->n_targets] == NULL) goto memfail;
-- merged_hdr->target_len[merged_hdr->n_targets] = translate->target_len[i];
--
-- // Record the new identifier for reference below,
-- // and when building the ttable for other inputs.
-- iter = kh_put(c2i, sq_tids,
-- merged_hdr->target_name[merged_hdr->n_targets], &ret);
-- if (ret < 0) {
-- free(merged_hdr->target_name[merged_hdr->n_targets]);
-- goto memfail;
-- }
-- assert(ret > 0); // Should not be in hash already.
-+ trans_tid = sam_hdr_nref(merged_hdr->hdr);
-
-- kh_value(sq_tids, iter) = merged_hdr->n_targets;
-- tbl->tid_trans[i] = merged_hdr->n_targets++;
-- } else {
-- tbl->tid_trans[i] = kh_value(sq_tids, iter);
-+ res = sam_hdr_add_lines(merged_hdr->hdr, sq_line.s, sq_line.l);
-+ if (res < 0) {
-+ print_error("merge", "failed to add @SQ SN:%s to new header", sq_sn.s);
-+ goto fail;
-+ }
- }
-+ tbl->tid_trans[i] = trans_tid;
-
- if (tbl->tid_trans[i] > min_tid) {
- min_tid = tbl->tid_trans[i];
-@@ -500,78 +403,14 @@
- }
- }
-
-- if (merged_hdr->n_targets == old_n_targets)
-- return 0; // Everything done if no new targets.
--
-- // Otherwise, find @SQ lines in translate->text for all newly added targets.
--
-- new_sq_matches = malloc((merged_hdr->n_targets - old_n_targets)
-- * sizeof(*new_sq_matches));
-- if (new_sq_matches == NULL) goto memfail;
--
-- for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) {
-- new_sq_matches[i].rm_so = new_sq_matches[i].rm_eo = -1;
-- }
--
-- text = translate->text;
-- while (hdr_line_match(text, "@SQ", "SN", matches) == 0) {
-- // matches[0] is whole line, matches[1] is SN value.
--
-- // This is a bit disgusting, but avoids a copy...
-- char c = text[matches[1].rm_eo];
-- int idx;
--
-- text[matches[1].rm_eo] = '\0';
--
-- // Look up the SN value in the sq_tids hash.
-- iter = kh_get(c2i, sq_tids, text + matches[1].rm_so);
-- text[matches[1].rm_eo] = c; // restore text
--
-- if (iter == kh_end(sq_tids)) {
-- // Warn about this, but it's not really fatal.
-- fprintf(stderr, "[W::%s] @SQ SN (%.*s) found in text header but not binary header.\n",
-- __func__,
-- (int) (matches[1].rm_eo - matches[1].rm_so),
-- text + matches[1].rm_so);
-- text += matches[0].rm_eo;
-- continue; // Skip to next
-- }
--
-- idx = kh_value(sq_tids, iter);
-- if (idx >= old_n_targets) {
-- // is a new SQ, so record position so we can add it to out_text.
-- assert(idx < merged_hdr->n_targets);
-- ptrdiff_t off = text - translate->text;
-- new_sq_matches[idx - old_n_targets].rm_so = matches[0].rm_so + off;
-- new_sq_matches[idx - old_n_targets].rm_eo = matches[0].rm_eo + off;
-- }
--
-- // Carry on searching from end of current match
-- text += matches[0].rm_eo;
-- }
--
-- // Copy the @SQ headers found and recreate any missing from binary header.
-- for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) {
-- if (new_sq_matches[i].rm_so >= 0) {
-- if (match_to_ks(translate->text, &new_sq_matches[i], out_text))
-- goto memfail;
-- if (kputc('\n', out_text) == EOF) goto memfail;
-- } else {
-- if (kputs("@SQ\tSN:", out_text) == EOF ||
-- kputs(merged_hdr->target_name[i + old_n_targets], out_text) == EOF ||
-- kputs("\tLN:", out_text) == EOF ||
-- kputuw(merged_hdr->target_len[i + old_n_targets], out_text) == EOF ||
-- kputc('\n', out_text) == EOF) goto memfail;
-- }
-- }
-+ free(sq_line.s);
-+ free(sq_sn.s);
-
-- free(new_sq_matches);
- return 0;
-
-- memfail:
-- perror(__func__);
- fail:
-- free(new_sq_matches);
-+ free(sq_line.s);
-+ free(sq_sn.s);
- return -1;
- }
-
-@@ -592,29 +431,30 @@
- *
- */
-
--static klist_t(hdrln) * trans_rg_pg(bool is_rg, bam_hdr_t *translate,
-+static klist_t(hdrln) * trans_rg_pg(bool is_rg, sam_hdr_t *translate,
- bool merge, khash_t(cset)* known_ids,
- khash_t(c2c)* id_map, char *override) {
-- hdr_match_t matches[2];
- khiter_t iter;
-- const char *text = translate->text;
-- const char *rec_type = is_rg ? "@RG" : "@PG";
-+ int num_ids, i;
-+ const char *rec_type = is_rg ? "RG" : "PG";
- klist_t(hdrln) *hdr_lines;
-
- hdr_lines = kl_init(hdrln);
-
- // Search through translate's header
-- while (hdr_line_match(text, rec_type, "ID", matches) == 0) {
-- // matches[0] is the whole @RG/PG line; matches[1] is the ID field value
-+ num_ids = sam_hdr_count_lines(translate, rec_type);
-+ if (num_ids < 0)
-+ goto fail;
-
-+ for (i = 0; i < num_ids; i++) {
- kstring_t orig_id = { 0, 0, NULL }; // ID in original header
- kstring_t transformed_id = { 0, 0, NULL }; // ID in output header
- char *map_value; // Value to store in id_map
- bool id_changed; // Have we changed the ID?
- bool not_found_in_output; // ID isn't in the output header (yet)
-
-- // Take a copy of the ID as we'll need it for a hash key.
-- if (match_to_ks(text, &matches[1], &orig_id)) goto memfail;
-+ if (sam_hdr_find_tag_pos(translate, rec_type, i, "ID", &orig_id) < 0)
-+ goto fail;
-
- // is our matched ID in our output ID set already?
- iter = kh_get(cset, known_ids, ks_str(&orig_id));
-@@ -651,18 +491,38 @@
-
- // Does this line need to go into our output header?
- if (not_found_in_output) {
--
- // Take matched line and replace ID with transformed_id
- kstring_t new_hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(translate, rec_type,
-+ "ID", ks_str(&orig_id), &new_hdr_line) < 0){
-+ goto fail;
-+ }
-+
-+ if (id_changed) {
-+ char *idp = strstr(ks_str(&new_hdr_line), "\tID:"), *id_end;
-+ ptrdiff_t id_offset, id_len;
-+ if (!idp) {
-+ print_error("merge", "failed to find ID in \"%s\"\n",
-+ ks_str(&new_hdr_line));
-+ goto fail;
-+ }
-+ idp += 4;
-+ for (id_end = idp; *id_end >= '\n'; id_end++) {}
-+
-+ id_offset = idp - new_hdr_line.s;
-+ id_len = id_end - idp;
-
-- if (!id_changed) { // Can just copy
-- if (match_to_ks(text, &matches[0], &new_hdr_line)) goto memfail;
-- } else { // Substitute new name for original
-- if (range_to_ks(text, matches[0].rm_so, matches[1].rm_so,
-- &new_hdr_line)) goto memfail;
-- if (ks_to_ks(&transformed_id, &new_hdr_line)) goto memfail;
-- if (range_to_ks(text, matches[1].rm_eo, matches[0].rm_eo,
-- &new_hdr_line)) goto memfail;
-+ if (id_len < transformed_id.l) {
-+ if (ks_resize(&new_hdr_line, new_hdr_line.l + transformed_id.l - id_len))
-+ goto fail;
-+ }
-+ if (id_len != transformed_id.l) {
-+ memmove(new_hdr_line.s + id_offset + transformed_id.l,
-+ new_hdr_line.s + id_offset + id_len,
-+ new_hdr_line.l - id_offset - id_len + 1);
-+ }
-+ memcpy(new_hdr_line.s + id_offset, transformed_id.s,
-+ transformed_id.l);
- }
-
- // append line to output linked list
-@@ -686,8 +546,6 @@
- int in_there = 0;
- iter = kh_put(c2c, id_map, ks_release(&orig_id), &in_there);
- kh_value(id_map, iter) = map_value;
--
-- text += matches[0].rm_eo; // next!
- }
-
- // If there are no RG lines in the file and we are overriding add one
-@@ -724,6 +582,7 @@
-
- memfail:
- perror(__func__);
-+ fail:
- if (hdr_lines) kl_destroy(hdrln, hdr_lines);
- return NULL;
- }
-@@ -821,16 +680,18 @@
- * Returns 0 on success, -1 on failure.
- */
-
--static int trans_tbl_init(merged_header_t* merged_hdr, bam_hdr_t* translate,
-+static int trans_tbl_init(merged_header_t* merged_hdr, sam_hdr_t* translate,
- trans_tbl_t* tbl, bool merge_rg, bool merge_pg,
- bool copy_co, char* rg_override)
- {
-+ kstring_t lines = { 0, 0, NULL };
- klist_t(hdrln) *rg_list = NULL;
- klist_t(hdrln) *pg_list = NULL;
-
-- tbl->n_targets = translate->n_targets;
-+ tbl->n_targets = sam_hdr_nref(translate);
- tbl->rg_trans = tbl->pg_trans = NULL;
-- tbl->tid_trans = (int*)calloc(translate->n_targets, sizeof(int));
-+ tbl->tid_trans = (int*)calloc(tbl->n_targets ? tbl->n_targets : 1,
-+ sizeof(int));
- if (tbl->tid_trans == NULL) goto memfail;
- tbl->rg_trans = kh_init(c2c);
- if (tbl->rg_trans == NULL) goto memfail;
-@@ -859,6 +720,7 @@
- goto fail;
-
- // Fix-up PP: tags in the new @PG records and add to output
-+ lines.l = 0;
- if (finish_rg_pg(false, pg_list, tbl->pg_trans, &merged_hdr->out_pg))
- goto fail;
-
-@@ -867,22 +729,22 @@
-
- if (copy_co) {
- // Just append @CO headers without translation
-- const char *line, *end_pointer;
-- for (line = translate->text; *line; line = end_pointer + 1) {
-- end_pointer = strchr(line, '\n');
-- if (strncmp(line, "@CO", 3) == 0) {
-- if (end_pointer) {
-- if (kputsn(line, end_pointer - line + 1, &merged_hdr->out_co) == EOF)
-- goto memfail;
-- } else { // Last line with no trailing '\n'
-- if (kputs(line, &merged_hdr->out_co) == EOF) goto memfail;
-- if (kputc('\n', &merged_hdr->out_co) == EOF) goto memfail;
-- }
-- }
-- if (end_pointer == NULL) break;
-+ int num_co = sam_hdr_count_lines(translate, "CO"), i;
-+ if (num_co < 0)
-+ goto fail;
-+
-+ for (i = 0; i < num_co; i++) {
-+ if (sam_hdr_find_line_pos(translate, "CO", i, &lines) < 0)
-+ goto fail;
-+ if (ks_to_ks(&lines, &merged_hdr->out_co))
-+ goto fail;
-+ if (kputc('\n', &merged_hdr->out_co) < 0)
-+ goto fail;
- }
- }
-
-+ free(lines.s);
-+
- return 0;
-
- memfail:
-@@ -891,80 +753,22 @@
- trans_tbl_destroy(tbl);
- if (rg_list) kl_destroy(hdrln, rg_list);
- if (pg_list) kl_destroy(hdrln, pg_list);
-+ free(lines.s);
- return -1;
- }
-
--static inline void move_kstr_to_text(char **text, kstring_t *ks) {
-- memcpy(*text, ks_str(ks), ks_len(ks));
-- *text += ks_len(ks);
-- **text = '\0';
-- free(ks_release(ks));
--}
--
--/*
-- * Populate a bam_hdr_t struct from data in a merged_header_t.
-- */
--
--static bam_hdr_t * finish_merged_header(merged_header_t *merged_hdr) {
-- size_t txt_sz;
-- char *text;
-- bam_hdr_t *hdr;
--
-- // Check output text size
-- txt_sz = (ks_len(&merged_hdr->out_hd)
-- + ks_len(&merged_hdr->out_sq)
-- + ks_len(&merged_hdr->out_rg)
-- + ks_len(&merged_hdr->out_pg)
-- + ks_len(&merged_hdr->out_co));
-- if (txt_sz >= INT32_MAX) {
-- fprintf(stderr, "[%s] Output header text too long\n", __func__);
-- return NULL;
-- }
--
-- // Allocate new header
-- hdr = bam_hdr_init();
-- if (hdr == NULL) goto memfail;
--
-- // Transfer targets arrays to new header
-- hdr->n_targets = merged_hdr->n_targets;
-- if (hdr->n_targets > 0) {
-- // Try to shrink targets arrays to correct size
-- hdr->target_name = realloc(merged_hdr->target_name,
-- hdr->n_targets * sizeof(char*));
-- if (!hdr->target_name) hdr->target_name = merged_hdr->target_name;
--
-- hdr->target_len = realloc(merged_hdr->target_len,
-- hdr->n_targets * sizeof(uint32_t));
-- if (!hdr->target_len) hdr->target_len = merged_hdr->target_len;
--
-- // These have either been freed by realloc() or, in the unlikely
-- // event that failed, have had their ownership transferred to hdr
-- merged_hdr->target_name = NULL;
-- merged_hdr->target_len = NULL;
-- }
-- else {
-- hdr->target_name = NULL;
-- hdr->target_len = NULL;
-- }
--
-- // Allocate text
-- text = hdr->text = malloc(txt_sz + 1);
-- if (!text) goto memfail;
--
-- // Put header text in order @HD, @SQ, @RG, @PG, @CO
-- move_kstr_to_text(&text, &merged_hdr->out_hd);
-- move_kstr_to_text(&text, &merged_hdr->out_sq);
-- move_kstr_to_text(&text, &merged_hdr->out_rg);
-- move_kstr_to_text(&text, &merged_hdr->out_pg);
-- move_kstr_to_text(&text, &merged_hdr->out_co);
-- hdr->l_text = txt_sz;
--
-- return hdr;
-+static int finish_merged_header(merged_header_t *merged_hdr) {
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_rg),
-+ ks_len(&merged_hdr->out_rg)) < 0)
-+ return -1;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_pg),
-+ ks_len(&merged_hdr->out_pg)) < 0)
-+ return -1;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_co),
-+ ks_len(&merged_hdr->out_co)) < 0)
-+ return -1;
-
-- memfail:
-- perror(__func__);
-- bam_hdr_destroy(hdr);
-- return NULL;
-+ return 0;
- }
-
- /*
-@@ -979,8 +783,6 @@
- size_t i;
- khiter_t iter;
- if (!merged_hdr) return;
-- free(ks_release(&merged_hdr->out_hd));
-- free(ks_release(&merged_hdr->out_sq));
- free(ks_release(&merged_hdr->out_rg));
- free(ks_release(&merged_hdr->out_pg));
- free(ks_release(&merged_hdr->out_co));
-@@ -1147,25 +949,30 @@
- @param cmd command name (used in print_error() etc)
- @param in_fmt format options for input files
- @param out_fmt output file format and options
-+ @param write_index create the index, together with the output file
-+ @param arg_list command string for PG line
-+ @param no_pg if 1, do not add a new PG line
- @discussion Padding information may NOT correctly maintained. This
- function is NOT thread safe.
- */
- int bam_merge_core2(int by_qname, char* sort_tag, const char *out, const char *mode,
-- const char *headers, int n, char * const *fn, int flag,
-- const char *reg, int n_threads, const char *cmd,
-- const htsFormat *in_fmt, const htsFormat *out_fmt)
-+ const char *headers, int n, char * const *fn, char * const *fn_idx,
-+ int flag, const char *reg, int n_threads, const char *cmd,
-+ const htsFormat *in_fmt, const htsFormat *out_fmt, int write_index,
-+ char *arg_list, int no_pg)
- {
- samFile *fpout, **fp = NULL;
- heap1_t *heap = NULL;
-- bam_hdr_t *hout = NULL;
-- bam_hdr_t *hin = NULL;
-+ sam_hdr_t *hout = NULL;
-+ sam_hdr_t *hin = NULL;
- int i, j, *RG_len = NULL;
- uint64_t idx = 0;
- char **RG = NULL;
- hts_itr_t **iter = NULL;
-- bam_hdr_t **hdr = NULL;
-+ sam_hdr_t **hdr = NULL;
- trans_tbl_t *translation_tbl = NULL;
- int *rtrans = NULL;
-+ char *out_idx_fn = NULL;
- merged_header_t *merged_hdr = init_merged_header();
- if (!merged_hdr) return -1;
-
-@@ -1188,7 +995,7 @@
- if (sort_tag) {
- g_is_by_tag = 1;
- g_sort_tag[0] = sort_tag[0];
-- g_sort_tag[1] = sort_tag[1];
-+ g_sort_tag[1] = sort_tag[0] ? sort_tag[1] : '\0';
- }
-
- fp = (samFile**)calloc(n, sizeof(samFile*));
-@@ -1197,7 +1004,7 @@
- if (!heap) goto mem_fail;
- iter = (hts_itr_t**)calloc(n, sizeof(hts_itr_t*));
- if (!iter) goto mem_fail;
-- hdr = (bam_hdr_t**)calloc(n, sizeof(bam_hdr_t*));
-+ hdr = (sam_hdr_t**)calloc(n, sizeof(sam_hdr_t*));
- if (!hdr) goto mem_fail;
- translation_tbl = (trans_tbl_t*)calloc(n, sizeof(trans_tbl_t));
- if (!translation_tbl) goto mem_fail;
-@@ -1234,7 +1041,7 @@
-
- // open and read the header from each file
- for (i = 0; i < n; ++i) {
-- bam_hdr_t *hin;
-+ sam_hdr_t *hin;
- fp[i] = sam_open_format(fn[i], "r", in_fmt);
- if (fp[i] == NULL) {
- print_error_errno(cmd, "fail to open \"%s\"", fn[i]);
-@@ -1255,7 +1062,7 @@
- // TODO sam_itr_next() doesn't yet work for SAM files,
- // so for those keep the headers around for use with sam_read1()
- if (hts_get_format(fp[i])->format == sam) hdr[i] = hin;
-- else { bam_hdr_destroy(hin); hdr[i] = NULL; }
-+ else { sam_hdr_destroy(hin); hdr[i] = NULL; }
-
- if ((translation_tbl+i)->lost_coord_sort && !by_qname) {
- fprintf(stderr, "[bam_merge_core] Order of targets in file %s caused coordinate sort to be lost\n", fn[i]);
-@@ -1284,41 +1091,34 @@
- }
-
- // Transform the header into standard form
-- hout = finish_merged_header(merged_hdr);
-+ if (finish_merged_header(merged_hdr) < 0)
-+ goto fail;
-+
-+ hout = merged_hdr->hdr;
- if (!hout) return -1; // FIXME: memory leak
-
- // If we're only merging a specified region move our iters to start at that point
- if (reg) {
-- int tid, beg, end;
-- const char *name_lim;
-+ int tid;
-+ hts_pos_t beg, end;
-
-- rtrans = rtrans_build(n, hout->n_targets, translation_tbl);
-+ rtrans = rtrans_build(n, sam_hdr_nref(hout), translation_tbl);
- if (!rtrans) goto mem_fail;
-
-- name_lim = hts_parse_reg(reg, &beg, &end);
-- if (name_lim) {
-- char *name = malloc(name_lim - reg + 1);
-- if (!name) goto mem_fail;
-- memcpy(name, reg, name_lim - reg);
-- name[name_lim - reg] = '\0';
-- tid = bam_name2id(hout, name);
-- free(name);
-- }
-- else {
-- // not parsable as a region, but possibly a sequence named "foo:a"
-- tid = bam_name2id(hout, reg);
-- beg = 0;
-- end = INT_MAX;
-- }
-- if (tid < 0) {
-- if (name_lim) fprintf(stderr, "[%s] Region \"%s\" specifies an unknown reference name\n", __func__, reg);
-- else fprintf(stderr, "[%s] Badly formatted region: \"%s\"\n", __func__, reg);
-+ if (!sam_parse_region(hout, reg, &tid, &beg, &end, 0)) {
-+ fprintf(stderr, "[%s] Badly formatted region or unknown reference name: \"%s\"\n", __func__, reg);
- goto fail;
- }
- for (i = 0; i < n; ++i) {
-- hts_idx_t *idx = sam_index_load(fp[i], fn[i]);
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx != NULL) {
-+ idx = sam_index_load2(fp[i], fn[i], fn_idx[i]);
-+ } else {
-+ idx = sam_index_load(fp[i], fn[i]);
-+ }
- // (rtrans[i*n+tid]) Look up what hout tid translates to in input tid space
-- int mapped_tid = rtrans[i*hout->n_targets+tid];
-+ int mapped_tid = rtrans[i*sam_hdr_nref(hout)+tid];
- if (idx == NULL) {
- fprintf(stderr, "[%s] failed to load index for %s. Random alignment retrieval only works for indexed BAM or CRAM files.\n",
- __func__, fn[i]);
-@@ -1334,7 +1134,7 @@
- if (mapped_tid != INT32_MIN) {
- fprintf(stderr,
- "[%s] failed to get iterator over "
-- "{%s, %d, %d, %d}\n",
-+ "{%s, %d, %"PRIhts_pos", %"PRIhts_pos"}\n",
- __func__, fn[i], mapped_tid, beg, end);
- } else {
- fprintf(stderr,
-@@ -1371,7 +1171,8 @@
- res = iter[i] ? sam_itr_next(fp[i], iter[i], h->entry.bam_record) : sam_read1(fp[i], hdr[i], h->entry.bam_record);
- if (res >= 0) {
- bam_translate(h->entry.bam_record, translation_tbl + i);
-- h->pos = ((uint64_t)h->entry.bam_record->core.tid<<32) | (uint32_t)((int32_t)h->entry.bam_record->core.pos+1);
-+ h->tid = h->entry.bam_record->core.tid;
-+ h->pos = (uint64_t)(h->entry.bam_record->core.pos + 1);
- h->rev = bam_is_rev(h->entry.bam_record);
- h->idx = idx++;
- if (g_is_by_tag) {
-@@ -1396,11 +1197,26 @@
- print_error_errno(cmd, "failed to create \"%s\"", out);
- return -1;
- }
-+ if (!no_pg && sam_hdr_add_pg(hout, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error(cmd, "failed to add PG line to the header of \"%s\"", out);
-+ sam_close(fpout);
-+ return -1;
-+ }
- if (sam_hdr_write(fpout, hout) != 0) {
- print_error_errno(cmd, "failed to write header to \"%s\"", out);
- sam_close(fpout);
- return -1;
- }
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fpout, out, hout))){
-+ sam_close(fpout);
-+ return -1;
-+ }
-+ }
- if (!(flag & MERGE_UNCOMP)) hts_set_threads(fpout, n_threads);
-
- // Begin the actual merge
-@@ -1415,11 +1231,13 @@
- if (sam_write1(fpout, hout, b) < 0) {
- print_error_errno(cmd, "failed writing to \"%s\"", out);
- sam_close(fpout);
-+ free(out_idx_fn);
- return -1;
- }
- if ((j = (iter[heap->i]? sam_itr_next(fp[heap->i], iter[heap->i], b) : sam_read1(fp[heap->i], hdr[heap->i], b))) >= 0) {
- bam_translate(b, translation_tbl + heap->i);
-- heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1);
-+ heap->tid = b->core.tid;
-+ heap->pos = (uint64_t)(b->core.pos + 1);
- heap->rev = bam_is_rev(b);
- heap->idx = idx++;
- if (g_is_by_tag) {
-@@ -1439,6 +1257,14 @@
- ks_heapadjust(heap, 0, n, heap);
- }
-
-+ if (write_index) {
-+ if (sam_idx_save(fpout) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ }
-+ free(out_idx_fn);
-+
- // Clean up and close
- if (flag & MERGE_RG) {
- for (i = 0; i != n; ++i) free(RG[i]);
-@@ -1447,11 +1273,11 @@
- for (i = 0; i < n; ++i) {
- trans_tbl_destroy(translation_tbl + i);
- hts_itr_destroy(iter[i]);
-- bam_hdr_destroy(hdr[i]);
-+ sam_hdr_destroy(hdr[i]);
- sam_close(fp[i]);
- }
-- bam_hdr_destroy(hin);
-- bam_hdr_destroy(hout);
-+ sam_hdr_destroy(hin);
-+ sam_hdr_destroy(hout);
- free_merged_header(merged_hdr);
- free(RG); free(translation_tbl); free(fp); free(heap); free(iter); free(hdr);
- if (sam_close(fpout) < 0) {
-@@ -1473,11 +1299,11 @@
- for (i = 0; i < n; ++i) {
- if (translation_tbl && translation_tbl[i].tid_trans) trans_tbl_destroy(translation_tbl + i);
- if (iter && iter[i]) hts_itr_destroy(iter[i]);
-- if (hdr && hdr[i]) bam_hdr_destroy(hdr[i]);
-+ if (hdr && hdr[i]) sam_hdr_destroy(hdr[i]);
- if (fp && fp[i]) sam_close(fp[i]);
- if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record);
- }
-- if (hout) bam_hdr_destroy(hout);
-+ if (hout) sam_hdr_destroy(hout);
- free(RG);
- free(translation_tbl);
- free(hdr);
-@@ -1485,6 +1311,7 @@
- free(heap);
- free(fp);
- free(rtrans);
-+ free(out_idx_fn);
- return -1;
- }
-
-@@ -1495,7 +1322,7 @@
- strcpy(mode, "wb");
- if (flag & MERGE_UNCOMP) strcat(mode, "0");
- else if (flag & MERGE_LEVEL1) strcat(mode, "1");
-- return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, flag, reg, 0, "merge", NULL, NULL);
-+ return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, NULL, flag, reg, 0, "merge", NULL, NULL, 0, NULL, 1);
- }
-
- static void merge_usage(FILE *to)
-@@ -1516,23 +1343,27 @@
- " -c Combine @RG headers with colliding IDs [alter IDs to be distinct]\n"
- " -p Combine @PG headers with colliding IDs [alter IDs to be distinct]\n"
- " -s VALUE Override random seed\n"
--" -b FILE List of input BAM filenames, one per line [null]\n");
-- sam_global_opt_help(to, "-.O..@");
-+" -b FILE List of input BAM filenames, one per line [null]\n"
-+" -X Use customized index files\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(to, "-.O..@..");
- }
-
- int bam_merge(int argc, char *argv[])
- {
-- int c, is_by_qname = 0, flag = 0, ret = 0, level = -1;
-+ int c, is_by_qname = 0, flag = 0, ret = 0, level = -1, has_index_file = 0;
- char *fn_headers = NULL, *reg = NULL, mode[12];
-- char *sort_tag = NULL;
-+ char *sort_tag = NULL, *arg_list = NULL;
- long random_seed = (long)time(NULL);
- char** fn = NULL;
-- int fn_size = 0;
-+ char** fn_idx = NULL;
-+ int fn_size = 0, no_pg = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
- { "threads", required_argument, NULL, '@' },
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -1541,13 +1372,13 @@
- return 0;
- }
-
-- while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:X", lopts, NULL)) >= 0) {
- switch (c) {
- case 'r': flag |= MERGE_RG; break;
- case 'f': flag |= MERGE_FORCE; break;
-- case 'h': fn_headers = strdup(optarg); break;
-+ case 'h': fn_headers = optarg; break;
- case 'n': is_by_qname = 1; break;
-- case 't': sort_tag = strdup(optarg); break;
-+ case 't': sort_tag = optarg; break;
- case '1': flag |= MERGE_LEVEL1; level = 1; break;
- case 'u': flag |= MERGE_UNCOMP; level = 0; break;
- case 'R': reg = strdup(optarg); break;
-@@ -1555,8 +1386,13 @@
- case 'c': flag |= MERGE_COMBINE_RG; break;
- case 'p': flag |= MERGE_COMBINE_PG; break;
- case 's': random_seed = atol(optarg); break;
-+ case 'X': has_index_file = 1; break; // -X flag for index filename
- case 'b': {
- // load the list of files to read
-+ if (has_index_file) {
-+ fprintf(stderr,"Error: The -b option cannot be combined with -X\n");
-+ ret = 1; goto end;
-+ }
- int nfiles;
- char **fn_read = hts_readlines(optarg, &nfiles);
- if (fn_read) {
-@@ -1573,7 +1409,7 @@
- }
- break;
- }
--
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': merge_usage(stderr); return 1;
-@@ -1585,6 +1421,11 @@
- return 1;
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("merge", "failed to create arg_list");
-+ return 1;
-+ }
-+
- srand48(random_seed);
- if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) {
- FILE *fp = fopen(argv[optind], "rb");
-@@ -1595,24 +1436,41 @@
- }
- }
-
-- int nargcfiles = argc - (optind+1);
-+ int nargcfiles = 0;
-+ if (has_index_file) { // Calculate # of input BAM files
-+ if ((argc - optind - 1) % 2 != 0) {
-+ fprintf(stderr, "Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ nargcfiles = (argc - optind - 1) / 2;
-+ } else {
-+ nargcfiles = argc - optind - 1;
-+ }
-+
- if (nargcfiles > 0) {
- // Add argc files to end of array
- fn = realloc(fn, (fn_size+nargcfiles) * sizeof(char*));
- if (fn == NULL) { ret = 1; goto end; }
- memcpy(fn+fn_size, argv + (optind+1), nargcfiles * sizeof(char*));
-+
-+ if(has_index_file) {
-+ fn_idx = realloc(fn_idx, nargcfiles * sizeof(char*));
-+ if (fn_idx == NULL) { ret = 1; goto end; }
-+ memcpy(fn_idx+fn_size, argv + nargcfiles + (optind+1), nargcfiles * sizeof(char*));
-+ }
- }
- if (fn_size+nargcfiles < 1) {
- print_error("merge", "You must specify at least one (and usually two or more) input files");
- merge_usage(stderr);
-+ free(fn_idx);
- return 1;
- }
- strcpy(mode, "wb");
- sam_open_mode(mode+1, argv[optind], NULL);
- if (level >= 0) sprintf(strchr(mode, '\0'), "%d", level < 9? level : 9);
- if (bam_merge_core2(is_by_qname, sort_tag, argv[optind], mode, fn_headers,
-- fn_size+nargcfiles, fn, flag, reg, ga.nthreads,
-- "merge", &ga.in, &ga.out) < 0)
-+ fn_size+nargcfiles, fn, fn_idx, flag, reg, ga.nthreads,
-+ "merge", &ga.in, &ga.out, ga.write_index, arg_list, no_pg) < 0)
- ret = 1;
-
- end:
-@@ -1621,8 +1479,9 @@
- for (i=0; i<fn_size; i++) free(fn[i]);
- }
- free(fn);
-+ free(fn_idx);
- free(reg);
-- free(fn_headers);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return ret;
- }
-@@ -1642,7 +1501,7 @@
-
- static inline int heap_add_read(heap1_t *heap, int nfiles, samFile **fp,
- int num_in_mem, buf_region *in_mem,
-- bam1_tag *buf, uint64_t *idx, bam_hdr_t *hout) {
-+ bam1_tag *buf, uint64_t *idx, sam_hdr_t *hout) {
- int i = heap->i, res;
- if (i < nfiles) { // read from file
- res = sam_read1(fp[i], hout, heap->entry.bam_record);
-@@ -1655,8 +1514,8 @@
- }
- }
- if (res >= 0) {
-- heap->pos = (((uint64_t)heap->entry.bam_record->core.tid<<32)
-- | (uint32_t)((int32_t)heap->entry.bam_record->core.pos+1));
-+ heap->tid = heap->entry.bam_record->core.tid;
-+ heap->pos = (uint64_t)(heap->entry.bam_record->core.pos + 1);
- heap->rev = bam_is_rev(heap->entry.bam_record);
- heap->idx = (*idx)++;
- if (g_is_by_tag) {
-@@ -1676,21 +1535,23 @@
- }
-
- static int bam_merge_simple(int by_qname, char *sort_tag, const char *out,
-- const char *mode, bam_hdr_t *hout,
-+ const char *mode, sam_hdr_t *hout,
- int n, char * const *fn, int num_in_mem,
- buf_region *in_mem, bam1_tag *buf, int n_threads,
- const char *cmd, const htsFormat *in_fmt,
-- const htsFormat *out_fmt) {
-+ const htsFormat *out_fmt, char *arg_list, int no_pg,
-+ int write_index) {
- samFile *fpout = NULL, **fp = NULL;
- heap1_t *heap = NULL;
- uint64_t idx = 0;
- int i, heap_size = n + num_in_mem;
-+ char *out_idx_fn = NULL;
-
- g_is_by_qname = by_qname;
- if (sort_tag) {
- g_is_by_tag = 1;
- g_sort_tag[0] = sort_tag[0];
-- g_sort_tag[1] = sort_tag[1];
-+ g_sort_tag[1] = sort_tag[0] ? sort_tag[1] : '\0';
- }
- if (n > 0) {
- fp = (samFile**)calloc(n, sizeof(samFile*));
-@@ -1701,7 +1562,7 @@
-
- // Open each file, read the header and put the first read into the heap
- for (i = 0; i < heap_size; i++) {
-- bam_hdr_t *hin;
-+ sam_hdr_t *hin;
- heap1_t *h = &heap[i];
-
- if (i < n) {
-@@ -1718,7 +1579,7 @@
- goto fail;
- }
- // ... and throw it away as we don't really need it
-- bam_hdr_destroy(hin);
-+ sam_hdr_destroy(hin);
- }
-
- // Get a read into the heap
-@@ -1741,6 +1602,16 @@
- return -1;
- }
-
-+ if (!no_pg && sam_hdr_add_pg(hout, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error(cmd, "failed to add PG line to the header of \"%s\"", out);
-+ sam_close(fpout);
-+ return -1;
-+ }
-+
- if (n_threads > 1) hts_set_threads(fpout, n_threads);
-
- if (sam_hdr_write(fpout, hout) != 0) {
-@@ -1749,14 +1620,20 @@
- return -1;
- }
-
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fpout, out, hout))){
-+ sam_close(fpout);
-+ return -1;
-+ }
-+ }
-+
- // Now do the merge
- ks_heapmake(heap, heap_size, heap);
- while (heap->pos != HEAP_EMPTY) {
- bam1_t *b = heap->entry.bam_record;
- if (sam_write1(fpout, hout, b) < 0) {
- print_error_errno(cmd, "failed writing to \"%s\"", out);
-- sam_close(fpout);
-- return -1;
-+ goto fail;
- }
- if (heap_add_read(heap, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) {
- assert(heap->i < n);
-@@ -1775,6 +1652,15 @@
- }
- free(fp);
- free(heap);
-+
-+ if (write_index) {
-+ if (sam_idx_save(fpout) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ free(out_idx_fn);
-+ }
-+
- if (sam_close(fpout) < 0) {
- print_error(cmd, "error closing output file");
- return -1;
-@@ -1786,11 +1672,15 @@
- fail:
- for (i = 0; i < n; i++) {
- if (fp && fp[i]) sam_close(fp[i]);
-- if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record);
-+ }
-+ for (i = 0; i < heap_size; i++) {
-+ if (heap && heap[i].i < n && heap[i].entry.bam_record)
-+ bam_destroy1(heap[i].entry.bam_record);
- }
- free(fp);
- free(heap);
- if (fpout) sam_close(fpout);
-+ free(out_idx_fn);
- return -1;
- }
-
-@@ -1811,8 +1701,13 @@
- if (t != 0) return t;
- return (int) (a.bam_record->core.flag&0xc0) - (int) (b.bam_record->core.flag&0xc0);
- } else {
-- pa = (uint64_t)a.bam_record->core.tid<<32|(a.bam_record->core.pos+1);
-- pb = (uint64_t)b.bam_record->core.tid<<32|(b.bam_record->core.pos+1);
-+ pa = a.bam_record->core.tid;
-+ pb = b.bam_record->core.tid;
-+
-+ if (pa == pb) {
-+ pa = (uint64_t)(a.bam_record->core.pos+1);
-+ pb = (uint64_t)(b.bam_record->core.pos+1);
-+ }
-
- if (pa == pb) {
- pa = bam_is_rev(a.bam_record);
-@@ -1913,7 +1808,7 @@
- size_t buf_len;
- const char *prefix;
- bam1_tag *buf;
-- const bam_hdr_t *h;
-+ const sam_hdr_t *h;
- int index;
- int error;
- int no_save;
-@@ -1921,45 +1816,99 @@
-
- // Returns 0 for success
- // -1 for failure
--static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf, const bam_hdr_t *h, int n_threads, const htsFormat *fmt)
-+static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf,
-+ const sam_hdr_t *h, int n_threads, const htsFormat *fmt,
-+ char *arg_list, int no_pg, int write_index)
- {
- size_t i;
- samFile* fp;
-+ char *out_idx_fn = NULL;
-+
- fp = sam_open_format(fn, mode, fmt);
- if (fp == NULL) return -1;
-- if (sam_hdr_write(fp, h) != 0) goto fail;
-+ if (!no_pg && sam_hdr_add_pg((sam_hdr_t *)h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ goto fail;
-+ }
-+ if (sam_hdr_write(fp, (sam_hdr_t *)h) != 0) goto fail;
-+
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fp, fn, (sam_hdr_t *)h))) goto fail;
-+ }
-+
- if (n_threads > 1) hts_set_threads(fp, n_threads);
- for (i = 0; i < l; ++i) {
-- if (sam_write1(fp, h, buf[i].bam_record) < 0) goto fail;
-+ if (sam_write1(fp, (sam_hdr_t *)h, buf[i].bam_record) < 0) goto fail;
- }
-+
-+ if (write_index) {
-+ if (sam_idx_save(fp) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ free(out_idx_fn);
-+ }
-+
-+
- if (sam_close(fp) < 0) return -1;
- return 0;
- fail:
- sam_close(fp);
-+ free(out_idx_fn);
- return -1;
- }
-
- #define NUMBASE 256
--#define STEP 8
-
--static int ks_radixsort(size_t n, bam1_tag *buf, const bam_hdr_t *h)
-+static int ks_radixsort(size_t n, bam1_tag *buf, const sam_hdr_t *h)
- {
- int curr = 0, ret = -1;
- ssize_t i;
- bam1_tag *buf_ar2[2], *bam_a, *bam_b;
-- uint64_t max_pos = 0, max_digit = 0, shift = 0;
--
-+ uint64_t max_pos = 1;
-+ uint32_t max_tid = 1, tid_bytes = 0, pos_bytes = 0, byte = 0;
-+ uint32_t tid_shift_l, tid_shift_r;
-+ int nref = sam_hdr_nref(h);
-+
-+ // Count number of bytes needed for biggest tid and pos
-+ // Notes: Add 1 to core.pos so always positive.
-+ // Convert unmapped tid (-1) to number of references so unmapped
-+ // sort to the end.
- for (i = 0; i < n; i++) {
- bam1_t *b = buf[i].bam_record;
-- int32_t tid = b->core.tid == -1 ? h->n_targets : b->core.tid;
-- buf[i].u.pos = (uint64_t)tid<<32 | (b->core.pos+1)<<1 | bam_is_rev(b);
-- if (max_pos < buf[i].u.pos)
-- max_pos = buf[i].u.pos;
-- }
--
-- while (max_pos) {
-- ++max_digit;
-- max_pos = max_pos >> 1;
-+ uint32_t tid = b->core.tid == -1 ? nref : b->core.tid;
-+ uint64_t pos = ((uint64_t)(b->core.pos + 1) << 1) | bam_is_rev(b);
-+ if (max_tid < tid)
-+ max_tid = tid;
-+ if (max_pos < pos)
-+ max_pos = pos;
-+ }
-+
-+ for (; max_pos > 0; max_pos >>= 8) pos_bytes++;
-+ for (; max_tid > 0; max_tid >>= 8) tid_bytes++;
-+ assert(pos_bytes + tid_bytes < sizeof(buf[0].u.pos_tid));
-+
-+ tid_shift_l = pos_bytes * 8;
-+ tid_shift_r = 64 - tid_shift_l;
-+
-+ // Write position and tid into bam1_tag::u::pos_tid using minimum number
-+ // of bytes required. Values are stored little-endian so that we
-+ // get a least-significant digit (byte) radix sort.
-+ for (i = 0; i < n; i++) {
-+ bam1_t *b = buf[i].bam_record;
-+ uint32_t tid = b->core.tid == -1 ? nref : b->core.tid;
-+ // 'pos' here includes as many bytes of tid as will fit
-+ // in the space remaining above pos_bytes. The rest of tid
-+ // is written out separately.
-+ uint64_t pos = (bam_is_rev(b) |
-+ ((uint64_t)(b->core.pos + 1) << 1) |
-+ (tid_shift_l < 64 ? (uint64_t) tid << tid_shift_l : 0));
-+ u64_to_le(pos, buf[i].u.pos_tid);
-+ u32_to_le(tid_shift_r < 32 ? tid >> tid_shift_r : 0,
-+ &buf[i].u.pos_tid[8]);
- }
-
- buf_ar2[0] = buf;
-@@ -1969,18 +1918,18 @@
- goto err;
- }
-
-- while (shift < max_digit){
-+ // Least-significant digit radix sort (where "digits" are bytes)
-+ for (byte = 0; byte < pos_bytes + tid_bytes; byte++) {
- size_t remainders[NUMBASE] = { 0 };
- bam_a = buf_ar2[curr]; bam_b = buf_ar2[1-curr];
- for (i = 0; i < n; ++i)
-- remainders[(bam_a[i].u.pos >> shift) % NUMBASE]++;
-+ remainders[bam_a[i].u.pos_tid[byte]]++;
- for (i = 1; i < NUMBASE; ++i)
- remainders[i] += remainders[i - 1];
- for (i = n - 1; i >= 0; i--) {
-- size_t j = --remainders[(bam_a[i].u.pos >> shift) % NUMBASE];
-+ size_t j = --remainders[bam_a[i].u.pos_tid[byte]];
- bam_b[j] = bam_a[i];
- }
-- shift += STEP;
- curr = 1 - curr;
- }
- if (curr == 1) {
-@@ -2034,10 +1983,10 @@
- return 0;
- }
-
-- if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt) < 0)
-+ if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt, NULL, 1, 0) < 0)
- w->error = errno;
- } else {
-- if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL) < 0)
-+ if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL, NULL, 1, 0) < 0)
- w->error = errno;
- }
-
-@@ -2046,7 +1995,7 @@
- }
-
- static int sort_blocks(int n_files, size_t k, bam1_tag *buf, const char *prefix,
-- const bam_hdr_t *h, int n_threads, buf_region *in_mem)
-+ const sam_hdr_t *h, int n_threads, buf_region *in_mem)
- {
- int i;
- size_t pos, rest;
-@@ -2107,6 +2056,9 @@
- @param max_mem approxiate maximum memory (very inaccurate)
- @param in_fmt input file format options
- @param out_fmt output file format and options
-+ @param arg_list command string for PG line
-+ @param no_pg if 1, do not add a new PG line
-+ @paran write_index create index for the output file
- @return 0 for successful sorting, negative on errors
-
- @discussion It may create multiple temporary subalignment files
-@@ -2116,11 +2068,12 @@
- int bam_sort_core_ext(int is_by_qname, char* sort_by_tag, const char *fn, const char *prefix,
- const char *fnout, const char *modeout,
- size_t _max_mem, int n_threads,
-- const htsFormat *in_fmt, const htsFormat *out_fmt)
-+ const htsFormat *in_fmt, const htsFormat *out_fmt,
-+ char *arg_list, int no_pg, int write_index)
- {
- int ret = -1, res, i, n_files = 0;
- size_t max_k, k, max_mem, bam_mem_offset;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- samFile *fp;
- bam1_tag *buf = NULL;
- bam1_t *b = bam_init1();
-@@ -2139,7 +2092,8 @@
- g_is_by_qname = is_by_qname;
- if (sort_by_tag) {
- g_is_by_tag = 1;
-- strncpy(g_sort_tag, sort_by_tag, 2);
-+ g_sort_tag[0] = sort_by_tag[0];
-+ g_sort_tag[1] = sort_by_tag[0] ? sort_by_tag[1] : '\0';
- }
-
- max_mem = _max_mem * n_threads;
-@@ -2162,14 +2116,15 @@
- else
- new_so = "coordinate";
-
-- if (sam_hdr_change_HD(header, "SO", new_so) != 0) {
-- print_error("sort",
-- "failed to change sort order header to '%s'\n", new_so);
-+ if ((-1 == sam_hdr_update_hd(header, "SO", new_so))
-+ && (-1 == sam_hdr_add_line(header, "HD", "VN", SAM_FORMAT_VERSION, "SO", new_so, NULL))
-+ ) {
-+ print_error("sort", "failed to change sort order header to '%s'\n", new_so);
- goto err;
- }
-- if (sam_hdr_change_HD(header, "GO", NULL) != 0) {
-- print_error("sort",
-- "failed to delete group order header\n");
-+
-+ if (-1 == sam_hdr_remove_tag_hd(header, "GO")) {
-+ print_error("sort", "failed to delete group order header\n");
- goto err;
- }
-
-@@ -2252,7 +2207,7 @@
-
- // write the final output
- if (n_files == 0 && num_in_mem < 2) { // a single block
-- if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt) != 0) {
-+ if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt, arg_list, no_pg, write_index) != 0) {
- print_error_errno("sort", "failed to create \"%s\"", fnout);
- goto err;
- }
-@@ -2269,7 +2224,8 @@
- }
- if (bam_merge_simple(is_by_qname, sort_by_tag, fnout, modeout, header,
- n_files, fns, num_in_mem, in_mem, buf,
-- n_threads, "sort", in_fmt, out_fmt) < 0) {
-+ n_threads, "sort", in_fmt, out_fmt, arg_list,
-+ no_pg, write_index) < 0) {
- // Propagate bam_merge_simple() failure; it has already emitted a
- // message explaining the failure, so no further message is needed.
- goto err;
-@@ -2293,7 +2249,7 @@
- free(buf);
- free(bam_mem);
- free(in_mem);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- if (fp) sam_close(fp);
- return ret;
- }
-@@ -2305,7 +2261,7 @@
- char *fnout = calloc(strlen(prefix) + 4 + 1, 1);
- if (!fnout) return -1;
- sprintf(fnout, "%s.bam", prefix);
-- ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL);
-+ ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL, NULL, 1, 0);
- free(fnout);
- return ret;
- }
-@@ -2320,8 +2276,9 @@
- " -n Sort by read name\n"
- " -t TAG Sort by value of TAG. Uses position as secondary index (or read name if -n is set)\n"
- " -o FILE Write final output to FILE rather than standard output\n"
--" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n");
-- sam_global_opt_help(fp, "-.O..@");
-+" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(fp, "-.O..@-.");
- }
-
- static void complain_about_memory_setting(size_t max_mem) {
-@@ -2344,8 +2301,8 @@
- int bam_sort(int argc, char *argv[])
- {
- size_t max_mem = SORT_DEFAULT_MEGS_PER_THREAD << 20;
-- int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1;
-- char* sort_tag = NULL;
-+ int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1, no_pg = 0;
-+ char* sort_tag = NULL, *arg_list = NULL;
- char *fnout = "-", modeout[12];
- kstring_t tmpprefix = { 0, 0, NULL };
- struct stat st;
-@@ -2354,6 +2311,7 @@
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
- { "threads", required_argument, NULL, '@' },
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -2361,7 +2319,7 @@
- switch (c) {
- case 'o': fnout = optarg; o_seen = 1; break;
- case 'n': is_by_qname = 1; break;
-- case 't': sort_tag = strdup(optarg); break;
-+ case 't': sort_tag = optarg; break;
- case 'm': {
- char *q;
- max_mem = strtol(optarg, &q, 0);
-@@ -2372,6 +2330,7 @@
- }
- case 'T': kputs(optarg, &tmpprefix); break;
- case 'l': level = atoi(optarg); break;
-+ case 1: no_pg = 1; break;
-
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
-@@ -2395,6 +2354,16 @@
- goto sort_end;
- }
-
-+ if (ga.write_index && (is_by_qname || sort_tag)) {
-+ fprintf(stderr, "[W::bam_sort] Ignoring --write-index as it only works for position sorted files.\n");
-+ ga.write_index = 0;
-+ }
-+
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("sort", "failed to create arg_list");
-+ return 1;
-+ }
-+
- if (max_mem < (SORT_MIN_MEGS_PER_THREAD << 20)) {
- complain_about_memory_setting(max_mem);
- ret = EXIT_FAILURE;
-@@ -2417,7 +2386,7 @@
-
- ret = bam_sort_core_ext(is_by_qname, sort_tag, (nargs > 0)? argv[optind] : "-",
- tmpprefix.s, fnout, modeout, max_mem, ga.nthreads,
-- &ga.in, &ga.out);
-+ &ga.in, &ga.out, arg_list, no_pg, ga.write_index);
- if (ret >= 0)
- ret = EXIT_SUCCESS;
- else {
-@@ -2432,6 +2401,7 @@
-
- sort_end:
- free(tmpprefix.s);
-+ free(arg_list);
- sam_global_args_free(&ga);
-
- return ret;
---- python-pysam.orig/samtools/bam_sort.c.pysam.c
-+++ python-pysam/samtools/bam_sort.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_sort.c -- sorting and merging.
-
-- Copyright (C) 2008-2016 Genome Research Ltd.
-+ Copyright (C) 2008-2019 Genome Research Ltd.
- Portions copyright (C) 2009-2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -46,6 +46,7 @@
- #include "htslib/klist.h"
- #include "htslib/kstring.h"
- #include "htslib/sam.h"
-+#include "htslib/hts_endian.h"
- #include "sam_opts.h"
- #include "samtools.h"
-
-@@ -57,7 +58,7 @@
- bam1_t *bam_record;
- union {
- const uint8_t *tag;
-- uint64_t pos;
-+ uint8_t pos_tid[12];
- } u;
- } bam1_tag;
-
-@@ -124,12 +125,12 @@
- return *pa? 1 : *pb? -1 : 0;
- }
-
--#define HEAP_EMPTY UINT64_MAX
-+#define HEAP_EMPTY (UINT64_MAX >> 1)
-
- typedef struct {
- int i;
-- uint32_t rev;
-- uint64_t pos, idx;
-+ uint32_t tid;
-+ uint64_t pos:63, rev:1, idx;
- bam1_tag entry;
- } heap1_t;
-
-@@ -155,6 +156,7 @@
- fb = b.entry.bam_record->core.flag & 0xc0;
- if (fa != fb) return fa > fb;
- } else {
-+ if (a.tid != b.tid) return a.tid > b.tid;
- if (a.pos != b.pos) return a.pos > b.pos;
- if (a.rev != b.rev) return a.rev > b.rev;
- }
-@@ -166,8 +168,7 @@
- KSORT_INIT(heap, heap1_t, heap_lt)
-
- typedef struct merged_header {
-- kstring_t out_hd;
-- kstring_t out_sq;
-+ sam_hdr_t *hdr;
- kstring_t out_rg;
- kstring_t out_pg;
- kstring_t out_co;
-@@ -189,80 +190,6 @@
- bool lost_coord_sort;
- } trans_tbl_t;
-
--/* Something to look like a regmatch_t */
--typedef struct hdr_match {
-- ptrdiff_t rm_so;
-- ptrdiff_t rm_eo;
--} hdr_match_t;
--
--/*
-- * Search for header lines of a particular record type.
-- *
-- * This replaces a regex search for something like /^@SQ.*\tSN:([^\t]+).*$/
-- * but is much quicker. The locations found are returned in *matches,
-- * which has a signature the same as that of a regmatch_t.
-- *
-- * rec is the record type to match (i.e. @HD, @SQ, @PG or @RG)
-- * tag is a tag type in the record to match (SN for @SQ, ID for @PG or @RG)
-- *
-- * The location of the record (if found) is returned in matches[0]
-- * If tag is not NULL, the record is searched for the presence of the
-- * given tag. If found, the location of the value is returned in matches[1].
-- * If the tag isn't found then the record is ignored and the search resumes
-- * on the next header line.
-- *
-- * For simplicity, some assumptions are made about rec and tag:
-- * rec should include the leading '@' sign and be three characters long.
-- * tag should be exactly two characters long.
-- * These are always string constants when this is called below, so we don't
-- * bother to check here.
-- *
-- * Returns 0 if a match was found, -1 if not.
-- */
--
--
--static int hdr_line_match(const char *text, const char *rec,
-- const char *tag, hdr_match_t *matches) {
-- const char *line_start, *line_end = text;
-- const char *tag_start, *tag_end;
--
-- for (;;) {
-- // Find record, ensure either at start of text or follows '\n'
-- line_start = strstr(line_end, rec);
-- while (line_start && line_start > text && *(line_start - 1) != '\n') {
-- line_start = strstr(line_start + 3, rec);
-- }
-- if (!line_start) return -1;
--
-- // Find end of header line
-- line_end = strchr(line_start, '\n');
-- if (!line_end) line_end = line_start + strlen(line_start);
--
-- matches[0].rm_so = line_start - text;
-- matches[0].rm_eo = line_end - text;
-- if (!tag) return 0; // Match found if not looking for tag.
--
-- for (tag_start = line_start + 3; tag_start < line_end; tag_start++) {
-- // Find possible tag start. Hacky but quick.
-- while (*tag_start > '\n') tag_start++;
--
-- // Check it
-- if (tag_start[0] == '\t'
-- && strncmp(tag_start + 1, tag, 2) == 0
-- && tag_start[3] == ':') {
-- // Found tag, record location and return.
-- tag_end = tag_start + 4;
-- while (*tag_end && *tag_end != '\t' && *tag_end != '\n')
-- ++tag_end;
-- matches[1].rm_so = tag_start - text + 4;
-- matches[1].rm_eo = tag_end - text;
-- return 0;
-- }
-- }
-- // Couldn't find tag, try again from end of current record.
-- }
--}
--
- static void trans_tbl_destroy(trans_tbl_t *tbl) {
- khiter_t iter;
-
-@@ -301,6 +228,9 @@
- merged_hdr = calloc(1, sizeof(*merged_hdr));
- if (merged_hdr == NULL) return NULL;
-
-+ merged_hdr->hdr = sam_hdr_init();
-+ if (!merged_hdr->hdr) goto fail;
-+
- merged_hdr->targets_sz = 16;
- merged_hdr->target_name = malloc(merged_hdr->targets_sz
- * sizeof(*merged_hdr->target_name));
-@@ -328,6 +258,7 @@
- kh_destroy(c2i, merged_hdr->sq_tids);
- free(merged_hdr->target_name);
- free(merged_hdr->target_len);
-+ sam_hdr_destroy(merged_hdr->hdr);
- free(merged_hdr);
- return NULL;
- }
-@@ -340,12 +271,6 @@
- return kputsn(src + from, to - from, dest) != to - from;
- }
-
--// Append a header line match to kstring
--static inline int match_to_ks(const char *src, const hdr_match_t *match,
-- kstring_t *dest) {
-- return range_to_ks(src, match->rm_so, match->rm_eo, dest);
--}
--
- // Append a kstring to a kstring
- static inline int ks_to_ks(kstring_t *src, kstring_t *dest) {
- return kputsn(ks_str(src), ks_len(src), dest) != ks_len(src);
-@@ -387,48 +312,32 @@
- */
-
- static int trans_tbl_add_hd(merged_header_t* merged_hdr,
-- bam_hdr_t *translate) {
-- hdr_match_t match = {0, 0};
-+ sam_hdr_t *translate) {
-+ kstring_t hd_line = { 0, 0, NULL };
-+ int res;
-
- // TODO: handle case when @HD needs merging.
- if (merged_hdr->have_hd) return 0;
-
-- if (hdr_line_match(translate->text, "@HD", NULL, &match) != 0) {
-- return 0;
-+ res = sam_hdr_find_hd(translate, &hd_line);
-+ if (res < -1) {
-+ print_error("merge", "failed to get @HD line from header");
-+ return -1;
- }
-
-- if (match_to_ks(translate->text, &match, &merged_hdr->out_hd)) goto memfail;
-- if (kputc('\n', &merged_hdr->out_hd) == EOF) goto memfail;
-- merged_hdr->have_hd = true;
--
-- return 0;
--
-- memfail:
-- perror(__func__);
-- return -1;
--}
-+ if (res < 0) // Not found
-+ return 0;
-
--static inline int grow_target_list(merged_header_t* merged_hdr) {
-- size_t new_size;
-- char **new_names;
-- uint32_t *new_len;
--
-- new_size = merged_hdr->targets_sz * 2;
-- new_names = realloc(merged_hdr->target_name, sizeof(*new_names) * new_size);
-- if (!new_names) goto fail;
-- merged_hdr->target_name = new_names;
--
-- new_len = realloc(merged_hdr->target_len, sizeof(*new_len) * new_size);
-- if (!new_len) goto fail;
-- merged_hdr->target_len = new_len;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, hd_line.s, hd_line.l) < 0) {
-+ print_error("merge", "failed to add @HD line to new header");
-+ free(hd_line.s);
-+ return -1;
-+ }
-
-- merged_hdr->targets_sz = new_size;
-+ free(hd_line.s);
-+ merged_hdr->have_hd = true;
-
- return 0;
--
-- fail:
-- perror(__func__);
-- return -1;
- }
-
- /*
-@@ -446,54 +355,48 @@
- * Returns 0 on success, -1 on failure.
- */
-
--static int trans_tbl_add_sq(merged_header_t* merged_hdr, bam_hdr_t *translate,
-+static int trans_tbl_add_sq(merged_header_t* merged_hdr, sam_hdr_t *translate,
- trans_tbl_t* tbl) {
--
-- kstring_t *out_text = &merged_hdr->out_sq;
-- khash_t(c2i)* sq_tids = merged_hdr->sq_tids;
-- hdr_match_t *new_sq_matches = NULL;
-- char *text;
-- hdr_match_t matches[2];
- int32_t i;
-- int32_t old_n_targets = merged_hdr->n_targets;
-- khiter_t iter;
-- int min_tid = -1;
-+ int min_tid = -1, res;
-+ kstring_t sq_line = { 0, 0, NULL }, sq_sn = { 0, 0, NULL };
-
- // Fill in the tid part of the translation table, adding new targets
- // to the merged header as we go.
-
-- for (i = 0; i < translate->n_targets; ++i) {
-+ for (i = 0; i < sam_hdr_nref(translate); ++i) {
-+ int trans_tid;
-+ sq_sn.l = 0;
-+ res = sam_hdr_find_tag_pos(translate, "SQ", i, "SN", &sq_sn);
-+ if (res < 0) {
-+ print_error("merge", "failed to get @SQ SN #%d from header", i + 1);
-+ goto fail;
-+ }
-
-- // Check if it's a new target.
-- iter = kh_get(c2i, sq_tids, translate->target_name[i]);
-+ trans_tid = sam_hdr_name2tid(merged_hdr->hdr, sq_sn.s);
-+ if (trans_tid < -1) {
-+ print_error("merge", "failed to lookup ref");
-+ goto fail;
-+ }
-
-- if (iter == kh_end(sq_tids)) {
-- int ret;
-+ if (trans_tid < 0) {
- // Append missing entries to out_hdr
--
-- if (merged_hdr->n_targets == merged_hdr->targets_sz) {
-- if (grow_target_list(merged_hdr)) goto fail;
-+ sq_line.l = 0;
-+ res = sam_hdr_find_line_id(translate, "SQ", "SN", sq_sn.s, &sq_line);
-+ if (res < 0) {
-+ print_error("merge", "failed to get @SQ SN:%s from header", sq_sn.s);
-+ goto fail;
- }
-
-- merged_hdr->target_name[merged_hdr->n_targets] = strdup(translate->target_name[i]);
-- if (merged_hdr->target_name[merged_hdr->n_targets] == NULL) goto memfail;
-- merged_hdr->target_len[merged_hdr->n_targets] = translate->target_len[i];
--
-- // Record the new identifier for reference below,
-- // and when building the ttable for other inputs.
-- iter = kh_put(c2i, sq_tids,
-- merged_hdr->target_name[merged_hdr->n_targets], &ret);
-- if (ret < 0) {
-- free(merged_hdr->target_name[merged_hdr->n_targets]);
-- goto memfail;
-- }
-- assert(ret > 0); // Should not be in hash already.
-+ trans_tid = sam_hdr_nref(merged_hdr->hdr);
-
-- kh_value(sq_tids, iter) = merged_hdr->n_targets;
-- tbl->tid_trans[i] = merged_hdr->n_targets++;
-- } else {
-- tbl->tid_trans[i] = kh_value(sq_tids, iter);
-+ res = sam_hdr_add_lines(merged_hdr->hdr, sq_line.s, sq_line.l);
-+ if (res < 0) {
-+ print_error("merge", "failed to add @SQ SN:%s to new header", sq_sn.s);
-+ goto fail;
-+ }
- }
-+ tbl->tid_trans[i] = trans_tid;
-
- if (tbl->tid_trans[i] > min_tid) {
- min_tid = tbl->tid_trans[i];
-@@ -502,78 +405,14 @@
- }
- }
-
-- if (merged_hdr->n_targets == old_n_targets)
-- return 0; // Everything done if no new targets.
--
-- // Otherwise, find @SQ lines in translate->text for all newly added targets.
--
-- new_sq_matches = malloc((merged_hdr->n_targets - old_n_targets)
-- * sizeof(*new_sq_matches));
-- if (new_sq_matches == NULL) goto memfail;
--
-- for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) {
-- new_sq_matches[i].rm_so = new_sq_matches[i].rm_eo = -1;
-- }
--
-- text = translate->text;
-- while (hdr_line_match(text, "@SQ", "SN", matches) == 0) {
-- // matches[0] is whole line, matches[1] is SN value.
--
-- // This is a bit disgusting, but avoids a copy...
-- char c = text[matches[1].rm_eo];
-- int idx;
--
-- text[matches[1].rm_eo] = '\0';
--
-- // Look up the SN value in the sq_tids hash.
-- iter = kh_get(c2i, sq_tids, text + matches[1].rm_so);
-- text[matches[1].rm_eo] = c; // restore text
--
-- if (iter == kh_end(sq_tids)) {
-- // Warn about this, but it's not really fatal.
-- fprintf(samtools_stderr, "[W::%s] @SQ SN (%.*s) found in text header but not binary header.\n",
-- __func__,
-- (int) (matches[1].rm_eo - matches[1].rm_so),
-- text + matches[1].rm_so);
-- text += matches[0].rm_eo;
-- continue; // Skip to next
-- }
--
-- idx = kh_value(sq_tids, iter);
-- if (idx >= old_n_targets) {
-- // is a new SQ, so record position so we can add it to out_text.
-- assert(idx < merged_hdr->n_targets);
-- ptrdiff_t off = text - translate->text;
-- new_sq_matches[idx - old_n_targets].rm_so = matches[0].rm_so + off;
-- new_sq_matches[idx - old_n_targets].rm_eo = matches[0].rm_eo + off;
-- }
--
-- // Carry on searching from end of current match
-- text += matches[0].rm_eo;
-- }
--
-- // Copy the @SQ headers found and recreate any missing from binary header.
-- for (i = 0; i < merged_hdr->n_targets - old_n_targets; i++) {
-- if (new_sq_matches[i].rm_so >= 0) {
-- if (match_to_ks(translate->text, &new_sq_matches[i], out_text))
-- goto memfail;
-- if (kputc('\n', out_text) == EOF) goto memfail;
-- } else {
-- if (kputs("@SQ\tSN:", out_text) == EOF ||
-- kputs(merged_hdr->target_name[i + old_n_targets], out_text) == EOF ||
-- kputs("\tLN:", out_text) == EOF ||
-- kputuw(merged_hdr->target_len[i + old_n_targets], out_text) == EOF ||
-- kputc('\n', out_text) == EOF) goto memfail;
-- }
-- }
-+ free(sq_line.s);
-+ free(sq_sn.s);
-
-- free(new_sq_matches);
- return 0;
-
-- memfail:
-- perror(__func__);
- fail:
-- free(new_sq_matches);
-+ free(sq_line.s);
-+ free(sq_sn.s);
- return -1;
- }
-
-@@ -594,29 +433,30 @@
- *
- */
-
--static klist_t(hdrln) * trans_rg_pg(bool is_rg, bam_hdr_t *translate,
-+static klist_t(hdrln) * trans_rg_pg(bool is_rg, sam_hdr_t *translate,
- bool merge, khash_t(cset)* known_ids,
- khash_t(c2c)* id_map, char *override) {
-- hdr_match_t matches[2];
- khiter_t iter;
-- const char *text = translate->text;
-- const char *rec_type = is_rg ? "@RG" : "@PG";
-+ int num_ids, i;
-+ const char *rec_type = is_rg ? "RG" : "PG";
- klist_t(hdrln) *hdr_lines;
-
- hdr_lines = kl_init(hdrln);
-
- // Search through translate's header
-- while (hdr_line_match(text, rec_type, "ID", matches) == 0) {
-- // matches[0] is the whole @RG/PG line; matches[1] is the ID field value
-+ num_ids = sam_hdr_count_lines(translate, rec_type);
-+ if (num_ids < 0)
-+ goto fail;
-
-+ for (i = 0; i < num_ids; i++) {
- kstring_t orig_id = { 0, 0, NULL }; // ID in original header
- kstring_t transformed_id = { 0, 0, NULL }; // ID in output header
- char *map_value; // Value to store in id_map
- bool id_changed; // Have we changed the ID?
- bool not_found_in_output; // ID isn't in the output header (yet)
-
-- // Take a copy of the ID as we'll need it for a hash key.
-- if (match_to_ks(text, &matches[1], &orig_id)) goto memfail;
-+ if (sam_hdr_find_tag_pos(translate, rec_type, i, "ID", &orig_id) < 0)
-+ goto fail;
-
- // is our matched ID in our output ID set already?
- iter = kh_get(cset, known_ids, ks_str(&orig_id));
-@@ -653,18 +493,38 @@
-
- // Does this line need to go into our output header?
- if (not_found_in_output) {
--
- // Take matched line and replace ID with transformed_id
- kstring_t new_hdr_line = { 0, 0, NULL };
-+ if (sam_hdr_find_line_id(translate, rec_type,
-+ "ID", ks_str(&orig_id), &new_hdr_line) < 0){
-+ goto fail;
-+ }
-+
-+ if (id_changed) {
-+ char *idp = strstr(ks_str(&new_hdr_line), "\tID:"), *id_end;
-+ ptrdiff_t id_offset, id_len;
-+ if (!idp) {
-+ print_error("merge", "failed to find ID in \"%s\"\n",
-+ ks_str(&new_hdr_line));
-+ goto fail;
-+ }
-+ idp += 4;
-+ for (id_end = idp; *id_end >= '\n'; id_end++) {}
-+
-+ id_offset = idp - new_hdr_line.s;
-+ id_len = id_end - idp;
-
-- if (!id_changed) { // Can just copy
-- if (match_to_ks(text, &matches[0], &new_hdr_line)) goto memfail;
-- } else { // Substitute new name for original
-- if (range_to_ks(text, matches[0].rm_so, matches[1].rm_so,
-- &new_hdr_line)) goto memfail;
-- if (ks_to_ks(&transformed_id, &new_hdr_line)) goto memfail;
-- if (range_to_ks(text, matches[1].rm_eo, matches[0].rm_eo,
-- &new_hdr_line)) goto memfail;
-+ if (id_len < transformed_id.l) {
-+ if (ks_resize(&new_hdr_line, new_hdr_line.l + transformed_id.l - id_len))
-+ goto fail;
-+ }
-+ if (id_len != transformed_id.l) {
-+ memmove(new_hdr_line.s + id_offset + transformed_id.l,
-+ new_hdr_line.s + id_offset + id_len,
-+ new_hdr_line.l - id_offset - id_len + 1);
-+ }
-+ memcpy(new_hdr_line.s + id_offset, transformed_id.s,
-+ transformed_id.l);
- }
-
- // append line to output linked list
-@@ -688,8 +548,6 @@
- int in_there = 0;
- iter = kh_put(c2c, id_map, ks_release(&orig_id), &in_there);
- kh_value(id_map, iter) = map_value;
--
-- text += matches[0].rm_eo; // next!
- }
-
- // If there are no RG lines in the file and we are overriding add one
-@@ -726,6 +584,7 @@
-
- memfail:
- perror(__func__);
-+ fail:
- if (hdr_lines) kl_destroy(hdrln, hdr_lines);
- return NULL;
- }
-@@ -823,16 +682,18 @@
- * Returns 0 on success, -1 on failure.
- */
-
--static int trans_tbl_init(merged_header_t* merged_hdr, bam_hdr_t* translate,
-+static int trans_tbl_init(merged_header_t* merged_hdr, sam_hdr_t* translate,
- trans_tbl_t* tbl, bool merge_rg, bool merge_pg,
- bool copy_co, char* rg_override)
- {
-+ kstring_t lines = { 0, 0, NULL };
- klist_t(hdrln) *rg_list = NULL;
- klist_t(hdrln) *pg_list = NULL;
-
-- tbl->n_targets = translate->n_targets;
-+ tbl->n_targets = sam_hdr_nref(translate);
- tbl->rg_trans = tbl->pg_trans = NULL;
-- tbl->tid_trans = (int*)calloc(translate->n_targets, sizeof(int));
-+ tbl->tid_trans = (int*)calloc(tbl->n_targets ? tbl->n_targets : 1,
-+ sizeof(int));
- if (tbl->tid_trans == NULL) goto memfail;
- tbl->rg_trans = kh_init(c2c);
- if (tbl->rg_trans == NULL) goto memfail;
-@@ -861,6 +722,7 @@
- goto fail;
-
- // Fix-up PP: tags in the new @PG records and add to output
-+ lines.l = 0;
- if (finish_rg_pg(false, pg_list, tbl->pg_trans, &merged_hdr->out_pg))
- goto fail;
-
-@@ -869,22 +731,22 @@
-
- if (copy_co) {
- // Just append @CO headers without translation
-- const char *line, *end_pointer;
-- for (line = translate->text; *line; line = end_pointer + 1) {
-- end_pointer = strchr(line, '\n');
-- if (strncmp(line, "@CO", 3) == 0) {
-- if (end_pointer) {
-- if (kputsn(line, end_pointer - line + 1, &merged_hdr->out_co) == EOF)
-- goto memfail;
-- } else { // Last line with no trailing '\n'
-- if (kputs(line, &merged_hdr->out_co) == EOF) goto memfail;
-- if (kputc('\n', &merged_hdr->out_co) == EOF) goto memfail;
-- }
-- }
-- if (end_pointer == NULL) break;
-+ int num_co = sam_hdr_count_lines(translate, "CO"), i;
-+ if (num_co < 0)
-+ goto fail;
-+
-+ for (i = 0; i < num_co; i++) {
-+ if (sam_hdr_find_line_pos(translate, "CO", i, &lines) < 0)
-+ goto fail;
-+ if (ks_to_ks(&lines, &merged_hdr->out_co))
-+ goto fail;
-+ if (kputc('\n', &merged_hdr->out_co) < 0)
-+ goto fail;
- }
- }
-
-+ free(lines.s);
-+
- return 0;
-
- memfail:
-@@ -893,80 +755,22 @@
- trans_tbl_destroy(tbl);
- if (rg_list) kl_destroy(hdrln, rg_list);
- if (pg_list) kl_destroy(hdrln, pg_list);
-+ free(lines.s);
- return -1;
- }
-
--static inline void move_kstr_to_text(char **text, kstring_t *ks) {
-- memcpy(*text, ks_str(ks), ks_len(ks));
-- *text += ks_len(ks);
-- **text = '\0';
-- free(ks_release(ks));
--}
--
--/*
-- * Populate a bam_hdr_t struct from data in a merged_header_t.
-- */
--
--static bam_hdr_t * finish_merged_header(merged_header_t *merged_hdr) {
-- size_t txt_sz;
-- char *text;
-- bam_hdr_t *hdr;
--
-- // Check output text size
-- txt_sz = (ks_len(&merged_hdr->out_hd)
-- + ks_len(&merged_hdr->out_sq)
-- + ks_len(&merged_hdr->out_rg)
-- + ks_len(&merged_hdr->out_pg)
-- + ks_len(&merged_hdr->out_co));
-- if (txt_sz >= INT32_MAX) {
-- fprintf(samtools_stderr, "[%s] Output header text too long\n", __func__);
-- return NULL;
-- }
--
-- // Allocate new header
-- hdr = bam_hdr_init();
-- if (hdr == NULL) goto memfail;
--
-- // Transfer targets arrays to new header
-- hdr->n_targets = merged_hdr->n_targets;
-- if (hdr->n_targets > 0) {
-- // Try to shrink targets arrays to correct size
-- hdr->target_name = realloc(merged_hdr->target_name,
-- hdr->n_targets * sizeof(char*));
-- if (!hdr->target_name) hdr->target_name = merged_hdr->target_name;
--
-- hdr->target_len = realloc(merged_hdr->target_len,
-- hdr->n_targets * sizeof(uint32_t));
-- if (!hdr->target_len) hdr->target_len = merged_hdr->target_len;
--
-- // These have either been freed by realloc() or, in the unlikely
-- // event that failed, have had their ownership transferred to hdr
-- merged_hdr->target_name = NULL;
-- merged_hdr->target_len = NULL;
-- }
-- else {
-- hdr->target_name = NULL;
-- hdr->target_len = NULL;
-- }
--
-- // Allocate text
-- text = hdr->text = malloc(txt_sz + 1);
-- if (!text) goto memfail;
--
-- // Put header text in order @HD, @SQ, @RG, @PG, @CO
-- move_kstr_to_text(&text, &merged_hdr->out_hd);
-- move_kstr_to_text(&text, &merged_hdr->out_sq);
-- move_kstr_to_text(&text, &merged_hdr->out_rg);
-- move_kstr_to_text(&text, &merged_hdr->out_pg);
-- move_kstr_to_text(&text, &merged_hdr->out_co);
-- hdr->l_text = txt_sz;
--
-- return hdr;
-+static int finish_merged_header(merged_header_t *merged_hdr) {
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_rg),
-+ ks_len(&merged_hdr->out_rg)) < 0)
-+ return -1;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_pg),
-+ ks_len(&merged_hdr->out_pg)) < 0)
-+ return -1;
-+ if (sam_hdr_add_lines(merged_hdr->hdr, ks_c_str(&merged_hdr->out_co),
-+ ks_len(&merged_hdr->out_co)) < 0)
-+ return -1;
-
-- memfail:
-- perror(__func__);
-- bam_hdr_destroy(hdr);
-- return NULL;
-+ return 0;
- }
-
- /*
-@@ -981,8 +785,6 @@
- size_t i;
- khiter_t iter;
- if (!merged_hdr) return;
-- free(ks_release(&merged_hdr->out_hd));
-- free(ks_release(&merged_hdr->out_sq));
- free(ks_release(&merged_hdr->out_rg));
- free(ks_release(&merged_hdr->out_pg));
- free(ks_release(&merged_hdr->out_co));
-@@ -1149,25 +951,30 @@
- @param cmd command name (used in print_error() etc)
- @param in_fmt format options for input files
- @param out_fmt output file format and options
-+ @param write_index create the index, together with the output file
-+ @param arg_list command string for PG line
-+ @param no_pg if 1, do not add a new PG line
- @discussion Padding information may NOT correctly maintained. This
- function is NOT thread safe.
- */
- int bam_merge_core2(int by_qname, char* sort_tag, const char *out, const char *mode,
-- const char *headers, int n, char * const *fn, int flag,
-- const char *reg, int n_threads, const char *cmd,
-- const htsFormat *in_fmt, const htsFormat *out_fmt)
-+ const char *headers, int n, char * const *fn, char * const *fn_idx,
-+ int flag, const char *reg, int n_threads, const char *cmd,
-+ const htsFormat *in_fmt, const htsFormat *out_fmt, int write_index,
-+ char *arg_list, int no_pg)
- {
- samFile *fpout, **fp = NULL;
- heap1_t *heap = NULL;
-- bam_hdr_t *hout = NULL;
-- bam_hdr_t *hin = NULL;
-+ sam_hdr_t *hout = NULL;
-+ sam_hdr_t *hin = NULL;
- int i, j, *RG_len = NULL;
- uint64_t idx = 0;
- char **RG = NULL;
- hts_itr_t **iter = NULL;
-- bam_hdr_t **hdr = NULL;
-+ sam_hdr_t **hdr = NULL;
- trans_tbl_t *translation_tbl = NULL;
- int *rtrans = NULL;
-+ char *out_idx_fn = NULL;
- merged_header_t *merged_hdr = init_merged_header();
- if (!merged_hdr) return -1;
-
-@@ -1190,7 +997,7 @@
- if (sort_tag) {
- g_is_by_tag = 1;
- g_sort_tag[0] = sort_tag[0];
-- g_sort_tag[1] = sort_tag[1];
-+ g_sort_tag[1] = sort_tag[0] ? sort_tag[1] : '\0';
- }
-
- fp = (samFile**)calloc(n, sizeof(samFile*));
-@@ -1199,7 +1006,7 @@
- if (!heap) goto mem_fail;
- iter = (hts_itr_t**)calloc(n, sizeof(hts_itr_t*));
- if (!iter) goto mem_fail;
-- hdr = (bam_hdr_t**)calloc(n, sizeof(bam_hdr_t*));
-+ hdr = (sam_hdr_t**)calloc(n, sizeof(sam_hdr_t*));
- if (!hdr) goto mem_fail;
- translation_tbl = (trans_tbl_t*)calloc(n, sizeof(trans_tbl_t));
- if (!translation_tbl) goto mem_fail;
-@@ -1236,7 +1043,7 @@
-
- // open and read the header from each file
- for (i = 0; i < n; ++i) {
-- bam_hdr_t *hin;
-+ sam_hdr_t *hin;
- fp[i] = sam_open_format(fn[i], "r", in_fmt);
- if (fp[i] == NULL) {
- print_error_errno(cmd, "fail to open \"%s\"", fn[i]);
-@@ -1257,7 +1064,7 @@
- // TODO sam_itr_next() doesn't yet work for SAM files,
- // so for those keep the headers around for use with sam_read1()
- if (hts_get_format(fp[i])->format == sam) hdr[i] = hin;
-- else { bam_hdr_destroy(hin); hdr[i] = NULL; }
-+ else { sam_hdr_destroy(hin); hdr[i] = NULL; }
-
- if ((translation_tbl+i)->lost_coord_sort && !by_qname) {
- fprintf(samtools_stderr, "[bam_merge_core] Order of targets in file %s caused coordinate sort to be lost\n", fn[i]);
-@@ -1286,41 +1093,34 @@
- }
-
- // Transform the header into standard form
-- hout = finish_merged_header(merged_hdr);
-+ if (finish_merged_header(merged_hdr) < 0)
-+ goto fail;
-+
-+ hout = merged_hdr->hdr;
- if (!hout) return -1; // FIXME: memory leak
-
- // If we're only merging a specified region move our iters to start at that point
- if (reg) {
-- int tid, beg, end;
-- const char *name_lim;
-+ int tid;
-+ hts_pos_t beg, end;
-
-- rtrans = rtrans_build(n, hout->n_targets, translation_tbl);
-+ rtrans = rtrans_build(n, sam_hdr_nref(hout), translation_tbl);
- if (!rtrans) goto mem_fail;
-
-- name_lim = hts_parse_reg(reg, &beg, &end);
-- if (name_lim) {
-- char *name = malloc(name_lim - reg + 1);
-- if (!name) goto mem_fail;
-- memcpy(name, reg, name_lim - reg);
-- name[name_lim - reg] = '\0';
-- tid = bam_name2id(hout, name);
-- free(name);
-- }
-- else {
-- // not parsable as a region, but possibly a sequence named "foo:a"
-- tid = bam_name2id(hout, reg);
-- beg = 0;
-- end = INT_MAX;
-- }
-- if (tid < 0) {
-- if (name_lim) fprintf(samtools_stderr, "[%s] Region \"%s\" specifies an unknown reference name\n", __func__, reg);
-- else fprintf(samtools_stderr, "[%s] Badly formatted region: \"%s\"\n", __func__, reg);
-+ if (!sam_parse_region(hout, reg, &tid, &beg, &end, 0)) {
-+ fprintf(samtools_stderr, "[%s] Badly formatted region or unknown reference name: \"%s\"\n", __func__, reg);
- goto fail;
- }
- for (i = 0; i < n; ++i) {
-- hts_idx_t *idx = sam_index_load(fp[i], fn[i]);
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx != NULL) {
-+ idx = sam_index_load2(fp[i], fn[i], fn_idx[i]);
-+ } else {
-+ idx = sam_index_load(fp[i], fn[i]);
-+ }
- // (rtrans[i*n+tid]) Look up what hout tid translates to in input tid space
-- int mapped_tid = rtrans[i*hout->n_targets+tid];
-+ int mapped_tid = rtrans[i*sam_hdr_nref(hout)+tid];
- if (idx == NULL) {
- fprintf(samtools_stderr, "[%s] failed to load index for %s. Random alignment retrieval only works for indexed BAM or CRAM files.\n",
- __func__, fn[i]);
-@@ -1336,7 +1136,7 @@
- if (mapped_tid != INT32_MIN) {
- fprintf(samtools_stderr,
- "[%s] failed to get iterator over "
-- "{%s, %d, %d, %d}\n",
-+ "{%s, %d, %"PRIhts_pos", %"PRIhts_pos"}\n",
- __func__, fn[i], mapped_tid, beg, end);
- } else {
- fprintf(samtools_stderr,
-@@ -1373,7 +1173,8 @@
- res = iter[i] ? sam_itr_next(fp[i], iter[i], h->entry.bam_record) : sam_read1(fp[i], hdr[i], h->entry.bam_record);
- if (res >= 0) {
- bam_translate(h->entry.bam_record, translation_tbl + i);
-- h->pos = ((uint64_t)h->entry.bam_record->core.tid<<32) | (uint32_t)((int32_t)h->entry.bam_record->core.pos+1);
-+ h->tid = h->entry.bam_record->core.tid;
-+ h->pos = (uint64_t)(h->entry.bam_record->core.pos + 1);
- h->rev = bam_is_rev(h->entry.bam_record);
- h->idx = idx++;
- if (g_is_by_tag) {
-@@ -1398,11 +1199,26 @@
- print_error_errno(cmd, "failed to create \"%s\"", out);
- return -1;
- }
-+ if (!no_pg && sam_hdr_add_pg(hout, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error(cmd, "failed to add PG line to the header of \"%s\"", out);
-+ sam_close(fpout);
-+ return -1;
-+ }
- if (sam_hdr_write(fpout, hout) != 0) {
- print_error_errno(cmd, "failed to write header to \"%s\"", out);
- sam_close(fpout);
- return -1;
- }
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fpout, out, hout))){
-+ sam_close(fpout);
-+ return -1;
-+ }
-+ }
- if (!(flag & MERGE_UNCOMP)) hts_set_threads(fpout, n_threads);
-
- // Begin the actual merge
-@@ -1417,11 +1233,13 @@
- if (sam_write1(fpout, hout, b) < 0) {
- print_error_errno(cmd, "failed writing to \"%s\"", out);
- sam_close(fpout);
-+ free(out_idx_fn);
- return -1;
- }
- if ((j = (iter[heap->i]? sam_itr_next(fp[heap->i], iter[heap->i], b) : sam_read1(fp[heap->i], hdr[heap->i], b))) >= 0) {
- bam_translate(b, translation_tbl + heap->i);
-- heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1);
-+ heap->tid = b->core.tid;
-+ heap->pos = (uint64_t)(b->core.pos + 1);
- heap->rev = bam_is_rev(b);
- heap->idx = idx++;
- if (g_is_by_tag) {
-@@ -1441,6 +1259,14 @@
- ks_heapadjust(heap, 0, n, heap);
- }
-
-+ if (write_index) {
-+ if (sam_idx_save(fpout) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ }
-+ free(out_idx_fn);
-+
- // Clean up and close
- if (flag & MERGE_RG) {
- for (i = 0; i != n; ++i) free(RG[i]);
-@@ -1449,11 +1275,11 @@
- for (i = 0; i < n; ++i) {
- trans_tbl_destroy(translation_tbl + i);
- hts_itr_destroy(iter[i]);
-- bam_hdr_destroy(hdr[i]);
-+ sam_hdr_destroy(hdr[i]);
- sam_close(fp[i]);
- }
-- bam_hdr_destroy(hin);
-- bam_hdr_destroy(hout);
-+ sam_hdr_destroy(hin);
-+ sam_hdr_destroy(hout);
- free_merged_header(merged_hdr);
- free(RG); free(translation_tbl); free(fp); free(heap); free(iter); free(hdr);
- if (sam_close(fpout) < 0) {
-@@ -1475,11 +1301,11 @@
- for (i = 0; i < n; ++i) {
- if (translation_tbl && translation_tbl[i].tid_trans) trans_tbl_destroy(translation_tbl + i);
- if (iter && iter[i]) hts_itr_destroy(iter[i]);
-- if (hdr && hdr[i]) bam_hdr_destroy(hdr[i]);
-+ if (hdr && hdr[i]) sam_hdr_destroy(hdr[i]);
- if (fp && fp[i]) sam_close(fp[i]);
- if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record);
- }
-- if (hout) bam_hdr_destroy(hout);
-+ if (hout) sam_hdr_destroy(hout);
- free(RG);
- free(translation_tbl);
- free(hdr);
-@@ -1487,6 +1313,7 @@
- free(heap);
- free(fp);
- free(rtrans);
-+ free(out_idx_fn);
- return -1;
- }
-
-@@ -1497,7 +1324,7 @@
- strcpy(mode, "wb");
- if (flag & MERGE_UNCOMP) strcat(mode, "0");
- else if (flag & MERGE_LEVEL1) strcat(mode, "1");
-- return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, flag, reg, 0, "merge", NULL, NULL);
-+ return bam_merge_core2(by_qname, NULL, out, mode, headers, n, fn, NULL, flag, reg, 0, "merge", NULL, NULL, 0, NULL, 1);
- }
-
- static void merge_usage(FILE *to)
-@@ -1518,23 +1345,27 @@
- " -c Combine @RG headers with colliding IDs [alter IDs to be distinct]\n"
- " -p Combine @PG headers with colliding IDs [alter IDs to be distinct]\n"
- " -s VALUE Override random seed\n"
--" -b FILE List of input BAM filenames, one per line [null]\n");
-- sam_global_opt_help(to, "-.O..@");
-+" -b FILE List of input BAM filenames, one per line [null]\n"
-+" -X Use customized index files\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(to, "-.O..@..");
- }
-
- int bam_merge(int argc, char *argv[])
- {
-- int c, is_by_qname = 0, flag = 0, ret = 0, level = -1;
-+ int c, is_by_qname = 0, flag = 0, ret = 0, level = -1, has_index_file = 0;
- char *fn_headers = NULL, *reg = NULL, mode[12];
-- char *sort_tag = NULL;
-+ char *sort_tag = NULL, *arg_list = NULL;
- long random_seed = (long)time(NULL);
- char** fn = NULL;
-- int fn_size = 0;
-+ char** fn_idx = NULL;
-+ int fn_size = 0, no_pg = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
- { "threads", required_argument, NULL, '@' },
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -1543,13 +1374,13 @@
- return 0;
- }
-
-- while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "h:nru1R:f@:l:cps:b:O:t:X", lopts, NULL)) >= 0) {
- switch (c) {
- case 'r': flag |= MERGE_RG; break;
- case 'f': flag |= MERGE_FORCE; break;
-- case 'h': fn_headers = strdup(optarg); break;
-+ case 'h': fn_headers = optarg; break;
- case 'n': is_by_qname = 1; break;
-- case 't': sort_tag = strdup(optarg); break;
-+ case 't': sort_tag = optarg; break;
- case '1': flag |= MERGE_LEVEL1; level = 1; break;
- case 'u': flag |= MERGE_UNCOMP; level = 0; break;
- case 'R': reg = strdup(optarg); break;
-@@ -1557,8 +1388,13 @@
- case 'c': flag |= MERGE_COMBINE_RG; break;
- case 'p': flag |= MERGE_COMBINE_PG; break;
- case 's': random_seed = atol(optarg); break;
-+ case 'X': has_index_file = 1; break; // -X flag for index filename
- case 'b': {
- // load the list of files to read
-+ if (has_index_file) {
-+ fprintf(samtools_stderr,"Error: The -b option cannot be combined with -X\n");
-+ ret = 1; goto end;
-+ }
- int nfiles;
- char **fn_read = hts_readlines(optarg, &nfiles);
- if (fn_read) {
-@@ -1575,7 +1411,7 @@
- }
- break;
- }
--
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': merge_usage(samtools_stderr); return 1;
-@@ -1587,6 +1423,11 @@
- return 1;
- }
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("merge", "failed to create arg_list");
-+ return 1;
-+ }
-+
- srand48(random_seed);
- if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) {
- FILE *fp = fopen(argv[optind], "rb");
-@@ -1597,24 +1438,41 @@
- }
- }
-
-- int nargcfiles = argc - (optind+1);
-+ int nargcfiles = 0;
-+ if (has_index_file) { // Calculate # of input BAM files
-+ if ((argc - optind - 1) % 2 != 0) {
-+ fprintf(samtools_stderr, "Odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ nargcfiles = (argc - optind - 1) / 2;
-+ } else {
-+ nargcfiles = argc - optind - 1;
-+ }
-+
- if (nargcfiles > 0) {
- // Add argc files to end of array
- fn = realloc(fn, (fn_size+nargcfiles) * sizeof(char*));
- if (fn == NULL) { ret = 1; goto end; }
- memcpy(fn+fn_size, argv + (optind+1), nargcfiles * sizeof(char*));
-+
-+ if(has_index_file) {
-+ fn_idx = realloc(fn_idx, nargcfiles * sizeof(char*));
-+ if (fn_idx == NULL) { ret = 1; goto end; }
-+ memcpy(fn_idx+fn_size, argv + nargcfiles + (optind+1), nargcfiles * sizeof(char*));
-+ }
- }
- if (fn_size+nargcfiles < 1) {
- print_error("merge", "You must specify at least one (and usually two or more) input files");
- merge_usage(samtools_stderr);
-+ free(fn_idx);
- return 1;
- }
- strcpy(mode, "wb");
- sam_open_mode(mode+1, argv[optind], NULL);
- if (level >= 0) sprintf(strchr(mode, '\0'), "%d", level < 9? level : 9);
- if (bam_merge_core2(is_by_qname, sort_tag, argv[optind], mode, fn_headers,
-- fn_size+nargcfiles, fn, flag, reg, ga.nthreads,
-- "merge", &ga.in, &ga.out) < 0)
-+ fn_size+nargcfiles, fn, fn_idx, flag, reg, ga.nthreads,
-+ "merge", &ga.in, &ga.out, ga.write_index, arg_list, no_pg) < 0)
- ret = 1;
-
- end:
-@@ -1623,8 +1481,9 @@
- for (i=0; i<fn_size; i++) free(fn[i]);
- }
- free(fn);
-+ free(fn_idx);
- free(reg);
-- free(fn_headers);
-+ free(arg_list);
- sam_global_args_free(&ga);
- return ret;
- }
-@@ -1644,7 +1503,7 @@
-
- static inline int heap_add_read(heap1_t *heap, int nfiles, samFile **fp,
- int num_in_mem, buf_region *in_mem,
-- bam1_tag *buf, uint64_t *idx, bam_hdr_t *hout) {
-+ bam1_tag *buf, uint64_t *idx, sam_hdr_t *hout) {
- int i = heap->i, res;
- if (i < nfiles) { // read from file
- res = sam_read1(fp[i], hout, heap->entry.bam_record);
-@@ -1657,8 +1516,8 @@
- }
- }
- if (res >= 0) {
-- heap->pos = (((uint64_t)heap->entry.bam_record->core.tid<<32)
-- | (uint32_t)((int32_t)heap->entry.bam_record->core.pos+1));
-+ heap->tid = heap->entry.bam_record->core.tid;
-+ heap->pos = (uint64_t)(heap->entry.bam_record->core.pos + 1);
- heap->rev = bam_is_rev(heap->entry.bam_record);
- heap->idx = (*idx)++;
- if (g_is_by_tag) {
-@@ -1678,21 +1537,23 @@
- }
-
- static int bam_merge_simple(int by_qname, char *sort_tag, const char *out,
-- const char *mode, bam_hdr_t *hout,
-+ const char *mode, sam_hdr_t *hout,
- int n, char * const *fn, int num_in_mem,
- buf_region *in_mem, bam1_tag *buf, int n_threads,
- const char *cmd, const htsFormat *in_fmt,
-- const htsFormat *out_fmt) {
-+ const htsFormat *out_fmt, char *arg_list, int no_pg,
-+ int write_index) {
- samFile *fpout = NULL, **fp = NULL;
- heap1_t *heap = NULL;
- uint64_t idx = 0;
- int i, heap_size = n + num_in_mem;
-+ char *out_idx_fn = NULL;
-
- g_is_by_qname = by_qname;
- if (sort_tag) {
- g_is_by_tag = 1;
- g_sort_tag[0] = sort_tag[0];
-- g_sort_tag[1] = sort_tag[1];
-+ g_sort_tag[1] = sort_tag[0] ? sort_tag[1] : '\0';
- }
- if (n > 0) {
- fp = (samFile**)calloc(n, sizeof(samFile*));
-@@ -1703,7 +1564,7 @@
-
- // Open each file, read the header and put the first read into the heap
- for (i = 0; i < heap_size; i++) {
-- bam_hdr_t *hin;
-+ sam_hdr_t *hin;
- heap1_t *h = &heap[i];
-
- if (i < n) {
-@@ -1720,7 +1581,7 @@
- goto fail;
- }
- // ... and throw it away as we don't really need it
-- bam_hdr_destroy(hin);
-+ sam_hdr_destroy(hin);
- }
-
- // Get a read into the heap
-@@ -1743,6 +1604,16 @@
- return -1;
- }
-
-+ if (!no_pg && sam_hdr_add_pg(hout, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error(cmd, "failed to add PG line to the header of \"%s\"", out);
-+ sam_close(fpout);
-+ return -1;
-+ }
-+
- if (n_threads > 1) hts_set_threads(fpout, n_threads);
-
- if (sam_hdr_write(fpout, hout) != 0) {
-@@ -1751,14 +1622,20 @@
- return -1;
- }
-
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fpout, out, hout))){
-+ sam_close(fpout);
-+ return -1;
-+ }
-+ }
-+
- // Now do the merge
- ks_heapmake(heap, heap_size, heap);
- while (heap->pos != HEAP_EMPTY) {
- bam1_t *b = heap->entry.bam_record;
- if (sam_write1(fpout, hout, b) < 0) {
- print_error_errno(cmd, "failed writing to \"%s\"", out);
-- sam_close(fpout);
-- return -1;
-+ goto fail;
- }
- if (heap_add_read(heap, n, fp, num_in_mem, in_mem, buf, &idx, hout) < 0) {
- assert(heap->i < n);
-@@ -1777,6 +1654,15 @@
- }
- free(fp);
- free(heap);
-+
-+ if (write_index) {
-+ if (sam_idx_save(fpout) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ free(out_idx_fn);
-+ }
-+
- if (sam_close(fpout) < 0) {
- print_error(cmd, "error closing output file");
- return -1;
-@@ -1788,11 +1674,15 @@
- fail:
- for (i = 0; i < n; i++) {
- if (fp && fp[i]) sam_close(fp[i]);
-- if (heap && heap[i].entry.bam_record) bam_destroy1(heap[i].entry.bam_record);
-+ }
-+ for (i = 0; i < heap_size; i++) {
-+ if (heap && heap[i].i < n && heap[i].entry.bam_record)
-+ bam_destroy1(heap[i].entry.bam_record);
- }
- free(fp);
- free(heap);
- if (fpout) sam_close(fpout);
-+ free(out_idx_fn);
- return -1;
- }
-
-@@ -1813,8 +1703,13 @@
- if (t != 0) return t;
- return (int) (a.bam_record->core.flag&0xc0) - (int) (b.bam_record->core.flag&0xc0);
- } else {
-- pa = (uint64_t)a.bam_record->core.tid<<32|(a.bam_record->core.pos+1);
-- pb = (uint64_t)b.bam_record->core.tid<<32|(b.bam_record->core.pos+1);
-+ pa = a.bam_record->core.tid;
-+ pb = b.bam_record->core.tid;
-+
-+ if (pa == pb) {
-+ pa = (uint64_t)(a.bam_record->core.pos+1);
-+ pb = (uint64_t)(b.bam_record->core.pos+1);
-+ }
-
- if (pa == pb) {
- pa = bam_is_rev(a.bam_record);
-@@ -1915,7 +1810,7 @@
- size_t buf_len;
- const char *prefix;
- bam1_tag *buf;
-- const bam_hdr_t *h;
-+ const sam_hdr_t *h;
- int index;
- int error;
- int no_save;
-@@ -1923,45 +1818,99 @@
-
- // Returns 0 for success
- // -1 for failure
--static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf, const bam_hdr_t *h, int n_threads, const htsFormat *fmt)
-+static int write_buffer(const char *fn, const char *mode, size_t l, bam1_tag *buf,
-+ const sam_hdr_t *h, int n_threads, const htsFormat *fmt,
-+ char *arg_list, int no_pg, int write_index)
- {
- size_t i;
- samFile* fp;
-+ char *out_idx_fn = NULL;
-+
- fp = sam_open_format(fn, mode, fmt);
- if (fp == NULL) return -1;
-- if (sam_hdr_write(fp, h) != 0) goto fail;
-+ if (!no_pg && sam_hdr_add_pg((sam_hdr_t *)h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ goto fail;
-+ }
-+ if (sam_hdr_write(fp, (sam_hdr_t *)h) != 0) goto fail;
-+
-+ if (write_index) {
-+ if (!(out_idx_fn = auto_index(fp, fn, (sam_hdr_t *)h))) goto fail;
-+ }
-+
- if (n_threads > 1) hts_set_threads(fp, n_threads);
- for (i = 0; i < l; ++i) {
-- if (sam_write1(fp, h, buf[i].bam_record) < 0) goto fail;
-+ if (sam_write1(fp, (sam_hdr_t *)h, buf[i].bam_record) < 0) goto fail;
- }
-+
-+ if (write_index) {
-+ if (sam_idx_save(fp) < 0) {
-+ print_error_errno("merge", "writing index failed");
-+ goto fail;
-+ }
-+ free(out_idx_fn);
-+ }
-+
-+
- if (sam_close(fp) < 0) return -1;
- return 0;
- fail:
- sam_close(fp);
-+ free(out_idx_fn);
- return -1;
- }
-
- #define NUMBASE 256
--#define STEP 8
-
--static int ks_radixsort(size_t n, bam1_tag *buf, const bam_hdr_t *h)
-+static int ks_radixsort(size_t n, bam1_tag *buf, const sam_hdr_t *h)
- {
- int curr = 0, ret = -1;
- ssize_t i;
- bam1_tag *buf_ar2[2], *bam_a, *bam_b;
-- uint64_t max_pos = 0, max_digit = 0, shift = 0;
--
-+ uint64_t max_pos = 1;
-+ uint32_t max_tid = 1, tid_bytes = 0, pos_bytes = 0, byte = 0;
-+ uint32_t tid_shift_l, tid_shift_r;
-+ int nref = sam_hdr_nref(h);
-+
-+ // Count number of bytes needed for biggest tid and pos
-+ // Notes: Add 1 to core.pos so always positive.
-+ // Convert unmapped tid (-1) to number of references so unmapped
-+ // sort to the end.
- for (i = 0; i < n; i++) {
- bam1_t *b = buf[i].bam_record;
-- int32_t tid = b->core.tid == -1 ? h->n_targets : b->core.tid;
-- buf[i].u.pos = (uint64_t)tid<<32 | (b->core.pos+1)<<1 | bam_is_rev(b);
-- if (max_pos < buf[i].u.pos)
-- max_pos = buf[i].u.pos;
-- }
--
-- while (max_pos) {
-- ++max_digit;
-- max_pos = max_pos >> 1;
-+ uint32_t tid = b->core.tid == -1 ? nref : b->core.tid;
-+ uint64_t pos = ((uint64_t)(b->core.pos + 1) << 1) | bam_is_rev(b);
-+ if (max_tid < tid)
-+ max_tid = tid;
-+ if (max_pos < pos)
-+ max_pos = pos;
-+ }
-+
-+ for (; max_pos > 0; max_pos >>= 8) pos_bytes++;
-+ for (; max_tid > 0; max_tid >>= 8) tid_bytes++;
-+ assert(pos_bytes + tid_bytes < sizeof(buf[0].u.pos_tid));
-+
-+ tid_shift_l = pos_bytes * 8;
-+ tid_shift_r = 64 - tid_shift_l;
-+
-+ // Write position and tid into bam1_tag::u::pos_tid using minimum number
-+ // of bytes required. Values are stored little-endian so that we
-+ // get a least-significant digit (byte) radix sort.
-+ for (i = 0; i < n; i++) {
-+ bam1_t *b = buf[i].bam_record;
-+ uint32_t tid = b->core.tid == -1 ? nref : b->core.tid;
-+ // 'pos' here includes as many bytes of tid as will fit
-+ // in the space remaining above pos_bytes. The rest of tid
-+ // is written out separately.
-+ uint64_t pos = (bam_is_rev(b) |
-+ ((uint64_t)(b->core.pos + 1) << 1) |
-+ (tid_shift_l < 64 ? (uint64_t) tid << tid_shift_l : 0));
-+ u64_to_le(pos, buf[i].u.pos_tid);
-+ u32_to_le(tid_shift_r < 32 ? tid >> tid_shift_r : 0,
-+ &buf[i].u.pos_tid[8]);
- }
-
- buf_ar2[0] = buf;
-@@ -1971,18 +1920,18 @@
- goto err;
- }
-
-- while (shift < max_digit){
-+ // Least-significant digit radix sort (where "digits" are bytes)
-+ for (byte = 0; byte < pos_bytes + tid_bytes; byte++) {
- size_t remainders[NUMBASE] = { 0 };
- bam_a = buf_ar2[curr]; bam_b = buf_ar2[1-curr];
- for (i = 0; i < n; ++i)
-- remainders[(bam_a[i].u.pos >> shift) % NUMBASE]++;
-+ remainders[bam_a[i].u.pos_tid[byte]]++;
- for (i = 1; i < NUMBASE; ++i)
- remainders[i] += remainders[i - 1];
- for (i = n - 1; i >= 0; i--) {
-- size_t j = --remainders[(bam_a[i].u.pos >> shift) % NUMBASE];
-+ size_t j = --remainders[bam_a[i].u.pos_tid[byte]];
- bam_b[j] = bam_a[i];
- }
-- shift += STEP;
- curr = 1 - curr;
- }
- if (curr == 1) {
-@@ -2036,10 +1985,10 @@
- return 0;
- }
-
-- if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt) < 0)
-+ if (write_buffer(name, "wcx1", w->buf_len, w->buf, w->h, 0, &fmt, NULL, 1, 0) < 0)
- w->error = errno;
- } else {
-- if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL) < 0)
-+ if (write_buffer(name, "wbx1", w->buf_len, w->buf, w->h, 0, NULL, NULL, 1, 0) < 0)
- w->error = errno;
- }
-
-@@ -2048,7 +1997,7 @@
- }
-
- static int sort_blocks(int n_files, size_t k, bam1_tag *buf, const char *prefix,
-- const bam_hdr_t *h, int n_threads, buf_region *in_mem)
-+ const sam_hdr_t *h, int n_threads, buf_region *in_mem)
- {
- int i;
- size_t pos, rest;
-@@ -2109,6 +2058,9 @@
- @param max_mem approxiate maximum memory (very inaccurate)
- @param in_fmt input file format options
- @param out_fmt output file format and options
-+ @param arg_list command string for PG line
-+ @param no_pg if 1, do not add a new PG line
-+ @paran write_index create index for the output file
- @return 0 for successful sorting, negative on errors
-
- @discussion It may create multiple temporary subalignment files
-@@ -2118,11 +2070,12 @@
- int bam_sort_core_ext(int is_by_qname, char* sort_by_tag, const char *fn, const char *prefix,
- const char *fnout, const char *modeout,
- size_t _max_mem, int n_threads,
-- const htsFormat *in_fmt, const htsFormat *out_fmt)
-+ const htsFormat *in_fmt, const htsFormat *out_fmt,
-+ char *arg_list, int no_pg, int write_index)
- {
- int ret = -1, res, i, n_files = 0;
- size_t max_k, k, max_mem, bam_mem_offset;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- samFile *fp;
- bam1_tag *buf = NULL;
- bam1_t *b = bam_init1();
-@@ -2141,7 +2094,8 @@
- g_is_by_qname = is_by_qname;
- if (sort_by_tag) {
- g_is_by_tag = 1;
-- strncpy(g_sort_tag, sort_by_tag, 2);
-+ g_sort_tag[0] = sort_by_tag[0];
-+ g_sort_tag[1] = sort_by_tag[0] ? sort_by_tag[1] : '\0';
- }
-
- max_mem = _max_mem * n_threads;
-@@ -2164,14 +2118,15 @@
- else
- new_so = "coordinate";
-
-- if (sam_hdr_change_HD(header, "SO", new_so) != 0) {
-- print_error("sort",
-- "failed to change sort order header to '%s'\n", new_so);
-+ if ((-1 == sam_hdr_update_hd(header, "SO", new_so))
-+ && (-1 == sam_hdr_add_line(header, "HD", "VN", SAM_FORMAT_VERSION, "SO", new_so, NULL))
-+ ) {
-+ print_error("sort", "failed to change sort order header to '%s'\n", new_so);
- goto err;
- }
-- if (sam_hdr_change_HD(header, "GO", NULL) != 0) {
-- print_error("sort",
-- "failed to delete group order header\n");
-+
-+ if (-1 == sam_hdr_remove_tag_hd(header, "GO")) {
-+ print_error("sort", "failed to delete group order header\n");
- goto err;
- }
-
-@@ -2254,7 +2209,7 @@
-
- // write the final output
- if (n_files == 0 && num_in_mem < 2) { // a single block
-- if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt) != 0) {
-+ if (write_buffer(fnout, modeout, k, buf, header, n_threads, out_fmt, arg_list, no_pg, write_index) != 0) {
- print_error_errno("sort", "failed to create \"%s\"", fnout);
- goto err;
- }
-@@ -2271,7 +2226,8 @@
- }
- if (bam_merge_simple(is_by_qname, sort_by_tag, fnout, modeout, header,
- n_files, fns, num_in_mem, in_mem, buf,
-- n_threads, "sort", in_fmt, out_fmt) < 0) {
-+ n_threads, "sort", in_fmt, out_fmt, arg_list,
-+ no_pg, write_index) < 0) {
- // Propagate bam_merge_simple() failure; it has already emitted a
- // message explaining the failure, so no further message is needed.
- goto err;
-@@ -2295,7 +2251,7 @@
- free(buf);
- free(bam_mem);
- free(in_mem);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- if (fp) sam_close(fp);
- return ret;
- }
-@@ -2307,7 +2263,7 @@
- char *fnout = calloc(strlen(prefix) + 4 + 1, 1);
- if (!fnout) return -1;
- sprintf(fnout, "%s.bam", prefix);
-- ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL);
-+ ret = bam_sort_core_ext(is_by_qname, NULL, fn, prefix, fnout, "wb", max_mem, 0, NULL, NULL, NULL, 1, 0);
- free(fnout);
- return ret;
- }
-@@ -2322,8 +2278,9 @@
- " -n Sort by read name\n"
- " -t TAG Sort by value of TAG. Uses position as secondary index (or read name if -n is set)\n"
- " -o FILE Write final output to FILE rather than standard output\n"
--" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n");
-- sam_global_opt_help(fp, "-.O..@");
-+" -T PREFIX Write temporary files to PREFIX.nnnn.bam\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(fp, "-.O..@-.");
- }
-
- static void complain_about_memory_setting(size_t max_mem) {
-@@ -2346,8 +2303,8 @@
- int bam_sort(int argc, char *argv[])
- {
- size_t max_mem = SORT_DEFAULT_MEGS_PER_THREAD << 20;
-- int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1;
-- char* sort_tag = NULL;
-+ int c, nargs, is_by_qname = 0, ret, o_seen = 0, level = -1, no_pg = 0;
-+ char* sort_tag = NULL, *arg_list = NULL;
- char *fnout = "-", modeout[12];
- kstring_t tmpprefix = { 0, 0, NULL };
- struct stat st;
-@@ -2356,6 +2313,7 @@
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 0, '@'),
- { "threads", required_argument, NULL, '@' },
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -2363,7 +2321,7 @@
- switch (c) {
- case 'o': fnout = optarg; o_seen = 1; break;
- case 'n': is_by_qname = 1; break;
-- case 't': sort_tag = strdup(optarg); break;
-+ case 't': sort_tag = optarg; break;
- case 'm': {
- char *q;
- max_mem = strtol(optarg, &q, 0);
-@@ -2374,6 +2332,7 @@
- }
- case 'T': kputs(optarg, &tmpprefix); break;
- case 'l': level = atoi(optarg); break;
-+ case 1: no_pg = 1; break;
-
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
-@@ -2397,6 +2356,16 @@
- goto sort_end;
- }
-
-+ if (ga.write_index && (is_by_qname || sort_tag)) {
-+ fprintf(samtools_stderr, "[W::bam_sort] Ignoring --write-index as it only works for position sorted files.\n");
-+ ga.write_index = 0;
-+ }
-+
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("sort", "failed to create arg_list");
-+ return 1;
-+ }
-+
- if (max_mem < (SORT_MIN_MEGS_PER_THREAD << 20)) {
- complain_about_memory_setting(max_mem);
- ret = EXIT_FAILURE;
-@@ -2419,7 +2388,7 @@
-
- ret = bam_sort_core_ext(is_by_qname, sort_tag, (nargs > 0)? argv[optind] : "-",
- tmpprefix.s, fnout, modeout, max_mem, ga.nthreads,
-- &ga.in, &ga.out);
-+ &ga.in, &ga.out, arg_list, no_pg, ga.write_index);
- if (ret >= 0)
- ret = EXIT_SUCCESS;
- else {
-@@ -2434,6 +2403,7 @@
-
- sort_end:
- free(tmpprefix.s);
-+ free(arg_list);
- sam_global_args_free(&ga);
-
- return ret;
---- python-pysam.orig/samtools/bam_split.c
-+++ python-pysam/samtools/bam_split.c
-@@ -1,6 +1,6 @@
- /* bam_split.c -- split subcommand.
-
-- Copyright (C) 2013-2016 Genome Research Ltd.
-+ Copyright (C) 2013-2016,2018-2019 Genome Research Ltd.
-
- Author: Martin Pollard <mp15@sanger.ac.uk>
-
-@@ -24,7 +24,6 @@
-
- #include <config.h>
-
--#include <htslib/sam.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
-@@ -32,6 +31,8 @@
- #include <limits.h>
- #include <unistd.h>
- #include <regex.h>
-+#include <assert.h>
-+#include <htslib/sam.h>
- #include <htslib/khash.h>
- #include <htslib/kstring.h>
- #include <htslib/cram.h>
-@@ -43,11 +44,12 @@
- KHASH_MAP_INIT_STR(c2i, int)
-
- struct parsed_opts {
-- char* merged_input_name;
-- char* unaccounted_header_name;
-- char* unaccounted_name;
-- char* output_format_string;
-+ const char *merged_input_name;
-+ const char *unaccounted_header_name;
-+ const char *unaccounted_name;
-+ const char *output_format_string;
- bool verbose;
-+ int no_pg;
- sam_global_args ga;
- };
-
-@@ -55,16 +57,18 @@
-
- struct state {
- samFile* merged_input_file;
-- bam_hdr_t* merged_input_header;
-+ sam_hdr_t* merged_input_header;
- samFile* unaccounted_file;
-- bam_hdr_t* unaccounted_header;
-+ sam_hdr_t* unaccounted_header;
- size_t output_count;
- char** rg_id;
-+ char **rg_index_file_name;
- char **rg_output_file_name;
- samFile** rg_output_file;
-- bam_hdr_t** rg_output_header;
-+ sam_hdr_t** rg_output_header;
- kh_c2i_t* rg_hash;
- htsThreadPool p;
-+ int write_index;
- };
-
- typedef struct state state_t;
-@@ -75,14 +79,15 @@
- static void usage(FILE *write_to)
- {
- fprintf(write_to,
--"Usage: samtools split [-u <unaccounted.bam>[:<unaccounted_header.sam>]]\n"
-+"Usage: samtools split [-u <unaccounted.bam>] [-h <unaccounted_header.sam>]\n"
- " [-f <format_string>] [-v] <merged.bam>\n"
- "Options:\n"
- " -f STRING output filename format string [\"%%*_%%#.%%.\"]\n"
- " -u FILE1 put reads with no RG tag or an unrecognised RG tag in FILE1\n"
--" -u FILE1:FILE2 ...and override the header with FILE2\n"
--" -v verbose output\n");
-- sam_global_opt_help(write_to, "-....@");
-+" -h FILE2 ... and override the header with FILE2 (-u file only)\n"
-+" -v verbose output\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(write_to, "-....@..");
- fprintf(write_to,
- "\n"
- "Format string expansions:\n"
-@@ -99,11 +104,11 @@
- {
- if (argc == 1) { usage(stdout); return NULL; }
-
-- const char* optstring = "vf:u:@:";
-- char* delim;
-+ const char *optstring = "vf:h:u:@:";
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -116,20 +121,19 @@
- while ((opt = getopt_long(argc, argv, optstring, lopts, NULL)) != -1) {
- switch (opt) {
- case 'f':
-- retval->output_format_string = strdup(optarg);
-- if (! retval->output_format_string ) { perror("cannot allocate output format string memory"); return NULL; }
-+ retval->output_format_string = optarg;
-+ break;
-+ case 'h':
-+ retval->unaccounted_header_name = optarg;
- break;
- case 'v':
- retval->verbose = true;
- break;
- case 'u':
-- retval->unaccounted_name = strdup(optarg);
-- if (! retval->unaccounted_name ) { perror("cannot allocate string memory"); return NULL; }
-- if ((delim = strchr(retval->unaccounted_name, ':')) != NULL) {
-- *delim = '\0';
-- retval->unaccounted_header_name = strdup(delim+1);
-- if (! retval->unaccounted_header_name ) { perror("cannot allocate string memory"); return NULL; }
-- }
-+ retval->unaccounted_name = optarg;
-+ break;
-+ case 1:
-+ retval->no_pg = 1;
- break;
- default:
- if (parse_sam_global_opt(opt, optarg, lopts, &retval->ga) == 0) break;
-@@ -141,7 +145,7 @@
- }
- }
-
-- if (retval->output_format_string == NULL) retval->output_format_string = strdup("%*_%#.%.");
-+ if (retval->output_format_string == NULL) retval->output_format_string = "%*_%#.%.";
-
- argc -= optind;
- argv += optind;
-@@ -153,8 +157,7 @@
- return NULL;
- }
-
-- retval->merged_input_name = strdup(argv[0]);
-- if (! retval->merged_input_name ) { perror("cannot allocate string memory"); return NULL; }
-+ retval->merged_input_name = argv[0];
-
- return retval;
- }
-@@ -166,176 +169,110 @@
- const char* pointer = format_string;
- const char* next;
- while ((next = strchr(pointer, '%')) != NULL) {
-- kputsn(pointer, next-pointer, &str);
-+ if (kputsn(pointer, next-pointer, &str) < 0) goto memfail;
- ++next;
- switch (*next) {
- case '%':
-- kputc('%', &str);
-+ if (kputc('%', &str) < 0) goto memfail;
- break;
- case '*':
-- kputs(basename, &str);
-+ if (kputs(basename, &str) < 0) goto memfail;
- break;
- case '#':
-- kputl(rg_idx, &str);
-+ if (kputl(rg_idx, &str) < 0) goto memfail;
- break;
- case '!':
-- kputs(rg_id, &str);
-+ if (kputs(rg_id, &str) < 0) goto memfail;
- break;
- case '.':
- // Only really need to cope with sam, bam, cram
-- if (format->format != unknown_format)
-- kputs(hts_format_file_extension(format), &str);
-- else
-- kputs("bam", &str);
-+ if (format->format != unknown_format) {
-+ if (kputs(hts_format_file_extension(format), &str) < 0)
-+ goto memfail;
-+ } else {
-+ if (kputs("bam", &str) < 0) goto memfail;
-+ }
- break;
- case '\0':
-- // Error is: fprintf(stderr, "bad format string, trailing %%\n");
-- free(str.s);
-- return NULL;
-+ print_error("split", "Trailing %% in filename format string");
-+ goto fail;
- default:
- // Error is: fprintf(stderr, "bad format string, unknown format specifier\n");
-- free(str.s);
-- return NULL;
-+ print_error("split", "Unknown specifier %%%c in filename format string", *next);
-+ goto fail;
- }
- pointer = next + 1;
- }
-- kputs(pointer, &str);
-+ if (kputs(pointer, &str) < 0) goto memfail;
- return ks_release(&str);
-+
-+ memfail:
-+ print_error_errno("split", "Couldn't build output filename");
-+ fail:
-+ free(str.s);
-+ return NULL;
- }
-
- // Parse the header, count the number of RG tags and return a list of their names
--static bool count_RG(bam_hdr_t* hdr, size_t* count, char*** output_name)
-+static bool count_RG(sam_hdr_t* hdr, size_t* count, char*** output_name)
- {
-- if (hdr->l_text < 3 ) {
-+ char **names = NULL;
-+ kstring_t id_val = KS_INITIALIZE;
-+ int i, n_rg = sam_hdr_count_lines(hdr, "RG");
-+
-+ if (n_rg < 0) {
-+ print_error("split", "Failed to get @RG IDs");
- *count = 0;
- *output_name = NULL;
-- return true;
-+ return false;
- }
-- kstring_t input = { 0, 0, NULL };
-- kputsn(hdr->text, hdr->l_text, &input);
-
-- //////////////////////////////////////////
-- // First stage count number of @RG tags //
-- //////////////////////////////////////////
-- char* pointer = ks_str(&input);
-- size_t n_rg = 0;
-- // Guard against rare case where @RG is first header line
-- // This shouldn't happen but could where @HD is omitted
-- if (pointer[0] == '@' && pointer[1] == 'R' && pointer[2] == 'G' ) {
-- ++n_rg;
-- pointer += 3;
-- }
-- char* line;
-- while ((line = strstr(pointer, "\n@RG")) != NULL) {
-- ++n_rg;
-- pointer = line + 1;
-- }
--
-- //////////////////////////////////
-- // Second stage locate @RG ID's //
-- //////////////////////////////////
-- char** names = (char**)calloc(sizeof(char*), n_rg);
-- size_t next = 0;
--
-- regex_t rg_finder;
-- if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) {
-- free(input.s);
-- free(names);
-- return false;
-+ if (n_rg == 0) {
-+ *count = 0;
-+ *output_name = NULL;
-+ return true;
- }
-- regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2);
-- int error;
-- char* begin = ks_str(&input);
--
-- while ((error = regexec(&rg_finder, begin, 2, matches, 0)) == 0) {
-- kstring_t str = { 0, 0, NULL };
-- kputsn(begin+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &str);
-- names[next++] = ks_release(&str);
-- begin += matches[0].rm_eo;
-- }
--
-- if (error != REG_NOMATCH) {
-- // cleanup
-- regfree(&rg_finder);
-- free(matches);
-- free(names);
-- free(input.s);
-- return false;
-+
-+ names = calloc(n_rg, sizeof(names[0]));
-+ if (!names) goto memfail;
-+
-+ for (i = 0; i < n_rg; i++) {
-+ if (sam_hdr_find_tag_pos(hdr, "RG", i, "ID", &id_val) < 0) goto memfail;
-+ names[i] = ks_release(&id_val);
- }
-- free(matches);
-
-- // return results
- *count = n_rg;
- *output_name = names;
-- regfree(&rg_finder);
-- free(input.s);
- return true;
-+
-+ memfail:
-+ print_error_errno("split", "Failed to get @RG IDs");
-+ *count = 0;
-+ *output_name = NULL;
-+ ks_free(&id_val);
-+ free(names);
-+ return false;
- }
-
--// Filters a header of @RG lines where ID != id_keep
--// TODO: strip @PG's descended from other RGs and their descendants
--static bool filter_header_rg(bam_hdr_t* hdr, const char* id_keep, const char *arg_list)
-+static int header_compatible(sam_hdr_t *hdr1, sam_hdr_t *hdr2)
- {
-- kstring_t str = {0, 0, NULL};
--
-- regex_t rg_finder;
--
-- if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) {
-- return false;
-+ size_t n;
-+ if (sam_hdr_nref(hdr1) != sam_hdr_nref(hdr2)) {
-+ print_error("split",
-+ "Unaccounted header contains wrong number of references");
-+ return -1;
- }
--
-- // regex vars
-- char* header = hdr->text;
-- regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2);
-- kstring_t found_id = { 0, 0, NULL };
-- int error;
--
-- while ((error = regexec(&rg_finder, header, 2, matches, 0)) == 0) {
-- kputsn(header, matches[0].rm_so, &str); // copy header up until the found RG line
--
-- found_id.l = 0;
-- kputsn(header+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &found_id); // extract ID
-- // if it matches keep keep it, else we can just ignore it
-- if (strcmp(ks_str(&found_id), id_keep) == 0) {
-- kputsn(header+matches[0].rm_so, (matches[0].rm_eo+1)-matches[0].rm_so, &str);
-- }
-- // move pointer forward
-- header += matches[0].rm_eo+1;
-- }
-- // cleanup
-- free(found_id.s);
-- free(matches);
-- regfree(&rg_finder);
-- // Did we leave loop because of an error?
-- if (error != REG_NOMATCH) {
-- return false;
-+ for (n = 0; n < sam_hdr_nref(hdr1); n++) {
-+ hts_pos_t h1_len = sam_hdr_tid2len(hdr1, n);
-+ hts_pos_t h2_len = sam_hdr_tid2len(hdr2, n);
-+ if (h1_len != h2_len) {
-+ print_error("split",
-+ "Unaccounted header reference %zu \"%s\" is not the same length as in the input file",
-+ n + 1, sam_hdr_tid2name(hdr2, n));
-+ return -1;
-+ }
- }
--
-- // Write remainder of string
-- kputs(header, &str);
--
-- // Modify header
-- hdr->l_text = ks_len(&str);
-- free(hdr->text);
-- hdr->text = ks_release(&str);
--
-- // Add the PG line
-- SAM_hdr *sh = sam_hdr_parse_(hdr->text, hdr->l_text);
-- if (sam_hdr_add_PG(sh, "samtools",
-- "VN", samtools_version(),
-- arg_list ? "CL": NULL,
-- arg_list ? arg_list : NULL,
-- NULL) != 0)
-- return -1;
--
-- free(hdr->text);
-- hdr->text = strdup(sam_hdr_str(sh));
-- hdr->l_text = sam_hdr_length(sh);
-- if (!hdr->text)
-- return false;
-- sam_hdr_free(sh);
--
-- return true;
-+ return 0;
- }
-
- // Set the initial state
-@@ -350,6 +287,7 @@
- if (opts->ga.nthreads > 0) {
- if (!(retval->p.pool = hts_tpool_init(opts->ga.nthreads))) {
- fprintf(stderr, "Error creating thread pool\n");
-+ cleanup_state(retval, false);
- return NULL;
- }
- }
-@@ -357,7 +295,7 @@
- retval->merged_input_file = sam_open_format(opts->merged_input_name, "rb", &opts->ga.in);
- if (!retval->merged_input_file) {
- print_error_errno("split", "Could not open \"%s\"", opts->merged_input_name);
-- free(retval);
-+ cleanup_state(retval, false);
- return NULL;
- }
- if (retval->p.pool)
-@@ -381,11 +319,26 @@
- if (retval->unaccounted_header == NULL) {
- print_error("split", "Could not read header from \"%s\"", opts->unaccounted_header_name);
- cleanup_state(retval, false);
-+ sam_close(hdr_load);
- return NULL;
- }
- sam_close(hdr_load);
-+ if (header_compatible(retval->merged_input_header,
-+ retval->unaccounted_header) != 0) {
-+ cleanup_state(retval, false);
-+ return NULL;
-+ }
- } else {
-- retval->unaccounted_header = bam_hdr_dup(retval->merged_input_header);
-+ retval->unaccounted_header = sam_hdr_dup(retval->merged_input_header);
-+ if (!opts->no_pg && sam_hdr_add_pg(retval->unaccounted_header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("split", "Could not rewrite header for \"%s\"", opts->unaccounted_name);
-+ cleanup_state(retval, false);
-+ return NULL;
-+ }
- }
-
- retval->unaccounted_file = sam_open_format(opts->unaccounted_name, "wb", &opts->ga.out);
-@@ -401,12 +354,15 @@
- // Open output files for RGs
- if (!count_RG(retval->merged_input_header, &retval->output_count, &retval->rg_id)) return NULL;
- if (opts->verbose) fprintf(stderr, "@RG's found %zu\n",retval->output_count);
--
-- retval->rg_output_file_name = (char **)calloc(retval->output_count, sizeof(char *));
-- retval->rg_output_file = (samFile**)calloc(retval->output_count, sizeof(samFile*));
-- retval->rg_output_header = (bam_hdr_t**)calloc(retval->output_count, sizeof(bam_hdr_t*));
-+ // Prevent calloc(0, size);
-+ size_t num = retval->output_count ? retval->output_count : 1;
-+ retval->rg_index_file_name = (char **)calloc(num, sizeof(char *));
-+ retval->rg_output_file_name = (char **)calloc(num, sizeof(char *));
-+ retval->rg_output_file = (samFile**)calloc(num, sizeof(samFile*));
-+ retval->rg_output_header = (sam_hdr_t**)calloc(num, sizeof(sam_hdr_t*));
- retval->rg_hash = kh_init_c2i();
-- if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header || !retval->rg_hash) {
-+ if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header ||
-+ !retval->rg_hash || !retval->rg_index_file_name) {
- print_error_errno("split", "Could not initialise output file array");
- cleanup_state(retval, false);
- return NULL;
-@@ -432,7 +388,6 @@
- &opts->ga.out);
-
- if ( output_filename == NULL ) {
-- print_error("split", "Error expanding output filename format string");
- cleanup_state(retval, false);
- free(input_base_name);
- return NULL;
-@@ -452,11 +407,23 @@
- // Record index in hash
- int ret;
- khiter_t iter = kh_put_c2i(retval->rg_hash, retval->rg_id[i], &ret);
-+ if (ret < 0) {
-+ print_error_errno("split", "Couldn't add @RG ID to look-up table");
-+ cleanup_state(retval, false);
-+ free(input_base_name);
-+ return NULL;
-+ }
- kh_val(retval->rg_hash,iter) = i;
-
- // Set and edit header
-- retval->rg_output_header[i] = bam_hdr_dup(retval->merged_input_header);
-- if ( !filter_header_rg(retval->rg_output_header[i], retval->rg_id[i], arg_list) ) {
-+ retval->rg_output_header[i] = sam_hdr_dup(retval->merged_input_header);
-+ if (sam_hdr_remove_except(retval->rg_output_header[i], "RG", "ID", retval->rg_id[i]) ||
-+ (!opts->no_pg &&
-+ sam_hdr_add_pg(retval->rg_output_header[i], "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))) {
- print_error("split", "Could not rewrite header for \"%s\"", output_filename);
- cleanup_state(retval, false);
- free(input_base_name);
-@@ -465,6 +432,7 @@
- }
-
- free(input_base_name);
-+ retval->write_index = opts->ga.write_index;
-
- return retval;
- }
-@@ -481,6 +449,15 @@
- print_error_errno("split", "Could not write file header to \"%s\"", state->rg_output_file_name[i]);
- return false;
- }
-+ if (state->write_index) {
-+ state->rg_index_file_name[i] = auto_index(state->rg_output_file[i],
-+ state->rg_output_file_name[i],
-+ state->rg_output_header[i]);
-+ if (!state->rg_index_file_name[i]) {
-+ print_error_errno("split", "Could not create index for file \"%s\"", state->rg_output_file_name[i]);
-+ return false;
-+ }
-+ }
- }
-
- bam1_t* file_read = bam_init1();
-@@ -547,6 +524,16 @@
- }
- }
-
-+ if (state->write_index) {
-+ for (i = 0; i < state->output_count; i++) {
-+ if (sam_idx_save(state->rg_output_file[i]) < 0) {
-+ print_error_errno("split", "writing index failed");
-+ return false;
-+ }
-+ free(state->rg_index_file_name[i]);
-+ }
-+ }
-+
- return true;
- }
-
-@@ -555,7 +542,7 @@
- int ret = 0;
-
- if (!status) return 0;
-- if (status->unaccounted_header) bam_hdr_destroy(status->unaccounted_header);
-+ if (status->unaccounted_header) sam_hdr_destroy(status->unaccounted_header);
- if (status->unaccounted_file) {
- if (sam_close(status->unaccounted_file) < 0 && check_close) {
- print_error("split", "Error on closing unaccounted file");
-@@ -566,7 +553,7 @@
- size_t i;
- for (i = 0; i < status->output_count; i++) {
- if (status->rg_output_header && status->rg_output_header[i])
-- bam_hdr_destroy(status->rg_output_header[i]);
-+ sam_hdr_destroy(status->rg_output_header[i]);
- if (status->rg_output_file && status->rg_output_file[i]) {
- if (sam_close(status->rg_output_file[i]) < 0 && check_close) {
- print_error("split", "Error on closing output file \"%s\"", status->rg_output_file_name[i]);
-@@ -577,16 +564,16 @@
- if (status->rg_output_file_name) free(status->rg_output_file_name[i]);
- }
- if (status->merged_input_header)
-- bam_hdr_destroy(status->merged_input_header);
-+ sam_hdr_destroy(status->merged_input_header);
- free(status->rg_output_header);
- free(status->rg_output_file);
- free(status->rg_output_file_name);
-+ free(status->rg_index_file_name);
- kh_destroy_c2i(status->rg_hash);
- free(status->rg_id);
-- free(status);
--
- if (status->p.pool)
- hts_tpool_destroy(status->p.pool);
-+ free(status);
-
- return ret;
- }
-@@ -594,10 +581,6 @@
- static void cleanup_opts(parsed_opts_t* opts)
- {
- if (!opts) return;
-- free(opts->merged_input_name);
-- free(opts->unaccounted_header_name);
-- free(opts->unaccounted_name);
-- free(opts->output_format_string);
- sam_global_args_free(&opts->ga);
- free(opts);
- }
-@@ -605,9 +588,11 @@
- int main_split(int argc, char** argv)
- {
- int ret = 1;
-- char *arg_list = stringify_argv(argc+1, argv-1);
-+ char *arg_list = NULL;
- parsed_opts_t* opts = parse_args(argc, argv);
- if (!opts) goto cleanup_opts;
-+ if (!opts->no_pg && !(arg_list = stringify_argv(argc+1, argv-1)))
-+ goto cleanup_opts;
- state_t* status = init(opts, arg_list);
- if (!status) goto cleanup_opts;
-
---- python-pysam.orig/samtools/bam_split.c.pysam.c
-+++ python-pysam/samtools/bam_split.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_split.c -- split subcommand.
-
-- Copyright (C) 2013-2016 Genome Research Ltd.
-+ Copyright (C) 2013-2016,2018-2019 Genome Research Ltd.
-
- Author: Martin Pollard <mp15@sanger.ac.uk>
-
-@@ -26,7 +26,6 @@
-
- #include <config.h>
-
--#include <htslib/sam.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
-@@ -34,6 +33,8 @@
- #include <limits.h>
- #include <unistd.h>
- #include <regex.h>
-+#include <assert.h>
-+#include <htslib/sam.h>
- #include <htslib/khash.h>
- #include <htslib/kstring.h>
- #include <htslib/cram.h>
-@@ -45,11 +46,12 @@
- KHASH_MAP_INIT_STR(c2i, int)
-
- struct parsed_opts {
-- char* merged_input_name;
-- char* unaccounted_header_name;
-- char* unaccounted_name;
-- char* output_format_string;
-+ const char *merged_input_name;
-+ const char *unaccounted_header_name;
-+ const char *unaccounted_name;
-+ const char *output_format_string;
- bool verbose;
-+ int no_pg;
- sam_global_args ga;
- };
-
-@@ -57,16 +59,18 @@
-
- struct state {
- samFile* merged_input_file;
-- bam_hdr_t* merged_input_header;
-+ sam_hdr_t* merged_input_header;
- samFile* unaccounted_file;
-- bam_hdr_t* unaccounted_header;
-+ sam_hdr_t* unaccounted_header;
- size_t output_count;
- char** rg_id;
-+ char **rg_index_file_name;
- char **rg_output_file_name;
- samFile** rg_output_file;
-- bam_hdr_t** rg_output_header;
-+ sam_hdr_t** rg_output_header;
- kh_c2i_t* rg_hash;
- htsThreadPool p;
-+ int write_index;
- };
-
- typedef struct state state_t;
-@@ -77,14 +81,15 @@
- static void usage(FILE *write_to)
- {
- fprintf(write_to,
--"Usage: samtools split [-u <unaccounted.bam>[:<unaccounted_header.sam>]]\n"
-+"Usage: samtools split [-u <unaccounted.bam>] [-h <unaccounted_header.sam>]\n"
- " [-f <format_string>] [-v] <merged.bam>\n"
- "Options:\n"
- " -f STRING output filename format string [\"%%*_%%#.%%.\"]\n"
- " -u FILE1 put reads with no RG tag or an unrecognised RG tag in FILE1\n"
--" -u FILE1:FILE2 ...and override the header with FILE2\n"
--" -v verbose output\n");
-- sam_global_opt_help(write_to, "-....@");
-+" -h FILE2 ... and override the header with FILE2 (-u file only)\n"
-+" -v verbose output\n"
-+" --no-PG do not add a PG line\n");
-+ sam_global_opt_help(write_to, "-....@..");
- fprintf(write_to,
- "\n"
- "Format string expansions:\n"
-@@ -101,11 +106,11 @@
- {
- if (argc == 1) { usage(samtools_stdout); return NULL; }
-
-- const char* optstring = "vf:u:@:";
-- char* delim;
-+ const char *optstring = "vf:h:u:@:";
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -118,20 +123,19 @@
- while ((opt = getopt_long(argc, argv, optstring, lopts, NULL)) != -1) {
- switch (opt) {
- case 'f':
-- retval->output_format_string = strdup(optarg);
-- if (! retval->output_format_string ) { perror("cannot allocate output format string memory"); return NULL; }
-+ retval->output_format_string = optarg;
-+ break;
-+ case 'h':
-+ retval->unaccounted_header_name = optarg;
- break;
- case 'v':
- retval->verbose = true;
- break;
- case 'u':
-- retval->unaccounted_name = strdup(optarg);
-- if (! retval->unaccounted_name ) { perror("cannot allocate string memory"); return NULL; }
-- if ((delim = strchr(retval->unaccounted_name, ':')) != NULL) {
-- *delim = '\0';
-- retval->unaccounted_header_name = strdup(delim+1);
-- if (! retval->unaccounted_header_name ) { perror("cannot allocate string memory"); return NULL; }
-- }
-+ retval->unaccounted_name = optarg;
-+ break;
-+ case 1:
-+ retval->no_pg = 1;
- break;
- default:
- if (parse_sam_global_opt(opt, optarg, lopts, &retval->ga) == 0) break;
-@@ -143,7 +147,7 @@
- }
- }
-
-- if (retval->output_format_string == NULL) retval->output_format_string = strdup("%*_%#.%.");
-+ if (retval->output_format_string == NULL) retval->output_format_string = "%*_%#.%.";
-
- argc -= optind;
- argv += optind;
-@@ -155,8 +159,7 @@
- return NULL;
- }
-
-- retval->merged_input_name = strdup(argv[0]);
-- if (! retval->merged_input_name ) { perror("cannot allocate string memory"); return NULL; }
-+ retval->merged_input_name = argv[0];
-
- return retval;
- }
-@@ -168,176 +171,110 @@
- const char* pointer = format_string;
- const char* next;
- while ((next = strchr(pointer, '%')) != NULL) {
-- kputsn(pointer, next-pointer, &str);
-+ if (kputsn(pointer, next-pointer, &str) < 0) goto memfail;
- ++next;
- switch (*next) {
- case '%':
-- kputc('%', &str);
-+ if (kputc('%', &str) < 0) goto memfail;
- break;
- case '*':
-- kputs(basename, &str);
-+ if (kputs(basename, &str) < 0) goto memfail;
- break;
- case '#':
-- kputl(rg_idx, &str);
-+ if (kputl(rg_idx, &str) < 0) goto memfail;
- break;
- case '!':
-- kputs(rg_id, &str);
-+ if (kputs(rg_id, &str) < 0) goto memfail;
- break;
- case '.':
- // Only really need to cope with sam, bam, cram
-- if (format->format != unknown_format)
-- kputs(hts_format_file_extension(format), &str);
-- else
-- kputs("bam", &str);
-+ if (format->format != unknown_format) {
-+ if (kputs(hts_format_file_extension(format), &str) < 0)
-+ goto memfail;
-+ } else {
-+ if (kputs("bam", &str) < 0) goto memfail;
-+ }
- break;
- case '\0':
-- // Error is: fprintf(samtools_stderr, "bad format string, trailing %%\n");
-- free(str.s);
-- return NULL;
-+ print_error("split", "Trailing %% in filename format string");
-+ goto fail;
- default:
- // Error is: fprintf(samtools_stderr, "bad format string, unknown format specifier\n");
-- free(str.s);
-- return NULL;
-+ print_error("split", "Unknown specifier %%%c in filename format string", *next);
-+ goto fail;
- }
- pointer = next + 1;
- }
-- kputs(pointer, &str);
-+ if (kputs(pointer, &str) < 0) goto memfail;
- return ks_release(&str);
-+
-+ memfail:
-+ print_error_errno("split", "Couldn't build output filename");
-+ fail:
-+ free(str.s);
-+ return NULL;
- }
-
- // Parse the header, count the number of RG tags and return a list of their names
--static bool count_RG(bam_hdr_t* hdr, size_t* count, char*** output_name)
-+static bool count_RG(sam_hdr_t* hdr, size_t* count, char*** output_name)
- {
-- if (hdr->l_text < 3 ) {
-+ char **names = NULL;
-+ kstring_t id_val = KS_INITIALIZE;
-+ int i, n_rg = sam_hdr_count_lines(hdr, "RG");
-+
-+ if (n_rg < 0) {
-+ print_error("split", "Failed to get @RG IDs");
- *count = 0;
- *output_name = NULL;
-- return true;
-+ return false;
- }
-- kstring_t input = { 0, 0, NULL };
-- kputsn(hdr->text, hdr->l_text, &input);
-
-- //////////////////////////////////////////
-- // First stage count number of @RG tags //
-- //////////////////////////////////////////
-- char* pointer = ks_str(&input);
-- size_t n_rg = 0;
-- // Guard against rare case where @RG is first header line
-- // This shouldn't happen but could where @HD is omitted
-- if (pointer[0] == '@' && pointer[1] == 'R' && pointer[2] == 'G' ) {
-- ++n_rg;
-- pointer += 3;
-- }
-- char* line;
-- while ((line = strstr(pointer, "\n@RG")) != NULL) {
-- ++n_rg;
-- pointer = line + 1;
-- }
--
-- //////////////////////////////////
-- // Second stage locate @RG ID's //
-- //////////////////////////////////
-- char** names = (char**)calloc(sizeof(char*), n_rg);
-- size_t next = 0;
--
-- regex_t rg_finder;
-- if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) {
-- free(input.s);
-- free(names);
-- return false;
-+ if (n_rg == 0) {
-+ *count = 0;
-+ *output_name = NULL;
-+ return true;
- }
-- regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2);
-- int error;
-- char* begin = ks_str(&input);
--
-- while ((error = regexec(&rg_finder, begin, 2, matches, 0)) == 0) {
-- kstring_t str = { 0, 0, NULL };
-- kputsn(begin+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &str);
-- names[next++] = ks_release(&str);
-- begin += matches[0].rm_eo;
-- }
--
-- if (error != REG_NOMATCH) {
-- // cleanup
-- regfree(&rg_finder);
-- free(matches);
-- free(names);
-- free(input.s);
-- return false;
-+
-+ names = calloc(n_rg, sizeof(names[0]));
-+ if (!names) goto memfail;
-+
-+ for (i = 0; i < n_rg; i++) {
-+ if (sam_hdr_find_tag_pos(hdr, "RG", i, "ID", &id_val) < 0) goto memfail;
-+ names[i] = ks_release(&id_val);
- }
-- free(matches);
-
-- // return results
- *count = n_rg;
- *output_name = names;
-- regfree(&rg_finder);
-- free(input.s);
- return true;
-+
-+ memfail:
-+ print_error_errno("split", "Failed to get @RG IDs");
-+ *count = 0;
-+ *output_name = NULL;
-+ ks_free(&id_val);
-+ free(names);
-+ return false;
- }
-
--// Filters a header of @RG lines where ID != id_keep
--// TODO: strip @PG's descended from other RGs and their descendants
--static bool filter_header_rg(bam_hdr_t* hdr, const char* id_keep, const char *arg_list)
-+static int header_compatible(sam_hdr_t *hdr1, sam_hdr_t *hdr2)
- {
-- kstring_t str = {0, 0, NULL};
--
-- regex_t rg_finder;
--
-- if (regcomp(&rg_finder, "^@RG.*\tID:([!-)+-<>-~][ !-~]*)(\t.*$|$)", REG_EXTENDED|REG_NEWLINE) != 0) {
-- return false;
-+ size_t n;
-+ if (sam_hdr_nref(hdr1) != sam_hdr_nref(hdr2)) {
-+ print_error("split",
-+ "Unaccounted header contains wrong number of references");
-+ return -1;
- }
--
-- // regex vars
-- char* header = hdr->text;
-- regmatch_t* matches = (regmatch_t*)calloc(sizeof(regmatch_t),2);
-- kstring_t found_id = { 0, 0, NULL };
-- int error;
--
-- while ((error = regexec(&rg_finder, header, 2, matches, 0)) == 0) {
-- kputsn(header, matches[0].rm_so, &str); // copy header up until the found RG line
--
-- found_id.l = 0;
-- kputsn(header+matches[1].rm_so, matches[1].rm_eo-matches[1].rm_so, &found_id); // extract ID
-- // if it matches keep keep it, else we can just ignore it
-- if (strcmp(ks_str(&found_id), id_keep) == 0) {
-- kputsn(header+matches[0].rm_so, (matches[0].rm_eo+1)-matches[0].rm_so, &str);
-- }
-- // move pointer forward
-- header += matches[0].rm_eo+1;
-- }
-- // cleanup
-- free(found_id.s);
-- free(matches);
-- regfree(&rg_finder);
-- // Did we leave loop because of an error?
-- if (error != REG_NOMATCH) {
-- return false;
-+ for (n = 0; n < sam_hdr_nref(hdr1); n++) {
-+ hts_pos_t h1_len = sam_hdr_tid2len(hdr1, n);
-+ hts_pos_t h2_len = sam_hdr_tid2len(hdr2, n);
-+ if (h1_len != h2_len) {
-+ print_error("split",
-+ "Unaccounted header reference %zu \"%s\" is not the same length as in the input file",
-+ n + 1, sam_hdr_tid2name(hdr2, n));
-+ return -1;
-+ }
- }
--
-- // Write remainder of string
-- kputs(header, &str);
--
-- // Modify header
-- hdr->l_text = ks_len(&str);
-- free(hdr->text);
-- hdr->text = ks_release(&str);
--
-- // Add the PG line
-- SAM_hdr *sh = sam_hdr_parse_(hdr->text, hdr->l_text);
-- if (sam_hdr_add_PG(sh, "samtools",
-- "VN", samtools_version(),
-- arg_list ? "CL": NULL,
-- arg_list ? arg_list : NULL,
-- NULL) != 0)
-- return -1;
--
-- free(hdr->text);
-- hdr->text = strdup(sam_hdr_str(sh));
-- hdr->l_text = sam_hdr_length(sh);
-- if (!hdr->text)
-- return false;
-- sam_hdr_free(sh);
--
-- return true;
-+ return 0;
- }
-
- // Set the initial state
-@@ -352,6 +289,7 @@
- if (opts->ga.nthreads > 0) {
- if (!(retval->p.pool = hts_tpool_init(opts->ga.nthreads))) {
- fprintf(samtools_stderr, "Error creating thread pool\n");
-+ cleanup_state(retval, false);
- return NULL;
- }
- }
-@@ -359,7 +297,7 @@
- retval->merged_input_file = sam_open_format(opts->merged_input_name, "rb", &opts->ga.in);
- if (!retval->merged_input_file) {
- print_error_errno("split", "Could not open \"%s\"", opts->merged_input_name);
-- free(retval);
-+ cleanup_state(retval, false);
- return NULL;
- }
- if (retval->p.pool)
-@@ -383,11 +321,26 @@
- if (retval->unaccounted_header == NULL) {
- print_error("split", "Could not read header from \"%s\"", opts->unaccounted_header_name);
- cleanup_state(retval, false);
-+ sam_close(hdr_load);
- return NULL;
- }
- sam_close(hdr_load);
-+ if (header_compatible(retval->merged_input_header,
-+ retval->unaccounted_header) != 0) {
-+ cleanup_state(retval, false);
-+ return NULL;
-+ }
- } else {
-- retval->unaccounted_header = bam_hdr_dup(retval->merged_input_header);
-+ retval->unaccounted_header = sam_hdr_dup(retval->merged_input_header);
-+ if (!opts->no_pg && sam_hdr_add_pg(retval->unaccounted_header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("split", "Could not rewrite header for \"%s\"", opts->unaccounted_name);
-+ cleanup_state(retval, false);
-+ return NULL;
-+ }
- }
-
- retval->unaccounted_file = sam_open_format(opts->unaccounted_name, "wb", &opts->ga.out);
-@@ -403,12 +356,15 @@
- // Open output files for RGs
- if (!count_RG(retval->merged_input_header, &retval->output_count, &retval->rg_id)) return NULL;
- if (opts->verbose) fprintf(samtools_stderr, "@RG's found %zu\n",retval->output_count);
--
-- retval->rg_output_file_name = (char **)calloc(retval->output_count, sizeof(char *));
-- retval->rg_output_file = (samFile**)calloc(retval->output_count, sizeof(samFile*));
-- retval->rg_output_header = (bam_hdr_t**)calloc(retval->output_count, sizeof(bam_hdr_t*));
-+ // Prevent calloc(0, size);
-+ size_t num = retval->output_count ? retval->output_count : 1;
-+ retval->rg_index_file_name = (char **)calloc(num, sizeof(char *));
-+ retval->rg_output_file_name = (char **)calloc(num, sizeof(char *));
-+ retval->rg_output_file = (samFile**)calloc(num, sizeof(samFile*));
-+ retval->rg_output_header = (sam_hdr_t**)calloc(num, sizeof(sam_hdr_t*));
- retval->rg_hash = kh_init_c2i();
-- if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header || !retval->rg_hash) {
-+ if (!retval->rg_output_file_name || !retval->rg_output_file || !retval->rg_output_header ||
-+ !retval->rg_hash || !retval->rg_index_file_name) {
- print_error_errno("split", "Could not initialise output file array");
- cleanup_state(retval, false);
- return NULL;
-@@ -434,7 +390,6 @@
- &opts->ga.out);
-
- if ( output_filename == NULL ) {
-- print_error("split", "Error expanding output filename format string");
- cleanup_state(retval, false);
- free(input_base_name);
- return NULL;
-@@ -454,11 +409,23 @@
- // Record index in hash
- int ret;
- khiter_t iter = kh_put_c2i(retval->rg_hash, retval->rg_id[i], &ret);
-+ if (ret < 0) {
-+ print_error_errno("split", "Couldn't add @RG ID to look-up table");
-+ cleanup_state(retval, false);
-+ free(input_base_name);
-+ return NULL;
-+ }
- kh_val(retval->rg_hash,iter) = i;
-
- // Set and edit header
-- retval->rg_output_header[i] = bam_hdr_dup(retval->merged_input_header);
-- if ( !filter_header_rg(retval->rg_output_header[i], retval->rg_id[i], arg_list) ) {
-+ retval->rg_output_header[i] = sam_hdr_dup(retval->merged_input_header);
-+ if (sam_hdr_remove_except(retval->rg_output_header[i], "RG", "ID", retval->rg_id[i]) ||
-+ (!opts->no_pg &&
-+ sam_hdr_add_pg(retval->rg_output_header[i], "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL))) {
- print_error("split", "Could not rewrite header for \"%s\"", output_filename);
- cleanup_state(retval, false);
- free(input_base_name);
-@@ -467,6 +434,7 @@
- }
-
- free(input_base_name);
-+ retval->write_index = opts->ga.write_index;
-
- return retval;
- }
-@@ -483,6 +451,15 @@
- print_error_errno("split", "Could not write file header to \"%s\"", state->rg_output_file_name[i]);
- return false;
- }
-+ if (state->write_index) {
-+ state->rg_index_file_name[i] = auto_index(state->rg_output_file[i],
-+ state->rg_output_file_name[i],
-+ state->rg_output_header[i]);
-+ if (!state->rg_index_file_name[i]) {
-+ print_error_errno("split", "Could not create index for file \"%s\"", state->rg_output_file_name[i]);
-+ return false;
-+ }
-+ }
- }
-
- bam1_t* file_read = bam_init1();
-@@ -549,6 +526,16 @@
- }
- }
-
-+ if (state->write_index) {
-+ for (i = 0; i < state->output_count; i++) {
-+ if (sam_idx_save(state->rg_output_file[i]) < 0) {
-+ print_error_errno("split", "writing index failed");
-+ return false;
-+ }
-+ free(state->rg_index_file_name[i]);
-+ }
-+ }
-+
- return true;
- }
-
-@@ -557,7 +544,7 @@
- int ret = 0;
-
- if (!status) return 0;
-- if (status->unaccounted_header) bam_hdr_destroy(status->unaccounted_header);
-+ if (status->unaccounted_header) sam_hdr_destroy(status->unaccounted_header);
- if (status->unaccounted_file) {
- if (sam_close(status->unaccounted_file) < 0 && check_close) {
- print_error("split", "Error on closing unaccounted file");
-@@ -568,7 +555,7 @@
- size_t i;
- for (i = 0; i < status->output_count; i++) {
- if (status->rg_output_header && status->rg_output_header[i])
-- bam_hdr_destroy(status->rg_output_header[i]);
-+ sam_hdr_destroy(status->rg_output_header[i]);
- if (status->rg_output_file && status->rg_output_file[i]) {
- if (sam_close(status->rg_output_file[i]) < 0 && check_close) {
- print_error("split", "Error on closing output file \"%s\"", status->rg_output_file_name[i]);
-@@ -579,16 +566,16 @@
- if (status->rg_output_file_name) free(status->rg_output_file_name[i]);
- }
- if (status->merged_input_header)
-- bam_hdr_destroy(status->merged_input_header);
-+ sam_hdr_destroy(status->merged_input_header);
- free(status->rg_output_header);
- free(status->rg_output_file);
- free(status->rg_output_file_name);
-+ free(status->rg_index_file_name);
- kh_destroy_c2i(status->rg_hash);
- free(status->rg_id);
-- free(status);
--
- if (status->p.pool)
- hts_tpool_destroy(status->p.pool);
-+ free(status);
-
- return ret;
- }
-@@ -596,10 +583,6 @@
- static void cleanup_opts(parsed_opts_t* opts)
- {
- if (!opts) return;
-- free(opts->merged_input_name);
-- free(opts->unaccounted_header_name);
-- free(opts->unaccounted_name);
-- free(opts->output_format_string);
- sam_global_args_free(&opts->ga);
- free(opts);
- }
-@@ -607,9 +590,11 @@
- int main_split(int argc, char** argv)
- {
- int ret = 1;
-- char *arg_list = stringify_argv(argc+1, argv-1);
-+ char *arg_list = NULL;
- parsed_opts_t* opts = parse_args(argc, argv);
- if (!opts) goto cleanup_opts;
-+ if (!opts->no_pg && !(arg_list = stringify_argv(argc+1, argv-1)))
-+ goto cleanup_opts;
- state_t* status = init(opts, arg_list);
- if (!status) goto cleanup_opts;
-
---- python-pysam.orig/samtools/bam_stat.c
-+++ python-pysam/samtools/bam_stat.c
-@@ -1,6 +1,6 @@
- /* bam_stat.c -- flagstat subcommand.
-
-- Copyright (C) 2009, 2011, 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2011, 2013-2015, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -69,7 +69,7 @@
- if ((c)->flag & BAM_FDUP) ++(s)->n_dup[w]; \
- } while (0)
-
--bam_flagstat_t *bam_flagstat_core(samFile *fp, bam_hdr_t *h)
-+bam_flagstat_t *bam_flagstat_core(samFile *fp, sam_hdr_t *h)
- {
- bam_flagstat_t *s;
- bam1_t *b;
-@@ -93,19 +93,155 @@
- return buffer;
- }
-
-+static const char *percent_json(char *buffer, long long n, long long total)
-+{
-+ if (total != 0) sprintf(buffer, "%.2f", (float)n / total * 100.0);
-+ else strcpy(buffer, "null");
-+ return buffer;
-+}
-+
- static void usage_exit(FILE *fp, int exit_status)
- {
- fprintf(fp, "Usage: samtools flagstat [options] <in.bam>\n");
-- sam_global_opt_help(fp, "-.---@");
-+ sam_global_opt_help(fp, "-.---@-.");
-+ fprintf(fp, " -O, --");
-+ fprintf(fp, "output-fmt FORMAT[,OPT[=VAL]]...\n"
-+ " Specify output format (json, tsv)\n");
- exit(exit_status);
- }
-
-+static void out_fmt_default(bam_flagstat_t *s)
-+{
-+ char b0[16], b1[16];
-+ printf("%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-+ printf("%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]);
-+ printf("%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]);
-+ printf("%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]);
-+ printf("%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-+ printf("%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-+ printf("%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]);
-+ printf("%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]);
-+ printf("%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-+ printf("%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-+ printf("%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-+ printf("%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-+ printf("%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+}
-+
-+static void out_fmt_json(bam_flagstat_t *s) {
-+ char b0[16], b1[16];
-+ printf("{\n \"QC-passed reads\": { \n"
-+ " \"total\": %lld, \n"
-+ " \"secondary\": %lld, \n"
-+ " \"supplementary\": %lld, \n"
-+ " \"duplicates\": %lld, \n"
-+ " \"mapped\": %lld, \n"
-+ " \"mapped %%\": %s, \n"
-+ " \"paired in sequencing\": %lld, \n"
-+ " \"read1\": %lld, \n"
-+ " \"read2\": %lld, \n"
-+ " \"properly paired\": %lld, \n"
-+ " \"properly paired %%\": %s, \n"
-+ " \"with itself and mate mapped\": %lld, \n"
-+ " \"singletons\": %lld, \n"
-+ " \"singletons %%\": %s, \n"
-+ " \"with mate mapped to a different chr\": %lld, \n"
-+ " \"with mate mapped to a different chr (mapQ >= 5)\": %lld \n"
-+ " },"
-+ "\n \"QC-failed reads\": { \n"
-+ " \"total\": %lld, \n"
-+ " \"secondary\": %lld, \n"
-+ " \"supplementary\": %lld, \n"
-+ " \"duplicates\": %lld, \n"
-+ " \"mapped\": %lld, \n"
-+ " \"mapped %%\": %s, \n"
-+ " \"paired in sequencing\": %lld, \n"
-+ " \"read1\": %lld, \n"
-+ " \"read2\": %lld, \n"
-+ " \"properly paired\": %lld, \n"
-+ " \"properly paired %%\": %s, \n"
-+ " \"with itself and mate mapped\": %lld, \n"
-+ " \"singletons\": %lld, \n"
-+ " \"singletons %%\": %s, \n"
-+ " \"with mate mapped to a different chr\": %lld, \n"
-+ " \"with mate mapped to a different chr (mapQ >= 5)\": %lld \n"
-+ " }\n"
-+ "}\n",
-+ s->n_reads[0],
-+ s->n_secondary[0],
-+ s->n_supp[0],
-+ s->n_dup[0],
-+ s->n_mapped[0],
-+ percent_json(b0, s->n_mapped[0], s->n_reads[0]),
-+ s->n_pair_all[0],
-+ s->n_read1[0],
-+ s->n_read2[0],
-+ s->n_pair_good[0],
-+ percent_json(b0, s->n_pair_good[0], s->n_pair_all[0]),
-+ s->n_pair_map[0],
-+ s->n_sgltn[0],
-+ percent_json(b0, s->n_sgltn[0], s->n_pair_all[0]),
-+ s->n_diffchr[0],
-+ s->n_diffhigh[0],
-+ s->n_reads[1],
-+ s->n_secondary[1],
-+ s->n_supp[1],
-+ s->n_dup[1],
-+ s->n_mapped[1],
-+ percent_json(b1, s->n_mapped[1], s->n_reads[1]),
-+ s->n_pair_all[1],
-+ s->n_read1[1],
-+ s->n_read2[1],
-+ s->n_pair_good[1],
-+ percent_json(b1, s->n_pair_good[1], s->n_pair_all[1]),
-+ s->n_pair_map[1],
-+ s->n_sgltn[1],
-+ percent_json(b1, s->n_sgltn[1], s->n_pair_all[1]),
-+ s->n_diffchr[1],
-+ s->n_diffhigh[1]
-+ );
-+}
-+
-+static void out_fmt_tsv(bam_flagstat_t *s) {
-+ char b0[16], b1[16];
-+ printf("%lld\t%lld\ttotal (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-+ printf("%lld\t%lld\tsecondary\n", s->n_secondary[0], s->n_secondary[1]);
-+ printf("%lld\t%lld\tsupplementary\n", s->n_supp[0], s->n_supp[1]);
-+ printf("%lld\t%lld\tduplicates\n", s->n_dup[0], s->n_dup[1]);
-+ printf("%lld\t%lld\tmapped\n", s->n_mapped[0], s->n_mapped[1]);
-+ printf("%s\t%s\tmapped %%\n", percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-+ printf("%lld\t%lld\tpaired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-+ printf("%lld\t%lld\tread1\n", s->n_read1[0], s->n_read1[1]);
-+ printf("%lld\t%lld\tread2\n", s->n_read2[0], s->n_read2[1]);
-+ printf("%lld\t%lld\tproperly paired\n", s->n_pair_good[0], s->n_pair_good[1]);
-+ printf("%s\t%s\tproperly paired %%\n", percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-+ printf("%lld\t%lld\twith itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-+ printf("%lld\t%lld\tsingletons\n", s->n_sgltn[0], s->n_sgltn[1]);
-+ printf("%s\t%s\tsingletons %%\n", percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-+ printf("%lld\t%lld\twith mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-+ printf("%lld\t%lld\twith mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+}
-+
-+/*
-+ * Select flagstats output format to print.
-+ */
-+static void output_fmt(bam_flagstat_t *s, const char *out_fmt)
-+{
-+ if (strcmp(out_fmt, "json") == 0 || strcmp(out_fmt, "JSON") == 0) {
-+ out_fmt_json(s);
-+ } else if (strcmp(out_fmt, "tsv") == 0 || strcmp(out_fmt, "TSV") == 0) {
-+ out_fmt_tsv(s);
-+ } else {
-+ out_fmt_default(s);
-+ }
-+}
-+
- int bam_flagstat(int argc, char *argv[])
- {
- samFile *fp;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- bam_flagstat_t *s;
-- char b0[16], b1[16];
-+ const char *out_fmt = "default";
- int c;
-
- enum {
-@@ -114,12 +250,15 @@
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-- SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', '-', '@'),
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', '-', '-', '@'),
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "@:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "@:O:", lopts, NULL)) >= 0) {
- switch (c) {
-+ case 'O':
-+ out_fmt = optarg;
-+ break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?':
-@@ -155,22 +294,11 @@
- fprintf(stderr, "Failed to read header for \"%s\"\n", argv[optind]);
- return 1;
- }
-+
- s = bam_flagstat_core(fp, header);
-- printf("%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-- printf("%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]);
-- printf("%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]);
-- printf("%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]);
-- printf("%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-- printf("%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-- printf("%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]);
-- printf("%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]);
-- printf("%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-- printf("%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-- printf("%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-- printf("%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-- printf("%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+ output_fmt(s, out_fmt);
- free(s);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(fp);
- sam_global_args_free(&ga);
- return 0;
---- python-pysam.orig/samtools/bam_stat.c.pysam.c
-+++ python-pysam/samtools/bam_stat.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bam_stat.c -- flagstat subcommand.
-
-- Copyright (C) 2009, 2011, 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2011, 2013-2015, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -71,7 +71,7 @@
- if ((c)->flag & BAM_FDUP) ++(s)->n_dup[w]; \
- } while (0)
-
--bam_flagstat_t *bam_flagstat_core(samFile *fp, bam_hdr_t *h)
-+bam_flagstat_t *bam_flagstat_core(samFile *fp, sam_hdr_t *h)
- {
- bam_flagstat_t *s;
- bam1_t *b;
-@@ -95,19 +95,155 @@
- return buffer;
- }
-
-+static const char *percent_json(char *buffer, long long n, long long total)
-+{
-+ if (total != 0) sprintf(buffer, "%.2f", (float)n / total * 100.0);
-+ else strcpy(buffer, "null");
-+ return buffer;
-+}
-+
- static void usage_exit(FILE *fp, int exit_status)
- {
- fprintf(fp, "Usage: samtools flagstat [options] <in.bam>\n");
-- sam_global_opt_help(fp, "-.---@");
-+ sam_global_opt_help(fp, "-.---@-.");
-+ fprintf(fp, " -O, --");
-+ fprintf(fp, "output-fmt FORMAT[,OPT[=VAL]]...\n"
-+ " Specify output format (json, tsv)\n");
- exit(exit_status);
- }
-
-+static void out_fmt_default(bam_flagstat_t *s)
-+{
-+ char b0[16], b1[16];
-+ fprintf(samtools_stdout, "%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-+ fprintf(samtools_stdout, "%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]);
-+ fprintf(samtools_stdout, "%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]);
-+ fprintf(samtools_stdout, "%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]);
-+ fprintf(samtools_stdout, "%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-+ fprintf(samtools_stdout, "%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-+ fprintf(samtools_stdout, "%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]);
-+ fprintf(samtools_stdout, "%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]);
-+ fprintf(samtools_stdout, "%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-+ fprintf(samtools_stdout, "%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-+ fprintf(samtools_stdout, "%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-+ fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-+ fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+}
-+
-+static void out_fmt_json(bam_flagstat_t *s) {
-+ char b0[16], b1[16];
-+ fprintf(samtools_stdout, "{\n \"QC-passed reads\": { \n"
-+ " \"total\": %lld, \n"
-+ " \"secondary\": %lld, \n"
-+ " \"supplementary\": %lld, \n"
-+ " \"duplicates\": %lld, \n"
-+ " \"mapped\": %lld, \n"
-+ " \"mapped %%\": %s, \n"
-+ " \"paired in sequencing\": %lld, \n"
-+ " \"read1\": %lld, \n"
-+ " \"read2\": %lld, \n"
-+ " \"properly paired\": %lld, \n"
-+ " \"properly paired %%\": %s, \n"
-+ " \"with itself and mate mapped\": %lld, \n"
-+ " \"singletons\": %lld, \n"
-+ " \"singletons %%\": %s, \n"
-+ " \"with mate mapped to a different chr\": %lld, \n"
-+ " \"with mate mapped to a different chr (mapQ >= 5)\": %lld \n"
-+ " },"
-+ "\n \"QC-failed reads\": { \n"
-+ " \"total\": %lld, \n"
-+ " \"secondary\": %lld, \n"
-+ " \"supplementary\": %lld, \n"
-+ " \"duplicates\": %lld, \n"
-+ " \"mapped\": %lld, \n"
-+ " \"mapped %%\": %s, \n"
-+ " \"paired in sequencing\": %lld, \n"
-+ " \"read1\": %lld, \n"
-+ " \"read2\": %lld, \n"
-+ " \"properly paired\": %lld, \n"
-+ " \"properly paired %%\": %s, \n"
-+ " \"with itself and mate mapped\": %lld, \n"
-+ " \"singletons\": %lld, \n"
-+ " \"singletons %%\": %s, \n"
-+ " \"with mate mapped to a different chr\": %lld, \n"
-+ " \"with mate mapped to a different chr (mapQ >= 5)\": %lld \n"
-+ " }\n"
-+ "}\n",
-+ s->n_reads[0],
-+ s->n_secondary[0],
-+ s->n_supp[0],
-+ s->n_dup[0],
-+ s->n_mapped[0],
-+ percent_json(b0, s->n_mapped[0], s->n_reads[0]),
-+ s->n_pair_all[0],
-+ s->n_read1[0],
-+ s->n_read2[0],
-+ s->n_pair_good[0],
-+ percent_json(b0, s->n_pair_good[0], s->n_pair_all[0]),
-+ s->n_pair_map[0],
-+ s->n_sgltn[0],
-+ percent_json(b0, s->n_sgltn[0], s->n_pair_all[0]),
-+ s->n_diffchr[0],
-+ s->n_diffhigh[0],
-+ s->n_reads[1],
-+ s->n_secondary[1],
-+ s->n_supp[1],
-+ s->n_dup[1],
-+ s->n_mapped[1],
-+ percent_json(b1, s->n_mapped[1], s->n_reads[1]),
-+ s->n_pair_all[1],
-+ s->n_read1[1],
-+ s->n_read2[1],
-+ s->n_pair_good[1],
-+ percent_json(b1, s->n_pair_good[1], s->n_pair_all[1]),
-+ s->n_pair_map[1],
-+ s->n_sgltn[1],
-+ percent_json(b1, s->n_sgltn[1], s->n_pair_all[1]),
-+ s->n_diffchr[1],
-+ s->n_diffhigh[1]
-+ );
-+}
-+
-+static void out_fmt_tsv(bam_flagstat_t *s) {
-+ char b0[16], b1[16];
-+ fprintf(samtools_stdout, "%lld\t%lld\ttotal (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tsecondary\n", s->n_secondary[0], s->n_secondary[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tsupplementary\n", s->n_supp[0], s->n_supp[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tduplicates\n", s->n_dup[0], s->n_dup[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tmapped\n", s->n_mapped[0], s->n_mapped[1]);
-+ fprintf(samtools_stdout, "%s\t%s\tmapped %%\n", percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-+ fprintf(samtools_stdout, "%lld\t%lld\tpaired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tread1\n", s->n_read1[0], s->n_read1[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tread2\n", s->n_read2[0], s->n_read2[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tproperly paired\n", s->n_pair_good[0], s->n_pair_good[1]);
-+ fprintf(samtools_stdout, "%s\t%s\tproperly paired %%\n", percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-+ fprintf(samtools_stdout, "%lld\t%lld\twith itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\tsingletons\n", s->n_sgltn[0], s->n_sgltn[1]);
-+ fprintf(samtools_stdout, "%s\t%s\tsingletons %%\n", percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-+ fprintf(samtools_stdout, "%lld\t%lld\twith mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-+ fprintf(samtools_stdout, "%lld\t%lld\twith mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+}
-+
-+/*
-+ * Select flagstats output format to print.
-+ */
-+static void output_fmt(bam_flagstat_t *s, const char *out_fmt)
-+{
-+ if (strcmp(out_fmt, "json") == 0 || strcmp(out_fmt, "JSON") == 0) {
-+ out_fmt_json(s);
-+ } else if (strcmp(out_fmt, "tsv") == 0 || strcmp(out_fmt, "TSV") == 0) {
-+ out_fmt_tsv(s);
-+ } else {
-+ out_fmt_default(s);
-+ }
-+}
-+
- int bam_flagstat(int argc, char *argv[])
- {
- samFile *fp;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- bam_flagstat_t *s;
-- char b0[16], b1[16];
-+ const char *out_fmt = "default";
- int c;
-
- enum {
-@@ -116,12 +252,15 @@
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-- SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', '-', '@'),
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', '-', '-', '@'),
- {NULL, 0, NULL, 0}
- };
-
-- while ((c = getopt_long(argc, argv, "@:", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "@:O:", lopts, NULL)) >= 0) {
- switch (c) {
-+ case 'O':
-+ out_fmt = optarg;
-+ break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?':
-@@ -157,22 +296,11 @@
- fprintf(samtools_stderr, "Failed to read header for \"%s\"\n", argv[optind]);
- return 1;
- }
-+
- s = bam_flagstat_core(fp, header);
-- fprintf(samtools_stdout, "%lld + %lld in total (QC-passed reads + QC-failed reads)\n", s->n_reads[0], s->n_reads[1]);
-- fprintf(samtools_stdout, "%lld + %lld secondary\n", s->n_secondary[0], s->n_secondary[1]);
-- fprintf(samtools_stdout, "%lld + %lld supplementary\n", s->n_supp[0], s->n_supp[1]);
-- fprintf(samtools_stdout, "%lld + %lld duplicates\n", s->n_dup[0], s->n_dup[1]);
-- fprintf(samtools_stdout, "%lld + %lld mapped (%s : %s)\n", s->n_mapped[0], s->n_mapped[1], percent(b0, s->n_mapped[0], s->n_reads[0]), percent(b1, s->n_mapped[1], s->n_reads[1]));
-- fprintf(samtools_stdout, "%lld + %lld paired in sequencing\n", s->n_pair_all[0], s->n_pair_all[1]);
-- fprintf(samtools_stdout, "%lld + %lld read1\n", s->n_read1[0], s->n_read1[1]);
-- fprintf(samtools_stdout, "%lld + %lld read2\n", s->n_read2[0], s->n_read2[1]);
-- fprintf(samtools_stdout, "%lld + %lld properly paired (%s : %s)\n", s->n_pair_good[0], s->n_pair_good[1], percent(b0, s->n_pair_good[0], s->n_pair_all[0]), percent(b1, s->n_pair_good[1], s->n_pair_all[1]));
-- fprintf(samtools_stdout, "%lld + %lld with itself and mate mapped\n", s->n_pair_map[0], s->n_pair_map[1]);
-- fprintf(samtools_stdout, "%lld + %lld singletons (%s : %s)\n", s->n_sgltn[0], s->n_sgltn[1], percent(b0, s->n_sgltn[0], s->n_pair_all[0]), percent(b1, s->n_sgltn[1], s->n_pair_all[1]));
-- fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr\n", s->n_diffchr[0], s->n_diffchr[1]);
-- fprintf(samtools_stdout, "%lld + %lld with mate mapped to a different chr (mapQ>=5)\n", s->n_diffhigh[0], s->n_diffhigh[1]);
-+ output_fmt(s, out_fmt);
- free(s);
-- bam_hdr_destroy(header);
-+ sam_hdr_destroy(header);
- sam_close(fp);
- sam_global_args_free(&ga);
- return 0;
---- python-pysam.orig/samtools/bamshuf.c
-+++ python-pysam/samtools/bamshuf.c
-@@ -1,7 +1,7 @@
- /* bamshuf.c -- collate subcommand.
-
- Copyright (C) 2012 Broad Institute.
-- Copyright (C) 2013, 2015, 2018 Genome Research Ltd.
-+ Copyright (C) 2013, 2015-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -164,7 +164,7 @@
- }
-
-
--static inline int write_to_bin_file(bam1_t *bam, int64_t *count, samFile **bin_files, char **names, bam_hdr_t *header, int files) {
-+static inline int write_to_bin_file(bam1_t *bam, int64_t *count, samFile **bin_files, char **names, sam_hdr_t *header, int files) {
- uint32_t x;
-
- x = hash_X31_Wang(bam_get_qname(bam)) % files;
-@@ -181,13 +181,13 @@
-
-
- static int bamshuf(const char *fn, int n_files, const char *pre, int clevel,
-- int is_stdout, const char *output_file, int fast, int store_max, sam_global_args *ga)
-+ int is_stdout, const char *output_file, int fast, int store_max, sam_global_args *ga, char *arg_list, int no_pg)
- {
- samFile *fp, *fpw = NULL, **fpt = NULL;
- char **fnt = NULL, modew[8];
- bam1_t *b = NULL;
- int i, counter, l, r;
-- bam_hdr_t *h = NULL;
-+ sam_hdr_t *h = NULL;
- int64_t j, max_cnt = 0, *cnt = NULL;
- elem_t *a = NULL;
- htsThreadPool p = {NULL, 0};
-@@ -214,14 +214,10 @@
- goto fail;
- }
-
-- if (sam_hdr_change_HD(h, "SO", "unsorted") != 0) {
-- print_error("collate",
-- "failed to change sort order header to 'unsorted'\n");
-- goto fail;
-- }
-- if (sam_hdr_change_HD(h, "GO", "query") != 0) {
-- print_error("collate",
-- "failed to change group order header to 'query'\n");
-+ if ((-1 == sam_hdr_update_hd(h, "SO", "unsorted", "GO", "query"))
-+ && (-1 == sam_hdr_add_line(h, "HD", "VN", SAM_FORMAT_VERSION, "SO", "unsorted", "GO", "query", NULL))
-+ ) {
-+ print_error("collate", "failed to update HD line\n");
- goto fail;
- }
-
-@@ -254,6 +250,15 @@
- }
- if (p.pool) hts_set_opt(fpw, HTS_OPT_THREAD_POOL, &p);
-
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("collate", "failed to add PG line to header of \"%s\"", output_file);
-+ goto fail;
-+ }
-+
- if (sam_hdr_write(fpw, h) < 0) {
- print_error_errno("collate", "Couldn't write header");
- goto fail;
-@@ -459,7 +464,7 @@
- goto fail;
- }
- if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p);
-- bam_hdr_destroy(sam_hdr_read(fp)); // Skip over header
-+ sam_hdr_destroy(sam_hdr_read(fp)); // Skip over header
-
- // Slurp in one of the split files
- for (j = 0; j < c; ++j) {
-@@ -485,7 +490,7 @@
- }
- }
-
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
- for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b);
- free(a); free(fnt); free(cnt);
- sam_global_args_free(ga);
-@@ -503,7 +508,7 @@
- fail:
- if (fp) sam_close(fp);
- if (fpw) sam_close(fpw);
-- if (h) bam_hdr_destroy(h);
-+ if (h) sam_hdr_destroy(h);
- for (i = 0; i < n_files; ++i) {
- if (fnt) free(fnt[i]);
- if (fpt && fpt[i]) sam_close(fpt[i]);
-@@ -530,10 +535,11 @@
- " -f fast (only primary alignments)\n"
- " -r working reads stored (with -f) [%d]\n" // reads_store
- " -l INT compression level [%d]\n" // DEF_CLEVEL
-- " -n INT number of temporary files [%d]\n", // n_files
-+ " -n INT number of temporary files [%d]\n" // n_files
-+ " --no-PG do not add a PG line\n",
- reads_store, DEF_CLEVEL, n_files);
-
-- sam_global_opt_help(fp, "-....@");
-+ sam_global_opt_help(fp, "-....@-.");
- fprintf(fp,
- " <prefix> is required unless the -o or -O options are used.\n");
-
-@@ -574,12 +580,13 @@
-
- int main_bamshuf(int argc, char *argv[])
- {
-- int c, n_files = 64, clevel = DEF_CLEVEL, is_stdout = 0, is_un = 0, fast_coll = 0, reads_store = 10000, ret, pre_mem = 0;
-+ int c, n_files = 64, clevel = DEF_CLEVEL, is_stdout = 0, is_un = 0, fast_coll = 0, reads_store = 10000, ret, pre_mem = 0, no_pg = 0;
- const char *output_file = NULL;
-- char *prefix = NULL;
-+ char *prefix = NULL, *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -592,6 +599,7 @@
- case 'o': output_file = optarg; break;
- case 'f': fast_coll = 1; break;
- case 'r': reads_store = atoi(optarg); break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return usage(stderr, n_files, reads_store);
-@@ -612,10 +620,16 @@
-
- if (!prefix) return EXIT_FAILURE;
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("collate", "failed to create arg_list");
-+ return 1;
-+ }
-+
- ret = bamshuf(argv[optind], n_files, prefix, clevel, is_stdout,
-- output_file, fast_coll, reads_store, &ga);
-+ output_file, fast_coll, reads_store, &ga, arg_list, no_pg);
-
- if (pre_mem) free(prefix);
-+ free(arg_list);
-
- return ret;
- }
---- python-pysam.orig/samtools/bamshuf.c.pysam.c
-+++ python-pysam/samtools/bamshuf.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bamshuf.c -- collate subcommand.
-
- Copyright (C) 2012 Broad Institute.
-- Copyright (C) 2013, 2015, 2018 Genome Research Ltd.
-+ Copyright (C) 2013, 2015-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -166,7 +166,7 @@
- }
-
-
--static inline int write_to_bin_file(bam1_t *bam, int64_t *count, samFile **bin_files, char **names, bam_hdr_t *header, int files) {
-+static inline int write_to_bin_file(bam1_t *bam, int64_t *count, samFile **bin_files, char **names, sam_hdr_t *header, int files) {
- uint32_t x;
-
- x = hash_X31_Wang(bam_get_qname(bam)) % files;
-@@ -183,13 +183,13 @@
-
-
- static int bamshuf(const char *fn, int n_files, const char *pre, int clevel,
-- int is_samtools_stdout, const char *output_file, int fast, int store_max, sam_global_args *ga)
-+ int is_samtools_stdout, const char *output_file, int fast, int store_max, sam_global_args *ga, char *arg_list, int no_pg)
- {
- samFile *fp, *fpw = NULL, **fpt = NULL;
- char **fnt = NULL, modew[8];
- bam1_t *b = NULL;
- int i, counter, l, r;
-- bam_hdr_t *h = NULL;
-+ sam_hdr_t *h = NULL;
- int64_t j, max_cnt = 0, *cnt = NULL;
- elem_t *a = NULL;
- htsThreadPool p = {NULL, 0};
-@@ -216,14 +216,10 @@
- goto fail;
- }
-
-- if (sam_hdr_change_HD(h, "SO", "unsorted") != 0) {
-- print_error("collate",
-- "failed to change sort order header to 'unsorted'\n");
-- goto fail;
-- }
-- if (sam_hdr_change_HD(h, "GO", "query") != 0) {
-- print_error("collate",
-- "failed to change group order header to 'query'\n");
-+ if ((-1 == sam_hdr_update_hd(h, "SO", "unsorted", "GO", "query"))
-+ && (-1 == sam_hdr_add_line(h, "HD", "VN", SAM_FORMAT_VERSION, "SO", "unsorted", "GO", "query", NULL))
-+ ) {
-+ print_error("collate", "failed to update HD line\n");
- goto fail;
- }
-
-@@ -256,6 +252,15 @@
- }
- if (p.pool) hts_set_opt(fpw, HTS_OPT_THREAD_POOL, &p);
-
-+ if (!no_pg && sam_hdr_add_pg(h, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("collate", "failed to add PG line to header of \"%s\"", output_file);
-+ goto fail;
-+ }
-+
- if (sam_hdr_write(fpw, h) < 0) {
- print_error_errno("collate", "Couldn't write header");
- goto fail;
-@@ -461,7 +466,7 @@
- goto fail;
- }
- if (p.pool) hts_set_opt(fp, HTS_OPT_THREAD_POOL, &p);
-- bam_hdr_destroy(sam_hdr_read(fp)); // Skip over header
-+ sam_hdr_destroy(sam_hdr_read(fp)); // Skip over header
-
- // Slurp in one of the split files
- for (j = 0; j < c; ++j) {
-@@ -487,7 +492,7 @@
- }
- }
-
-- bam_hdr_destroy(h);
-+ sam_hdr_destroy(h);
- for (j = 0; j < max_cnt; ++j) bam_destroy1(a[j].b);
- free(a); free(fnt); free(cnt);
- sam_global_args_free(ga);
-@@ -505,7 +510,7 @@
- fail:
- if (fp) sam_close(fp);
- if (fpw) sam_close(fpw);
-- if (h) bam_hdr_destroy(h);
-+ if (h) sam_hdr_destroy(h);
- for (i = 0; i < n_files; ++i) {
- if (fnt) free(fnt[i]);
- if (fpt && fpt[i]) sam_close(fpt[i]);
-@@ -532,10 +537,11 @@
- " -f fast (only primary alignments)\n"
- " -r working reads stored (with -f) [%d]\n" // reads_store
- " -l INT compression level [%d]\n" // DEF_CLEVEL
-- " -n INT number of temporary files [%d]\n", // n_files
-+ " -n INT number of temporary files [%d]\n" // n_files
-+ " --no-PG do not add a PG line\n",
- reads_store, DEF_CLEVEL, n_files);
-
-- sam_global_opt_help(fp, "-....@");
-+ sam_global_opt_help(fp, "-....@-.");
- fprintf(fp,
- " <prefix> is required unless the -o or -O options are used.\n");
-
-@@ -576,12 +582,13 @@
-
- int main_bamshuf(int argc, char *argv[])
- {
-- int c, n_files = 64, clevel = DEF_CLEVEL, is_samtools_stdout = 0, is_un = 0, fast_coll = 0, reads_store = 10000, ret, pre_mem = 0;
-+ int c, n_files = 64, clevel = DEF_CLEVEL, is_samtools_stdout = 0, is_un = 0, fast_coll = 0, reads_store = 10000, ret, pre_mem = 0, no_pg = 0;
- const char *output_file = NULL;
-- char *prefix = NULL;
-+ char *prefix = NULL, *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -594,6 +601,7 @@
- case 'o': output_file = optarg; break;
- case 'f': fast_coll = 1; break;
- case 'r': reads_store = atoi(optarg); break;
-+ case 1: no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': return usage(samtools_stderr, n_files, reads_store);
-@@ -614,10 +622,16 @@
-
- if (!prefix) return EXIT_FAILURE;
-
-+ if (!no_pg && !(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("collate", "failed to create arg_list");
-+ return 1;
-+ }
-+
- ret = bamshuf(argv[optind], n_files, prefix, clevel, is_samtools_stdout,
-- output_file, fast_coll, reads_store, &ga);
-+ output_file, fast_coll, reads_store, &ga, arg_list, no_pg);
-
- if (pre_mem) free(prefix);
-+ free(arg_list);
-
- return ret;
- }
---- python-pysam.orig/samtools/bamtk.c
-+++ python-pysam/samtools/bamtk.c
-@@ -1,6 +1,6 @@
- /* bamtk.c -- main samtools command front-end.
-
-- Copyright (C) 2008-2018 Genome Research Ltd.
-+ Copyright (C) 2008-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -38,7 +38,7 @@
- int bam_merge(int argc, char *argv[]);
- int bam_index(int argc, char *argv[]);
- int bam_sort(int argc, char *argv[]);
--int bam_tview_main(int argc, char *argv[]);
-+//int bam_tview_main(int argc, char *argv[]);
- int bam_mating(int argc, char *argv[]);
- int bam_rmdup(int argc, char *argv[]);
- int bam_flagstat(int argc, char *argv[]);
-@@ -52,6 +52,7 @@
- int main_phase(int argc, char *argv[]);
- int main_cat(int argc, char *argv[]);
- int main_depth(int argc, char *argv[]);
-+int main_coverage(int argc, char *argv[]);
- int main_bam2fq(int argc, char *argv[]);
- int main_pad2unpad(int argc, char *argv[]);
- int main_bedcov(int argc, char *argv[]);
-@@ -109,6 +110,7 @@
- "\n"
- " -- Statistics\n"
- " bedcov read depth per BED region\n"
-+" coverage alignment depth and percent coverage\n"
- " depth compute the depth\n"
- " flagstat simple stats\n"
- " idxstats BAM index stats\n"
-@@ -166,14 +168,16 @@
- else if (strcmp(argv[1], "merge") == 0) ret = bam_merge(argc-1, argv+1);
- else if (strcmp(argv[1], "sort") == 0) ret = bam_sort(argc-1, argv+1);
- else if (strcmp(argv[1], "index") == 0) ret = bam_index(argc-1, argv+1);
-- else if (strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1);
-+ else if (strcmp(argv[1], "idxstat") == 0 ||
-+ strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1);
- else if (strcmp(argv[1], "faidx") == 0) ret = faidx_main(argc-1, argv+1);
- else if (strcmp(argv[1], "fqidx") == 0) ret = fqidx_main(argc-1, argv+1);
- else if (strcmp(argv[1], "dict") == 0) ret = dict_main(argc-1, argv+1);
- else if (strcmp(argv[1], "fixmate") == 0) ret = bam_mating(argc-1, argv+1);
- else if (strcmp(argv[1], "rmdup") == 0) ret = bam_rmdup(argc-1, argv+1);
- else if (strcmp(argv[1], "markdup") == 0) ret = bam_markdup(argc-1, argv+1);
-- else if (strcmp(argv[1], "flagstat") == 0) ret = bam_flagstat(argc-1, argv+1);
-+ else if (strcmp(argv[1], "flagstat") == 0 ||
-+ strcmp(argv[1], "flagstats") == 0) ret = bam_flagstat(argc-1, argv+1);
- else if (strcmp(argv[1], "calmd") == 0) ret = bam_fillmd(argc-1, argv+1);
- else if (strcmp(argv[1], "fillmd") == 0) ret = bam_fillmd(argc-1, argv+1);
- else if (strcmp(argv[1], "reheader") == 0) ret = main_reheader(argc-1, argv+1);
-@@ -181,6 +185,7 @@
- else if (strcmp(argv[1], "targetcut") == 0) ret = main_cut_target(argc-1, argv+1);
- else if (strcmp(argv[1], "phase") == 0) ret = main_phase(argc-1, argv+1);
- else if (strcmp(argv[1], "depth") == 0) ret = main_depth(argc-1, argv+1);
-+ else if (strcmp(argv[1], "coverage") == 0) ret = main_coverage(argc-1, argv+1);
- else if (strcmp(argv[1], "bam2fq") == 0 ||
- strcmp(argv[1], "fastq") == 0 ||
- strcmp(argv[1], "fasta") == 0) ret = main_bam2fq(argc-1, argv+1);
-@@ -189,8 +194,10 @@
- else if (strcmp(argv[1], "bedcov") == 0) ret = main_bedcov(argc-1, argv+1);
- else if (strcmp(argv[1], "bamshuf") == 0) ret = main_bamshuf(argc-1, argv+1);
- else if (strcmp(argv[1], "collate") == 0) ret = main_bamshuf(argc-1, argv+1);
-- else if (strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1);
-- else if (strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1);
-+ else if (strcmp(argv[1], "stat") == 0 ||
-+ strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1);
-+ else if (strcmp(argv[1], "flag") == 0 ||
-+ strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1);
- else if (strcmp(argv[1], "split") == 0) ret = main_split(argc-1, argv+1);
- else if (strcmp(argv[1], "quickcheck") == 0) ret = main_quickcheck(argc-1, argv+1);
- else if (strcmp(argv[1], "addreplacerg") == 0) ret = main_addreplacerg(argc-1, argv+1);
-@@ -198,12 +205,12 @@
- fprintf(stderr, "[main] The `pileup' command has been removed. Please use `mpileup' instead.\n");
- return 1;
- }
-- else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1);
-+ //else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1);
- else if (strcmp(argv[1], "--version") == 0) {
- printf(
- "samtools %s\n"
- "Using htslib %s\n"
--"Copyright (C) 2018 Genome Research Ltd.\n",
-+"Copyright (C) 2019 Genome Research Ltd.\n",
- samtools_version(), hts_version());
- }
- else if (strcmp(argv[1], "--version-only") == 0) {
---- python-pysam.orig/samtools/bamtk.c.pysam.c
-+++ python-pysam/samtools/bamtk.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* bamtk.c -- main samtools command front-end.
-
-- Copyright (C) 2008-2018 Genome Research Ltd.
-+ Copyright (C) 2008-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -54,6 +54,7 @@
- int main_phase(int argc, char *argv[]);
- int main_cat(int argc, char *argv[]);
- int main_depth(int argc, char *argv[]);
-+int main_coverage(int argc, char *argv[]);
- int main_bam2fq(int argc, char *argv[]);
- int main_pad2unpad(int argc, char *argv[]);
- int main_bedcov(int argc, char *argv[]);
-@@ -111,6 +112,7 @@
- "\n"
- " -- Statistics\n"
- " bedcov read depth per BED region\n"
-+" coverage alignment depth and percent coverage\n"
- " depth compute the depth\n"
- " flagstat simple stats\n"
- " idxstats BAM index stats\n"
-@@ -168,14 +170,16 @@
- else if (strcmp(argv[1], "merge") == 0) ret = bam_merge(argc-1, argv+1);
- else if (strcmp(argv[1], "sort") == 0) ret = bam_sort(argc-1, argv+1);
- else if (strcmp(argv[1], "index") == 0) ret = bam_index(argc-1, argv+1);
-- else if (strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1);
-+ else if (strcmp(argv[1], "idxstat") == 0 ||
-+ strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1);
- else if (strcmp(argv[1], "faidx") == 0) ret = faidx_main(argc-1, argv+1);
- else if (strcmp(argv[1], "fqidx") == 0) ret = fqidx_main(argc-1, argv+1);
- else if (strcmp(argv[1], "dict") == 0) ret = dict_main(argc-1, argv+1);
- else if (strcmp(argv[1], "fixmate") == 0) ret = bam_mating(argc-1, argv+1);
- else if (strcmp(argv[1], "rmdup") == 0) ret = bam_rmdup(argc-1, argv+1);
- else if (strcmp(argv[1], "markdup") == 0) ret = bam_markdup(argc-1, argv+1);
-- else if (strcmp(argv[1], "flagstat") == 0) ret = bam_flagstat(argc-1, argv+1);
-+ else if (strcmp(argv[1], "flagstat") == 0 ||
-+ strcmp(argv[1], "flagstats") == 0) ret = bam_flagstat(argc-1, argv+1);
- else if (strcmp(argv[1], "calmd") == 0) ret = bam_fillmd(argc-1, argv+1);
- else if (strcmp(argv[1], "fillmd") == 0) ret = bam_fillmd(argc-1, argv+1);
- else if (strcmp(argv[1], "reheader") == 0) ret = main_reheader(argc-1, argv+1);
-@@ -183,6 +187,7 @@
- else if (strcmp(argv[1], "targetcut") == 0) ret = main_cut_target(argc-1, argv+1);
- else if (strcmp(argv[1], "phase") == 0) ret = main_phase(argc-1, argv+1);
- else if (strcmp(argv[1], "depth") == 0) ret = main_depth(argc-1, argv+1);
-+ else if (strcmp(argv[1], "coverage") == 0) ret = main_coverage(argc-1, argv+1);
- else if (strcmp(argv[1], "bam2fq") == 0 ||
- strcmp(argv[1], "fastq") == 0 ||
- strcmp(argv[1], "fasta") == 0) ret = main_bam2fq(argc-1, argv+1);
-@@ -191,8 +196,10 @@
- else if (strcmp(argv[1], "bedcov") == 0) ret = main_bedcov(argc-1, argv+1);
- else if (strcmp(argv[1], "bamshuf") == 0) ret = main_bamshuf(argc-1, argv+1);
- else if (strcmp(argv[1], "collate") == 0) ret = main_bamshuf(argc-1, argv+1);
-- else if (strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1);
-- else if (strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1);
-+ else if (strcmp(argv[1], "stat") == 0 ||
-+ strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1);
-+ else if (strcmp(argv[1], "flag") == 0 ||
-+ strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1);
- else if (strcmp(argv[1], "split") == 0) ret = main_split(argc-1, argv+1);
- else if (strcmp(argv[1], "quickcheck") == 0) ret = main_quickcheck(argc-1, argv+1);
- else if (strcmp(argv[1], "addreplacerg") == 0) ret = main_addreplacerg(argc-1, argv+1);
-@@ -202,10 +209,10 @@
- }
- //else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1);
- else if (strcmp(argv[1], "--version") == 0) {
-- fprintf(samtools_stdout,
-+ fprintf(samtools_stdout,
- "samtools %s\n"
- "Using htslib %s\n"
--"Copyright (C) 2018 Genome Research Ltd.\n",
-+"Copyright (C) 2019 Genome Research Ltd.\n",
- samtools_version(), hts_version());
- }
- else if (strcmp(argv[1], "--version-only") == 0) {
---- python-pysam.orig/samtools/bedcov.c
-+++ python-pysam/samtools/bedcov.c
-@@ -1,7 +1,7 @@
- /* bedcov.c -- bedcov subcommand.
-
- Copyright (C) 2012 Broad Institute.
-- Copyright (C) 2013-2014 Genome Research Ltd.
-+ Copyright (C) 2013-2014, 2018, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -34,6 +34,7 @@
- #include "htslib/kstring.h"
- #include "htslib/sam.h"
- #include "htslib/thread_pool.h"
-+#include "samtools.h"
- #include "sam_opts.h"
-
- #include "htslib/kseq.h"
-@@ -41,7 +42,7 @@
-
- typedef struct {
- htsFile *fp;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- hts_itr_t *iter;
- int min_mapQ;
- } aux_t;
-@@ -71,7 +72,7 @@
- int *n_plp, dret, i, j, m, n, c, min_mapQ = 0, skip_DN = 0;
- int64_t *cnt;
- const bam_pileup1_t **plp;
-- int usage = 0;
-+ int usage = 0, has_index_file = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-@@ -79,9 +80,10 @@
- { NULL, 0, NULL, 0 }
- };
-
-- while ((c = getopt_long(argc, argv, "Q:j", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "Q:Xj", lopts, NULL)) >= 0) {
- switch (c) {
- case 'Q': min_mapQ = atoi(optarg); break;
-+ case 'X': has_index_file = 1; break;
- case 'j': skip_DN = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
-@@ -93,20 +95,36 @@
- fprintf(stderr, "Usage: samtools bedcov [options] <in.bed> <in1.bam> [...]\n\n");
- fprintf(stderr, "Options:\n");
- fprintf(stderr, " -Q <int> mapping quality threshold [0]\n");
-+ fprintf(stderr, " -X use customized index files\n");
- fprintf(stderr, " -j do not include deletions (D) and ref skips (N) in bedcov computation\n");
-- sam_global_opt_help(stderr, "-.--.-");
-+ sam_global_opt_help(stderr, "-.--.--.");
- return 1;
- }
-+ if (has_index_file) {
-+ if ((argc - optind - 1) % 2 != 0) { // Calculate # of input BAM files
-+ fprintf(stderr, "ERROR: odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ n = (argc - optind - 1) / 2;
-+ } else {
-+ n = argc - optind - 1;
-+ }
-+
- memset(&str, 0, sizeof(kstring_t));
-- n = argc - optind - 1;
- aux = calloc(n, sizeof(aux_t*));
- idx = calloc(n, sizeof(hts_idx_t*));
- for (i = 0; i < n; ++i) {
- aux[i] = calloc(1, sizeof(aux_t));
- aux[i]->min_mapQ = min_mapQ;
- aux[i]->fp = sam_open_format(argv[i+optind+1], "r", &ga.in);
-- if (aux[i]->fp)
-- idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]);
-+ if (aux[i]->fp) {
-+ // If index filename has not been specfied, look in BAM folder
-+ if (has_index_file) {
-+ idx[i] = sam_index_load2(aux[i]->fp, argv[i+optind+1], argv[i+optind+n+1]);
-+ } else {
-+ idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]);
-+ }
-+ }
- if (aux[i]->fp == 0 || idx[i] == 0) {
- fprintf(stderr, "ERROR: fail to open index BAM file '%s'\n", argv[i+optind+1]);
- return 2;
-@@ -122,6 +140,10 @@
- cnt = calloc(n, 8);
-
- fp = gzopen(argv[optind], "rb");
-+ if (fp == NULL) {
-+ print_error_errno("bedcov", "can't open BED file '%s'", argv[optind]);
-+ return 2;
-+ }
- ks = ks_init(fp);
- n_plp = calloc(n, sizeof(int));
- plp = calloc(n, sizeof(bam_pileup1_t*));
-@@ -186,7 +208,7 @@
- for (i = 0; i < n; ++i) {
- if (aux[i]->iter) hts_itr_destroy(aux[i]->iter);
- hts_idx_destroy(idx[i]);
-- bam_hdr_destroy(aux[i]->header);
-+ sam_hdr_destroy(aux[i]->header);
- sam_close(aux[i]->fp);
- free(aux[i]);
- }
---- python-pysam.orig/samtools/bedcov.c.pysam.c
-+++ python-pysam/samtools/bedcov.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bedcov.c -- bedcov subcommand.
-
- Copyright (C) 2012 Broad Institute.
-- Copyright (C) 2013-2014 Genome Research Ltd.
-+ Copyright (C) 2013-2014, 2018, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -36,6 +36,7 @@
- #include "htslib/kstring.h"
- #include "htslib/sam.h"
- #include "htslib/thread_pool.h"
-+#include "samtools.h"
- #include "sam_opts.h"
-
- #include "htslib/kseq.h"
-@@ -43,7 +44,7 @@
-
- typedef struct {
- htsFile *fp;
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- hts_itr_t *iter;
- int min_mapQ;
- } aux_t;
-@@ -73,7 +74,7 @@
- int *n_plp, dret, i, j, m, n, c, min_mapQ = 0, skip_DN = 0;
- int64_t *cnt;
- const bam_pileup1_t **plp;
-- int usage = 0;
-+ int usage = 0, has_index_file = 0;
-
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
-@@ -81,9 +82,10 @@
- { NULL, 0, NULL, 0 }
- };
-
-- while ((c = getopt_long(argc, argv, "Q:j", lopts, NULL)) >= 0) {
-+ while ((c = getopt_long(argc, argv, "Q:Xj", lopts, NULL)) >= 0) {
- switch (c) {
- case 'Q': min_mapQ = atoi(optarg); break;
-+ case 'X': has_index_file = 1; break;
- case 'j': skip_DN = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
-@@ -95,20 +97,36 @@
- fprintf(samtools_stderr, "Usage: samtools bedcov [options] <in.bed> <in1.bam> [...]\n\n");
- fprintf(samtools_stderr, "Options:\n");
- fprintf(samtools_stderr, " -Q <int> mapping quality threshold [0]\n");
-+ fprintf(samtools_stderr, " -X use customized index files\n");
- fprintf(samtools_stderr, " -j do not include deletions (D) and ref skips (N) in bedcov computation\n");
-- sam_global_opt_help(samtools_stderr, "-.--.-");
-+ sam_global_opt_help(samtools_stderr, "-.--.--.");
- return 1;
- }
-+ if (has_index_file) {
-+ if ((argc - optind - 1) % 2 != 0) { // Calculate # of input BAM files
-+ fprintf(samtools_stderr, "ERROR: odd number of filenames detected! Each BAM file should have an index file\n");
-+ return 1;
-+ }
-+ n = (argc - optind - 1) / 2;
-+ } else {
-+ n = argc - optind - 1;
-+ }
-+
- memset(&str, 0, sizeof(kstring_t));
-- n = argc - optind - 1;
- aux = calloc(n, sizeof(aux_t*));
- idx = calloc(n, sizeof(hts_idx_t*));
- for (i = 0; i < n; ++i) {
- aux[i] = calloc(1, sizeof(aux_t));
- aux[i]->min_mapQ = min_mapQ;
- aux[i]->fp = sam_open_format(argv[i+optind+1], "r", &ga.in);
-- if (aux[i]->fp)
-- idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]);
-+ if (aux[i]->fp) {
-+ // If index filename has not been specfied, look in BAM folder
-+ if (has_index_file) {
-+ idx[i] = sam_index_load2(aux[i]->fp, argv[i+optind+1], argv[i+optind+n+1]);
-+ } else {
-+ idx[i] = sam_index_load(aux[i]->fp, argv[i+optind+1]);
-+ }
-+ }
- if (aux[i]->fp == 0 || idx[i] == 0) {
- fprintf(samtools_stderr, "ERROR: fail to open index BAM file '%s'\n", argv[i+optind+1]);
- return 2;
-@@ -124,6 +142,10 @@
- cnt = calloc(n, 8);
-
- fp = gzopen(argv[optind], "rb");
-+ if (fp == NULL) {
-+ print_error_errno("bedcov", "can't open BED file '%s'", argv[optind]);
-+ return 2;
-+ }
- ks = ks_init(fp);
- n_plp = calloc(n, sizeof(int));
- plp = calloc(n, sizeof(bam_pileup1_t*));
-@@ -188,7 +210,7 @@
- for (i = 0; i < n; ++i) {
- if (aux[i]->iter) hts_itr_destroy(aux[i]->iter);
- hts_idx_destroy(idx[i]);
-- bam_hdr_destroy(aux[i]->header);
-+ sam_hdr_destroy(aux[i]->header);
- sam_close(aux[i]->fp);
- free(aux[i]);
- }
---- python-pysam.orig/samtools/bedidx.c
-+++ python-pysam/samtools/bedidx.c
-@@ -1,7 +1,7 @@
- /* bedidx.c -- BED file indexing.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2014,2017 Genome Research Ltd.
-+ Copyright (C) 2014, 2017-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -34,26 +34,28 @@
- #include "bedidx.h"
-
- #include "htslib/ksort.h"
--KSORT_INIT_GENERIC(uint64_t)
-
- #include "htslib/kseq.h"
- KSTREAM_INIT(gzFile, gzread, 8192)
-
-+static inline int lt_pair_pos(hts_pair_pos_t a, hts_pair_pos_t b) {
-+ if (a.beg == b.beg) return a.end < b.end;
-+ return a.beg < b.beg;
-+}
-+KSORT_INIT_STATIC(hts_pair_pos_t, hts_pair_pos_t, lt_pair_pos)
-+
- /*! @typedef
- * @abstract bed_reglist_t - value type of the BED hash table
- * This structure encodes the list of intervals (ranges) for the regions provided via BED file or
- * command line arguments.
-- * @field *a pointer to the array of intervals (kept as 64 bit integers). The upper 32 bits
-- * encode the beginning of the interval, while the lower 32 bits encode the end, for easy sorting.
-- * |-- 32 bits --|-- 32 bits --|
-- * |---- beg ----|---- end ----|
-+ * @field *a pointer to the array of intervals.
- * @field n actual number of elements contained by a
- * @field m number of allocated elements to a (n <= m)
- * @field *idx index array for computing the minimum offset
- */
- typedef struct {
- int n, m;
-- uint64_t *a;
-+ hts_pair_pos_t *a;
- int *idx;
- int filter;
- } bed_reglist_t;
-@@ -71,7 +73,6 @@
- khint_t k;
- int i;
- const char *reg;
-- uint32_t beg, end;
-
- if (!h) {
- printf("Hash table is empty!\n");
-@@ -84,10 +85,8 @@
- if ((p = &kh_val(h,k)) != NULL && p->n > 0) {
- printf("Filter: %d\n", p->filter);
- for (i=0; i<p->n; i++) {
-- beg = (uint32_t)(p->a[i]>>32);
-- end = (uint32_t)(p->a[i]);
--
-- printf("\tinterval[%d]: %d-%d\n",i,beg,end);
-+ printf("\tinterval[%d]: %"PRIhts_pos"-%"PRIhts_pos"\n",
-+ i,p->a[i].beg,p->a[i].end);
- }
- } else {
- printf("Region '%s' has no intervals!\n", reg);
-@@ -97,20 +96,23 @@
- }
- #endif
-
--static int *bed_index_core(int n, uint64_t *a)
-+static int *bed_index_core(int n, hts_pair_pos_t *a)
- {
-- int i, j, l, *idx;
-+ int i, j, l, *idx, *new_idx;
- l = 0; idx = 0;
- for (i = 0; i < n; ++i) {
-- int beg, end;
-- beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT;
-+ hts_pos_t beg, end;
-+ beg = a[i].beg >> LIDX_SHIFT; end = a[i].end >> LIDX_SHIFT;
- if (l < end + 1) {
- int old_l = l;
- l = end + 1;
- kroundup32(l);
-- idx = realloc(idx, l * sizeof(int));
-- if (!idx)
-+ new_idx = realloc(idx, l * sizeof(*idx));
-+ if (!new_idx) {
-+ free(idx);
- return NULL;
-+ }
-+ idx = new_idx;
-
- for (j = old_l; j < l; ++j)
- idx[j] = -1;
-@@ -131,19 +133,19 @@
- if (kh_exist(h, k)) {
- bed_reglist_t *p = &kh_val(h, k);
- if (p->idx) free(p->idx);
-- ks_introsort(uint64_t, p->n, p->a);
-+ ks_introsort(hts_pair_pos_t, p->n, p->a);
- p->idx = bed_index_core(p->n, p->a);
- }
- }
- }
-
--static int bed_minoff(const bed_reglist_t *p, unsigned int beg, unsigned int end) {
-+static int bed_minoff(const bed_reglist_t *p, hts_pos_t beg, hts_pos_t end) {
- int i, min_off=0;
-
- if (p && p->idx) {
- min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT];
- if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here
-- int n = beg>>LIDX_SHIFT;
-+ hts_pos_t n = beg>>LIDX_SHIFT;
- if (n > p->n)
- n = p->n;
- for (i = n - 1; i >= 0; --i)
-@@ -156,21 +158,21 @@
- return min_off;
- }
-
--static int bed_overlap_core(const bed_reglist_t *p, int beg, int end)
-+static int bed_overlap_core(const bed_reglist_t *p, hts_pos_t beg, hts_pos_t end)
- {
- int i, min_off;
- if (p->n == 0) return 0;
- min_off = bed_minoff(p, beg, end);
-
- for (i = min_off; i < p->n; ++i) {
-- if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed
-- if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end)
-+ if (p->a[i].beg >= end) break; // out of range; no need to proceed
-+ if (p->a[i].end > beg && p->a[i].beg < end)
- return 1; // find the overlap; return
- }
- return 0;
- }
-
--int bed_overlap(const void *_h, const char *chr, int beg, int end)
-+int bed_overlap(const void *_h, const char *chr, hts_pos_t beg, hts_pos_t end)
- {
- const reghash_t *h = (const reghash_t*)_h;
- khint_t k;
-@@ -202,11 +204,11 @@
- continue;
-
- for (new_n = 0, j = 1; j < p->n; j++) {
-- if ((uint32_t)p->a[new_n] < (uint32_t)(p->a[j]>>32)) {
-+ if (p->a[new_n].end < p->a[j].beg) {
- p->a[++new_n] = p->a[j];
- } else {
-- if ((uint32_t)p->a[new_n] < (uint32_t)p->a[j])
-- p->a[new_n] = (p->a[new_n] & 0xFFFFFFFF00000000) | (uint32_t)(p->a[j]);
-+ if (p->a[new_n].end < p->a[j].end)
-+ p->a[new_n].end = p->a[j].end;
- }
- }
-
-@@ -260,13 +262,17 @@
- if (fp == 0) return 0;
- ks = ks_init(fp);
- if (NULL == ks) goto fail; // In case ks_init ever gets error checking...
-- while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) > 0) { // read a line
-+ int ks_len;
-+ while ((ks_len = ks_getuntil(ks, KS_SEP_LINE, &str, &dret)) >= 0) { // read a line
- char *ref = str.s, *ref_end;
-- unsigned int beg = 0, end = 0;
-+ uint64_t beg = 0, end = 0;
- int num = 0;
- khint_t k;
- bed_reglist_t *p;
-
-+ if (ks_len == 0)
-+ continue; // skip blank lines
-+
- line++;
- while (*ref && isspace(*ref)) ref++;
- if ('\0' == *ref) continue; // Skip blank lines
-@@ -275,7 +281,7 @@
- while (*ref_end && !isspace(*ref_end)) ref_end++;
- if ('\0' != *ref_end) {
- *ref_end = '\0'; // terminate ref and look for start, end
-- num = sscanf(ref_end + 1, "%u %u", &beg, &end);
-+ num = sscanf(ref_end + 1, "%"SCNu64" %"SCNu64, &beg, &end);
- }
- if (1 == num) { // VCF-style format
- end = beg--; // Counts from 1 instead of 0 for BED files
-@@ -293,7 +299,8 @@
- } else {
- fprintf(stderr,
- "[bed_read] Parse error reading \"%s\" at line %u : "
-- "end (%u) must not be less than start (%u)\n",
-+ "end (%"PRIu64") must not be less "
-+ "than start (%"PRIu64")\n",
- fn, line, end, beg);
- }
- errno = 0; // Prevent caller from printing misleading error messages
-@@ -318,16 +325,21 @@
- // Add begin,end to the list
- if (p->n == p->m) {
- p->m = p->m ? p->m<<1 : 4;
-- p->a = realloc(p->a, p->m * sizeof(uint64_t));
-- if (NULL == p->a) goto fail;
-+ hts_pair_pos_t *new_a = realloc(p->a, p->m * sizeof(p->a[0]));
-+ if (NULL == new_a) goto fail;
-+ p->a = new_a;
- }
-- p->a[p->n++] = (uint64_t)beg<<32 | end;
-+ p->a[p->n].beg = beg;
-+ p->a[p->n++].end = end;
- }
- // FIXME: Need to check for errors in ks_getuntil. At the moment it
- // doesn't look like it can return one. Possibly use gzgets instead?
-
-+ if (gzclose(fp) != Z_OK) {
-+ fp = NULL;
-+ goto fail;
-+ }
- ks_destroy(ks);
-- gzclose(fp);
- free(str.s);
- bed_index(h);
- //bed_unify(h);
-@@ -361,7 +373,7 @@
- kh_destroy(reg, h);
- }
-
--static void *bed_insert(void *reg_hash, char *reg, unsigned int beg, unsigned int end) {
-+static void *bed_insert(void *reg_hash, char *reg, hts_pos_t beg, hts_pos_t end) {
-
- reghash_t *h;
- khint_t k;
-@@ -390,10 +402,12 @@
- // Add beg and end to the list
- if (p->n == p->m) {
- p->m = p->m ? p->m<<1 : 4;
-- p->a = realloc(p->a, p->m * sizeof(uint64_t));
-- if (NULL == p->a) goto fail;
-+ hts_pair_pos_t *new_a = realloc(p->a, p->m * sizeof(p->a[0]));
-+ if (NULL == new_a) goto fail;
-+ p->a = new_a;
- }
-- p->a[p->n++] = (uint64_t)beg<<32 | end;
-+ p->a[p->n].beg = beg;
-+ p->a[p->n++].end = end;
-
- fail:
- return h;
-@@ -413,10 +427,10 @@
- reghash_t *t;
- bed_reglist_t *p, *q;
- khint_t l, k;
-- uint64_t *new_a;
-+ hts_pair_pos_t *new_a;
- int i, j, new_n, min_off;
- const char *reg;
-- uint32_t beg, end;
-+ hts_pos_t beg, end;
-
- h = (reghash_t *)reg_hash;
- t = (reghash_t *)tmp_hash;
-@@ -434,20 +448,21 @@
- if (k == kh_end(h) || !(p = &kh_val(h, k)) || !(p->n))
- continue;
-
-- new_a = (uint64_t *)calloc(q->n + p->n, sizeof(uint64_t));
-+ new_a = calloc(q->n + p->n, sizeof(new_a[0]));
- if (!new_a)
- return NULL;
- new_n = 0;
-
- for (i = 0; i < q->n; i++) {
-- beg = (uint32_t)(q->a[i]>>32);
-- end = (uint32_t)(q->a[i]);
-+ beg = q->a[i].beg;
-+ end = q->a[i].end;
-
- min_off = bed_minoff(p, beg, end);
- for (j = min_off; j < p->n; ++j) {
-- if ((uint32_t)(p->a[j]>>32) >= end) break; // out of range; no need to proceed
-- if ((uint32_t)(p->a[j]) > beg && (uint32_t)(p->a[j]>>32) < end) {
-- new_a[new_n++] = ((uint64_t)MAX((uint32_t)(p->a[j]>>32), beg) << 32) | MIN((uint32_t)p->a[j], end);
-+ if (p->a[j].beg >= end) break; // out of range; no need to proceed
-+ if (p->a[j].end > beg && p->a[j].beg < end) {
-+ new_a[new_n].beg = MAX(p->a[j].beg, beg);
-+ new_a[new_n++].end = MIN(p->a[j].end, end);
- }
- }
- }
-@@ -494,6 +509,11 @@
-
- for (i=first; i<last; i++) {
-
-+ // Note, ideally we would call sam_parse_region here, but it's complicated by not
-+ // having the sam header known and the likelihood of the bed file containing data for other
-+ // references too which we currently just ignore.
-+ //
-+ // TO DO...
- q = hts_parse_reg(regs[i], &beg, &end);
- if (q) {
- if ((int)(q - regs[i] + 1) > 1024) {
-@@ -596,8 +616,8 @@
- reglist[count].max_end = 0;
-
- for (j = 0; j < p->n; j++) {
-- reglist[count].intervals[j].beg = (uint32_t)(p->a[j]>>32);
-- reglist[count].intervals[j].end = (uint32_t)(p->a[j]);
-+ reglist[count].intervals[j].beg = p->a[j].beg;
-+ reglist[count].intervals[j].end = p->a[j].end;
-
- if (reglist[count].intervals[j].end > reglist[count].max_end)
- reglist[count].max_end = reglist[count].intervals[j].end;
---- python-pysam.orig/samtools/bedidx.c.pysam.c
-+++ python-pysam/samtools/bedidx.c.pysam.c
-@@ -3,7 +3,7 @@
- /* bedidx.c -- BED file indexing.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2014,2017 Genome Research Ltd.
-+ Copyright (C) 2014, 2017-2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -36,26 +36,28 @@
- #include "bedidx.h"
-
- #include "htslib/ksort.h"
--KSORT_INIT_GENERIC(uint64_t)
-
- #include "htslib/kseq.h"
- KSTREAM_INIT(gzFile, gzread, 8192)
-
-+static inline int lt_pair_pos(hts_pair_pos_t a, hts_pair_pos_t b) {
-+ if (a.beg == b.beg) return a.end < b.end;
-+ return a.beg < b.beg;
-+}
-+KSORT_INIT_STATIC(hts_pair_pos_t, hts_pair_pos_t, lt_pair_pos)
-+
- /*! @typedef
- * @abstract bed_reglist_t - value type of the BED hash table
- * This structure encodes the list of intervals (ranges) for the regions provided via BED file or
- * command line arguments.
-- * @field *a pointer to the array of intervals (kept as 64 bit integers). The upper 32 bits
-- * encode the beginning of the interval, while the lower 32 bits encode the end, for easy sorting.
-- * |-- 32 bits --|-- 32 bits --|
-- * |---- beg ----|---- end ----|
-+ * @field *a pointer to the array of intervals.
- * @field n actual number of elements contained by a
- * @field m number of allocated elements to a (n <= m)
- * @field *idx index array for computing the minimum offset
- */
- typedef struct {
- int n, m;
-- uint64_t *a;
-+ hts_pair_pos_t *a;
- int *idx;
- int filter;
- } bed_reglist_t;
-@@ -73,7 +75,6 @@
- khint_t k;
- int i;
- const char *reg;
-- uint32_t beg, end;
-
- if (!h) {
- fprintf(samtools_stdout, "Hash table is empty!\n");
-@@ -86,10 +87,8 @@
- if ((p = &kh_val(h,k)) != NULL && p->n > 0) {
- fprintf(samtools_stdout, "Filter: %d\n", p->filter);
- for (i=0; i<p->n; i++) {
-- beg = (uint32_t)(p->a[i]>>32);
-- end = (uint32_t)(p->a[i]);
--
-- fprintf(samtools_stdout, "\tinterval[%d]: %d-%d\n",i,beg,end);
-+ fprintf(samtools_stdout, "\tinterval[%d]: %"PRIhts_pos"-%"PRIhts_pos"\n",
-+ i,p->a[i].beg,p->a[i].end);
- }
- } else {
- fprintf(samtools_stdout, "Region '%s' has no intervals!\n", reg);
-@@ -99,20 +98,23 @@
- }
- #endif
-
--static int *bed_index_core(int n, uint64_t *a)
-+static int *bed_index_core(int n, hts_pair_pos_t *a)
- {
-- int i, j, l, *idx;
-+ int i, j, l, *idx, *new_idx;
- l = 0; idx = 0;
- for (i = 0; i < n; ++i) {
-- int beg, end;
-- beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT;
-+ hts_pos_t beg, end;
-+ beg = a[i].beg >> LIDX_SHIFT; end = a[i].end >> LIDX_SHIFT;
- if (l < end + 1) {
- int old_l = l;
- l = end + 1;
- kroundup32(l);
-- idx = realloc(idx, l * sizeof(int));
-- if (!idx)
-+ new_idx = realloc(idx, l * sizeof(*idx));
-+ if (!new_idx) {
-+ free(idx);
- return NULL;
-+ }
-+ idx = new_idx;
-
- for (j = old_l; j < l; ++j)
- idx[j] = -1;
-@@ -133,19 +135,19 @@
- if (kh_exist(h, k)) {
- bed_reglist_t *p = &kh_val(h, k);
- if (p->idx) free(p->idx);
-- ks_introsort(uint64_t, p->n, p->a);
-+ ks_introsort(hts_pair_pos_t, p->n, p->a);
- p->idx = bed_index_core(p->n, p->a);
- }
- }
- }
-
--static int bed_minoff(const bed_reglist_t *p, unsigned int beg, unsigned int end) {
-+static int bed_minoff(const bed_reglist_t *p, hts_pos_t beg, hts_pos_t end) {
- int i, min_off=0;
-
- if (p && p->idx) {
- min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT];
- if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here
-- int n = beg>>LIDX_SHIFT;
-+ hts_pos_t n = beg>>LIDX_SHIFT;
- if (n > p->n)
- n = p->n;
- for (i = n - 1; i >= 0; --i)
-@@ -158,21 +160,21 @@
- return min_off;
- }
-
--static int bed_overlap_core(const bed_reglist_t *p, int beg, int end)
-+static int bed_overlap_core(const bed_reglist_t *p, hts_pos_t beg, hts_pos_t end)
- {
- int i, min_off;
- if (p->n == 0) return 0;
- min_off = bed_minoff(p, beg, end);
-
- for (i = min_off; i < p->n; ++i) {
-- if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed
-- if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end)
-+ if (p->a[i].beg >= end) break; // out of range; no need to proceed
-+ if (p->a[i].end > beg && p->a[i].beg < end)
- return 1; // find the overlap; return
- }
- return 0;
- }
-
--int bed_overlap(const void *_h, const char *chr, int beg, int end)
-+int bed_overlap(const void *_h, const char *chr, hts_pos_t beg, hts_pos_t end)
- {
- const reghash_t *h = (const reghash_t*)_h;
- khint_t k;
-@@ -204,11 +206,11 @@
- continue;
-
- for (new_n = 0, j = 1; j < p->n; j++) {
-- if ((uint32_t)p->a[new_n] < (uint32_t)(p->a[j]>>32)) {
-+ if (p->a[new_n].end < p->a[j].beg) {
- p->a[++new_n] = p->a[j];
- } else {
-- if ((uint32_t)p->a[new_n] < (uint32_t)p->a[j])
-- p->a[new_n] = (p->a[new_n] & 0xFFFFFFFF00000000) | (uint32_t)(p->a[j]);
-+ if (p->a[new_n].end < p->a[j].end)
-+ p->a[new_n].end = p->a[j].end;
- }
- }
-
-@@ -262,13 +264,17 @@
- if (fp == 0) return 0;
- ks = ks_init(fp);
- if (NULL == ks) goto fail; // In case ks_init ever gets error checking...
-- while (ks_getuntil(ks, KS_SEP_LINE, &str, &dret) > 0) { // read a line
-+ int ks_len;
-+ while ((ks_len = ks_getuntil(ks, KS_SEP_LINE, &str, &dret)) >= 0) { // read a line
- char *ref = str.s, *ref_end;
-- unsigned int beg = 0, end = 0;
-+ uint64_t beg = 0, end = 0;
- int num = 0;
- khint_t k;
- bed_reglist_t *p;
-
-+ if (ks_len == 0)
-+ continue; // skip blank lines
-+
- line++;
- while (*ref && isspace(*ref)) ref++;
- if ('\0' == *ref) continue; // Skip blank lines
-@@ -277,7 +283,7 @@
- while (*ref_end && !isspace(*ref_end)) ref_end++;
- if ('\0' != *ref_end) {
- *ref_end = '\0'; // terminate ref and look for start, end
-- num = sscanf(ref_end + 1, "%u %u", &beg, &end);
-+ num = sscanf(ref_end + 1, "%"SCNu64" %"SCNu64, &beg, &end);
- }
- if (1 == num) { // VCF-style format
- end = beg--; // Counts from 1 instead of 0 for BED files
-@@ -295,7 +301,8 @@
- } else {
- fprintf(samtools_stderr,
- "[bed_read] Parse error reading \"%s\" at line %u : "
-- "end (%u) must not be less than start (%u)\n",
-+ "end (%"PRIu64") must not be less "
-+ "than start (%"PRIu64")\n",
- fn, line, end, beg);
- }
- errno = 0; // Prevent caller from printing misleading error messages
-@@ -320,16 +327,21 @@
- // Add begin,end to the list
- if (p->n == p->m) {
- p->m = p->m ? p->m<<1 : 4;
-- p->a = realloc(p->a, p->m * sizeof(uint64_t));
-- if (NULL == p->a) goto fail;
-+ hts_pair_pos_t *new_a = realloc(p->a, p->m * sizeof(p->a[0]));
-+ if (NULL == new_a) goto fail;
-+ p->a = new_a;
- }
-- p->a[p->n++] = (uint64_t)beg<<32 | end;
-+ p->a[p->n].beg = beg;
-+ p->a[p->n++].end = end;
- }
- // FIXME: Need to check for errors in ks_getuntil. At the moment it
- // doesn't look like it can return one. Possibly use gzgets instead?
-
-+ if (gzclose(fp) != Z_OK) {
-+ fp = NULL;
-+ goto fail;
-+ }
- ks_destroy(ks);
-- gzclose(fp);
- free(str.s);
- bed_index(h);
- //bed_unify(h);
-@@ -363,7 +375,7 @@
- kh_destroy(reg, h);
- }
-
--static void *bed_insert(void *reg_hash, char *reg, unsigned int beg, unsigned int end) {
-+static void *bed_insert(void *reg_hash, char *reg, hts_pos_t beg, hts_pos_t end) {
-
- reghash_t *h;
- khint_t k;
-@@ -392,10 +404,12 @@
- // Add beg and end to the list
- if (p->n == p->m) {
- p->m = p->m ? p->m<<1 : 4;
-- p->a = realloc(p->a, p->m * sizeof(uint64_t));
-- if (NULL == p->a) goto fail;
-+ hts_pair_pos_t *new_a = realloc(p->a, p->m * sizeof(p->a[0]));
-+ if (NULL == new_a) goto fail;
-+ p->a = new_a;
- }
-- p->a[p->n++] = (uint64_t)beg<<32 | end;
-+ p->a[p->n].beg = beg;
-+ p->a[p->n++].end = end;
-
- fail:
- return h;
-@@ -415,10 +429,10 @@
- reghash_t *t;
- bed_reglist_t *p, *q;
- khint_t l, k;
-- uint64_t *new_a;
-+ hts_pair_pos_t *new_a;
- int i, j, new_n, min_off;
- const char *reg;
-- uint32_t beg, end;
-+ hts_pos_t beg, end;
-
- h = (reghash_t *)reg_hash;
- t = (reghash_t *)tmp_hash;
-@@ -436,20 +450,21 @@
- if (k == kh_end(h) || !(p = &kh_val(h, k)) || !(p->n))
- continue;
-
-- new_a = (uint64_t *)calloc(q->n + p->n, sizeof(uint64_t));
-+ new_a = calloc(q->n + p->n, sizeof(new_a[0]));
- if (!new_a)
- return NULL;
- new_n = 0;
-
- for (i = 0; i < q->n; i++) {
-- beg = (uint32_t)(q->a[i]>>32);
-- end = (uint32_t)(q->a[i]);
-+ beg = q->a[i].beg;
-+ end = q->a[i].end;
-
- min_off = bed_minoff(p, beg, end);
- for (j = min_off; j < p->n; ++j) {
-- if ((uint32_t)(p->a[j]>>32) >= end) break; // out of range; no need to proceed
-- if ((uint32_t)(p->a[j]) > beg && (uint32_t)(p->a[j]>>32) < end) {
-- new_a[new_n++] = ((uint64_t)MAX((uint32_t)(p->a[j]>>32), beg) << 32) | MIN((uint32_t)p->a[j], end);
-+ if (p->a[j].beg >= end) break; // out of range; no need to proceed
-+ if (p->a[j].end > beg && p->a[j].beg < end) {
-+ new_a[new_n].beg = MAX(p->a[j].beg, beg);
-+ new_a[new_n++].end = MIN(p->a[j].end, end);
- }
- }
- }
-@@ -496,6 +511,11 @@
-
- for (i=first; i<last; i++) {
-
-+ // Note, ideally we would call sam_parse_region here, but it's complicated by not
-+ // having the sam header known and the likelihood of the bed file containing data for other
-+ // references too which we currently just ignore.
-+ //
-+ // TO DO...
- q = hts_parse_reg(regs[i], &beg, &end);
- if (q) {
- if ((int)(q - regs[i] + 1) > 1024) {
-@@ -598,8 +618,8 @@
- reglist[count].max_end = 0;
-
- for (j = 0; j < p->n; j++) {
-- reglist[count].intervals[j].beg = (uint32_t)(p->a[j]>>32);
-- reglist[count].intervals[j].end = (uint32_t)(p->a[j]);
-+ reglist[count].intervals[j].beg = p->a[j].beg;
-+ reglist[count].intervals[j].end = p->a[j].end;
-
- if (reglist[count].intervals[j].end > reglist[count].max_end)
- reglist[count].max_end = reglist[count].intervals[j].end;
---- python-pysam.orig/samtools/bedidx.h
-+++ python-pysam/samtools/bedidx.h
-@@ -36,7 +36,7 @@
-
- void *bed_read(const char *fn);
- void bed_destroy(void *_h);
--int bed_overlap(const void *_h, const char *chr, int beg, int end);
-+int bed_overlap(const void *_h, const char *chr, hts_pos_t beg, hts_pos_t end);
- void *bed_hash_regions(void *reg_hash, char **regs, int first, int last, int *op);
- const char* bed_get(void *reg_hash, int index, int filter);
- hts_reglist_t *bed_reglist(void *reg_hash, int filter, int *count_regs);
---- /dev/null
-+++ python-pysam/samtools/coverage.c
-@@ -0,0 +1,702 @@
-+/* coverage.c -- samtools coverage subcommand
-+
-+ Copyright (C) 2018,2019 Florian Breitwieser
-+ Portions copyright (C) 2019 Genome Research Ltd.
-+
-+ Author: Florian P Breitwieser <florian.bw@gmail.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+/* This program calculates coverage from multiple BAMs
-+ * simutaneously, to achieve random access and to use the BED interface.
-+ * To compile this program separately, you may:
-+ *
-+ * gcc -g -O2 -Wall -o bamcov -D_MAIN_BAMCOV coverage.c -lhts -lz
-+ */
-+
-+// C headers
-+#include <config.h>
-+
-+#include <ctype.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdarg.h> // variadic functions
-+#include <limits.h> // INT_MAX
-+#include <math.h> // round
-+#include <stdbool.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <assert.h>
-+
-+#ifdef _WIN32
-+#include <windows.h>
-+#else
-+#include <sys/ioctl.h>
-+#endif
-+
-+#include "htslib/sam.h"
-+#include "htslib/hts.h"
-+#include "samtools.h"
-+#include "sam_opts.h"
-+
-+const char *VERSION = "0.1";
-+
-+typedef struct { // auxiliary data structure to hold a BAM file
-+ samFile *fp; // file handle
-+ sam_hdr_t *hdr; // file header
-+ hts_itr_t *iter; // iterator to a region - NULL for us by default
-+ int min_mapQ; // mapQ filter
-+ int min_len; // length filter
-+ unsigned int n_reads; // records the number of reads seen in file
-+ unsigned int n_selected_reads; // records the number of reads passing filter
-+ unsigned long summed_mapQ; // summed mapQ of all reads passing filter
-+ int fail_flags;
-+ int required_flags;
-+} bam_aux_t;
-+
-+typedef struct { // auxiliary data structure to hold stats on coverage
-+ unsigned long long n_covered_bases;
-+ unsigned long long summed_coverage;
-+ unsigned long long summed_baseQ;
-+ unsigned long long summed_mapQ;
-+ unsigned int n_reads;
-+ unsigned int n_selected_reads;
-+ int32_t tid; // chromosome ID, defined by header
-+ hts_pos_t beg;
-+ hts_pos_t end;
-+ int64_t bin_width;
-+} stats_aux_t;
-+
-+#if __STDC_VERSION__ >= 199901L
-+#define VERTICAL_LINE "\u2502" // BOX DRAWINGS LIGHT VERTICAL
-+
-+// UTF8 specifies block characters in eights going from \u2581 (lower one eight block) to \u2588 (full block)
-+// https://en.wikipedia.org/wiki/Block_Elements
-+// LOWER ONE EIGHTH BLOCK … FULL BLOCK
-+static const char *const BLOCK_CHARS8[8] = {"\u2581", "\u2582", "\u2583", "\u2584", "\u2585", "\u2586", "\u2587", "\u2588"};
-+// In some terminals / with some fonts not all UTF8 block characters are supported (e.g. Putty). Use only half and full block for those
-+static const char *const BLOCK_CHARS2[2] = {"\u2584", "\u2588"};
-+
-+#else
-+
-+// Fall back to explicit UTF-8 encodings of the same characters
-+#define VERTICAL_LINE "\xE2\x94\x82"
-+
-+static const char *const BLOCK_CHARS8[8] = {
-+ "\xE2\x96\x81", "\xE2\x96\x82", "\xE2\x96\x83", "\xE2\x96\x84",
-+ "\xE2\x96\x85", "\xE2\x96\x86", "\xE2\x96\x87", "\xE2\x96\x88" };
-+
-+static const char *const BLOCK_CHARS2[2] = {"\xE2\x96\x84", "\xE2\x96\x88"};
-+
-+#endif
-+
-+// in bam_plcmd.c
-+int read_file_list(const char *file_list, int *n, char **argv[]);
-+
-+static int usage() {
-+ fprintf(stdout, "Usage: samtools coverage [options] in1.bam [in2.bam [...]]\n\n"
-+ "Input options:\n"
-+ " -b, --bam-list FILE list of input BAM filenames, one per line\n"
-+ " -l, --min-read-len INT ignore reads shorter than INT bp [0]\n"
-+ " -q, --min-MQ INT base quality threshold [0]\n"
-+ " -Q, --min-BQ INT mapping quality threshold [0]\n"
-+ " --rf <int|str> required flags: skip reads with mask bits unset []\n"
-+ " --ff <int|str> filter flags: skip reads with mask bits set \n"
-+ " [UNMAP,SECONDARY,QCFAIL,DUP]\n"
-+ "Output options:\n"
-+ " -m, --histogram show histogram instead of tabular output\n"
-+ " -A, --ascii show only ASCII characters in histogram\n"
-+ " -o, --output FILE write output to FILE [stdout]\n"
-+ " -H, --no-header don't print a header in tabular mode\n"
-+ " -w, --n-bins INT number of bins in histogram [terminal width - 40]\n"
-+ " -r, --region REG show specified region. Format: chr:start-end. \n"
-+ " -h, --help help (this page)\n");
-+
-+ fprintf(stdout, "\nGeneric options:\n");
-+ sam_global_opt_help(stdout, "-.--.--.");
-+
-+ fprintf(stdout,
-+ "\nSee manpage for additional details.\n"
-+ " rname Reference name / chromosome\n"
-+ " startpos Start position\n"
-+ " endpos End position (or sequence length)\n"
-+ " numreads Number reads aligned to the region (after filtering)\n"
-+ " covbases Number of covered bases with depth >= 1\n"
-+ " coverage Proportion of covered bases [0..1]\n"
-+ " meandepth Mean depth of coverage\n"
-+ " meanbaseq Mean baseQ in covered region\n"
-+ " meanmapq Mean mapQ of selected reads\n"
-+ );
-+
-+ return EXIT_SUCCESS;
-+}
-+
-+static char* center_text(char *text, char *buf, int width) {
-+ int len = strlen(text);
-+ assert(len <= width);
-+ int padding = (width - len) / 2;
-+ int padding_ex = (width - len) % 2;
-+ if (padding >= 1)
-+ sprintf(buf, " %*s%*s", len+padding, text, padding-1+padding_ex, " ");
-+ else
-+ sprintf(buf, "%s", text);
-+
-+ return buf;
-+}
-+
-+static char* readable_bps(double base_pairs, char *buf) {
-+ const char* units[] = {"", "K", "M", "G", "T"};
-+ int i = 0;
-+ while (base_pairs >= 1000 && i < (sizeof(units)/sizeof(units[0]) - 1)) {
-+ base_pairs /= 1000;
-+ i++;
-+ }
-+ sprintf(buf, "%.*f%s", i, base_pairs, units[i]);
-+ return buf;
-+}
-+
-+static void set_read_counts(bam_aux_t **data, stats_aux_t *stats, int n_bam_files) {
-+ int i;
-+ stats->n_reads = 0;
-+ stats->n_selected_reads = 0;
-+ stats->summed_mapQ = 0;
-+ for (i = 0; i < n_bam_files && data[i]; ++i) {
-+ stats->n_reads += data[i]->n_reads;
-+ stats->n_selected_reads += data[i]->n_selected_reads;
-+ stats->summed_mapQ += data[i]->summed_mapQ;
-+ data[i]->n_reads = 0;
-+ data[i]->n_selected_reads = 0;
-+ data[i]->summed_mapQ = 0;
-+ }
-+}
-+
-+// read one alignment from one BAM file
-+static int read_bam(void *data, bam1_t *b) {
-+ bam_aux_t *aux = (bam_aux_t*)data; // data in fact is a pointer to an auxiliary structure
-+ int ret;
-+ while (1) {
-+ if((ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b)) < 0) break;
-+ ++aux->n_reads;
-+
-+ if ( aux->fail_flags && (b->core.flag & aux->fail_flags) ) continue;
-+ if ( aux->required_flags && !(b->core.flag & aux->required_flags) ) continue;
-+ if ( b->core.qual < aux->min_mapQ ) continue;
-+ if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue;
-+ ++aux->n_selected_reads;
-+ aux->summed_mapQ += b->core.qual;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+void print_tabular_line(FILE *file_out, const sam_hdr_t *h, const stats_aux_t *stats) {
-+ fputs(sam_hdr_tid2name(h, stats->tid), file_out);
-+ double region_len = (double) stats->end - stats->beg;
-+ fprintf(file_out, "\t%"PRId64"\t%"PRId64"\t%u\t%llu\t%g\t%g\t%.3g\t%.3g\n",
-+ stats->beg+1,
-+ stats->end,
-+ stats->n_selected_reads,
-+ stats->n_covered_bases,
-+ 100.0 * stats->n_covered_bases / region_len,
-+ stats->summed_coverage / region_len,
-+ stats->summed_coverage > 0? stats->summed_baseQ/(double) stats->summed_coverage : 0,
-+ stats->n_selected_reads > 0? stats->summed_mapQ/(double) stats->n_selected_reads : 0
-+ );
-+}
-+
-+void print_hist(FILE *file_out, const sam_hdr_t *h, const stats_aux_t *stats, const uint32_t *hist,
-+ const int hist_size, const bool full_utf) {
-+ int i, col;
-+ bool show_percentiles = false;
-+ const int n_rows = 10;
-+ const char * const * BLOCK_CHARS = full_utf? BLOCK_CHARS8 : BLOCK_CHARS2;
-+ const int blockchar_len = full_utf? 8 : 2;
-+ /*
-+ if (stats->beg == 0) {
-+ stats->end = h->target_len[stats->tid];
-+ }
-+ */
-+ double region_len = stats->end - stats->beg;
-+
-+ // Calculate histogram that contains percent covered
-+ double hist_data[hist_size];
-+ double max_val = 0.0;
-+ for (i = 0; i < hist_size; ++i) {
-+ hist_data[i] = 100 * hist[i] / (double) stats->bin_width;
-+ if (hist_data[i] > max_val) max_val = hist_data[i];
-+ }
-+
-+ char buf[30];
-+ fprintf(file_out, "%s (%sbp)\n", sam_hdr_tid2name(h, stats->tid), readable_bps(sam_hdr_tid2len(h, stats->tid), buf));
-+
-+ double row_bin_size = max_val / (double) n_rows;
-+ for (i = n_rows-1; i >= 0; --i) {
-+ double current_bin = row_bin_size * i;
-+ if (show_percentiles) {
-+ fprintf(file_out, ">%3i%% ", i*10);
-+ } else {
-+ fprintf(file_out, ">%7.2f%% ", current_bin);
-+ }
-+ fprintf(file_out, VERTICAL_LINE);
-+ for (col = 0; col < hist_size; ++col) {
-+ // get the difference in eights, or halfs when full UTF8 is not supported
-+ int cur_val_diff = round(blockchar_len * (hist_data[col] - current_bin) / row_bin_size) - 1;
-+ if (cur_val_diff < 0) {
-+ fputc(' ', file_out);
-+ } else {
-+ if (cur_val_diff >= blockchar_len)
-+ cur_val_diff = blockchar_len - 1;
-+
-+ fprintf(file_out, "%s", BLOCK_CHARS[cur_val_diff]);
-+ }
-+ }
-+ fprintf(file_out, VERTICAL_LINE);
-+ fputc(' ', file_out);
-+ switch (i) {
-+ case 9: fprintf(file_out, "Number of reads: %i", stats->n_selected_reads); break;
-+ case 8: if (stats->n_reads - stats->n_selected_reads > 0) fprintf(file_out, " (%i filtered)", stats->n_reads - stats->n_selected_reads); break;
-+ case 7: fprintf(file_out, "Covered bases: %sbp", readable_bps(stats->n_covered_bases, buf)); break;
-+ case 6: fprintf(file_out, "Percent covered: %.4g%%",
-+ 100.0 * stats->n_covered_bases / region_len); break;
-+ case 5: fprintf(file_out, "Mean coverage: %.3gx",
-+ stats->summed_coverage / region_len); break;
-+ case 4: fprintf(file_out, "Mean baseQ: %.3g",
-+ stats->summed_baseQ/(double) stats->summed_coverage); break;
-+ case 3: fprintf(file_out, "Mean mapQ: %.3g",
-+ stats->summed_mapQ/(double) stats->n_selected_reads); break;
-+ case 1: fprintf(file_out, "Histo bin width: %sbp",
-+ readable_bps(stats->bin_width, buf)); break;
-+ case 0: fprintf(file_out, "Histo max bin: %.5g%%", max_val); break;
-+ };
-+ fputc('\n', file_out);
-+ }
-+
-+ // print x axis. Could be made pretty for widths that are not divisible
-+ // by 10 by variable spacing of the labels, instead of placing a label every 10 characters
-+ char buf2[50];
-+ fprintf(file_out, " %s", center_text(readable_bps(stats->beg + 1, buf), buf2, 10));
-+ int rest;
-+ for (rest = 10; rest < 10*(hist_size/10); rest += 10) {
-+ fprintf(file_out, "%s", center_text(readable_bps(stats->beg + stats->bin_width*rest, buf), buf2, 10));
-+ }
-+ int last_padding = hist_size%10;
-+ fprintf(file_out, "%*s%s", last_padding, " ", center_text(readable_bps(stats->end, buf), buf2, 10));
-+ fprintf(file_out, "\n");
-+}
-+
-+int main_coverage(int argc, char *argv[]) {
-+ int status = EXIT_SUCCESS;
-+
-+ int ret, tid, pos, i, j;
-+
-+ int max_depth = 0;
-+ int opt_min_baseQ = 0;
-+ int opt_min_mapQ = 0;
-+ int opt_min_len = 0;
-+ int opt_n_bins = 50;
-+ bool opt_full_width = true;
-+ char *opt_output_file = NULL;
-+ bam_aux_t **data = NULL;
-+ bam_mplp_t mplp = NULL;
-+ const bam_pileup1_t **plp = NULL;
-+ uint32_t *hist = NULL;
-+ stats_aux_t *stats = NULL;
-+ char *opt_reg = 0; // specified region
-+ char *opt_file_list = NULL;
-+ int n_bam_files = 0;
-+ char **fn = NULL;
-+ int fail_flags = (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP); // Default fail flags
-+ int required_flags = 0;
-+
-+ int *n_plp = NULL;
-+ sam_hdr_t *h = NULL; // BAM header of the 1st input
-+
-+ bool opt_print_header = true;
-+ bool opt_print_tabular = true;
-+ bool opt_print_histogram = false;
-+ bool *covered_tids = NULL;
-+ bool opt_full_utf = true;
-+
-+ FILE *file_out = stdout;
-+
-+ sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'),
-+ {"rf", required_argument, NULL, 1}, // require flag
-+ {"ff", required_argument, NULL, 2}, // filter flag
-+ {"incl-flags", required_argument, NULL, 1}, // require flag
-+ {"excl-flags", required_argument, NULL, 2}, // filter flag
-+ {"bam-list", required_argument, NULL, 'b'},
-+ {"min-read-len", required_argument, NULL, 'L'},
-+ {"min-MQ", required_argument, NULL, 'q'},
-+ {"min-mq", required_argument, NULL, 'q'},
-+ {"min-BQ", required_argument, NULL, 'Q'},
-+ {"min-bq", required_argument, NULL, 'Q'},
-+ {"histogram", no_argument, NULL, 'm'},
-+ {"ascii", no_argument, NULL, 'A'},
-+ {"output", required_argument, NULL, 'o'},
-+ {"no-header", no_argument, NULL, 'H'},
-+ {"n-bins", required_argument, NULL, 'w'},
-+ {"region", required_argument, NULL, 'r'},
-+ {"help", no_argument, NULL, 'h'},
-+ { NULL, 0, NULL, 0 }
-+ };
-+
-+ // parse the command line
-+ int c;
-+ opterr = 0;
-+ while ((c = getopt_long(argc, argv, "Ao:L:q:Q:hHw:r:b:m", lopts, NULL)) != -1) {
-+ switch (c) {
-+ case 1:
-+ if ((required_flags = bam_str2flag(optarg)) < 0) {
-+ fprintf(stderr,"Could not parse --rf %s\n", optarg); return EXIT_FAILURE;
-+ }; break;
-+ case 2:
-+ if ((fail_flags = bam_str2flag(optarg)) < 0) {
-+ fprintf(stderr,"Could not parse --ff %s\n", optarg); return EXIT_FAILURE;
-+ }; break;
-+ case 'o': opt_output_file = optarg; opt_full_width = false; break;
-+ case 'L': opt_min_len = atoi(optarg); break;
-+ case 'q': opt_min_baseQ = atoi(optarg); break;
-+ case 'Q': opt_min_mapQ = atoi(optarg); break;
-+ case 'w': opt_n_bins = atoi(optarg); opt_full_width = false;
-+ opt_print_histogram = true; opt_print_tabular = false;
-+ break;
-+ case 'r': opt_reg = optarg; break; // parsing a region requires a BAM header (strdup unnecessary)
-+ case 'b': opt_file_list = optarg; break;
-+ case 'm': opt_print_histogram = true; opt_print_tabular = false; break;
-+ case 'A': opt_full_utf = false;
-+ opt_print_histogram = true; opt_print_tabular = false;
-+ break;
-+ case 'H': opt_print_header = false; break;
-+ case 'h': return usage();
-+ default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
-+ /* else fall-through */
-+ case '?':
-+ if (optopt != '?') { // '-?' appeared on command line
-+ if (optopt) { // Bad short option
-+ print_error("coverage", "invalid option -- '%c'", optopt);
-+ } else { // Bad long option
-+ // Do our best. There is no good solution to finding
-+ // out what the bad option was.
-+ // See, e.g. https://stackoverflow.com/questions/2723888/where-does-getopt-long-store-an-unrecognized-option
-+ if (optind > 0 && strncmp(argv[optind - 1], "--", 2) == 0) {
-+ print_error("coverage", "unrecognised option '%s'",
-+ argv[optind - 1]);
-+ }
-+ }
-+ }
-+ return usage();
-+ }
-+ }
-+ if (optind == argc && !opt_file_list)
-+ return usage();
-+
-+ // output file provided by user
-+ if (opt_output_file != NULL && strcmp(opt_output_file,"-")!=0) {
-+ file_out = fopen( opt_output_file, "w" );
-+ if (file_out == NULL) {
-+ print_error_errno("coverage", "Cannot open \"%s\" for writing.", opt_output_file);
-+ return EXIT_FAILURE;
-+ }
-+ }
-+
-+ if (opt_n_bins <= 0 || opt_full_width) {
-+ // get number of columns of terminal
-+ const char* env_columns = getenv("COLUMNS");
-+ int columns = 0;
-+ if (env_columns == NULL) {
-+#ifdef _WIN32
-+ CONSOLE_SCREEN_BUFFER_INFO csbi;
-+ if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) {
-+ columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
-+ }
-+#else
-+ struct winsize w;
-+ if (ioctl(2, TIOCGWINSZ, &w) == 0)
-+ columns = w.ws_col;
-+#endif
-+ } else {
-+ columns = atoi(env_columns); // atoi(NULL) returns 0
-+ }
-+
-+ if (columns > 60) {
-+ opt_n_bins = columns - 40;
-+ } else {
-+ opt_n_bins = 40;
-+ }
-+ }
-+
-+ // setvbuf(file_out, NULL, _IONBF, 0); //turn off buffering
-+
-+ // Open all BAM files
-+ if (opt_file_list) {
-+ // Read file names from opt_file_list into argv, and record the number of files in n_bam_files
-+ if (read_file_list(opt_file_list, &n_bam_files, &fn)) {
-+ print_error_errno("coverage", "Cannot open file list \"%s\".", opt_file_list);
-+ return EXIT_FAILURE;
-+ }
-+ argv = fn;
-+ optind = 0;
-+ } else {
-+ n_bam_files = argc - optind; // the number of BAMs on the command line
-+ }
-+
-+ data = (bam_aux_t **)calloc(n_bam_files, sizeof(bam_aux_t*)); // data[i] for the i-th BAM file
-+ if (!data) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ for (i = 0; i < n_bam_files; ++i) {
-+ int rf;
-+ data[i] = (bam_aux_t *) calloc(1, sizeof(bam_aux_t));
-+ if (!data[i]) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->fp = sam_open_format(argv[optind+i], "r", &ga.in); // open BAM
-+
-+ if (data[i]->fp == NULL) {
-+ print_error_errno("coverage", "Could not open \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ;
-+ if (opt_min_baseQ) rf |= SAM_QUAL;
-+
-+ // Set CRAM options on file handle - returns 0 on success
-+ if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-+ print_error_errno("coverage", "Failed to set CRAM_OPT_REQUIRED_FIELDS value");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) {
-+ print_error_errno("coverage", "Failed to set CRAM_OPT_DECODE_MD value");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->min_mapQ = opt_min_mapQ; // set the mapQ filter
-+ data[i]->min_len = opt_min_len; // set the qlen filter
-+ data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header
-+ data[i]->fail_flags = fail_flags;
-+ data[i]->required_flags = required_flags;
-+ if (data[i]->hdr == NULL) {
-+ print_error_errno("coverage", "Could not read header for \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ // Lookup region if specified
-+ if (opt_reg) { // if a region is specified
-+ hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index
-+ if (idx == NULL) {
-+ print_error_errno("coverage", "Failed to load index for \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->iter = sam_itr_querys(idx, data[i]->hdr, opt_reg); // set the iterator
-+ hts_idx_destroy(idx); // the index is not needed any more; free the memory
-+ if (data[i]->iter == NULL) {
-+ print_error_errno("coverage", "Failed to parse region \"%s\"", opt_reg);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ }
-+ }
-+
-+ if (opt_print_tabular && opt_print_header)
-+ fputs("#rname\tstartpos\tendpos\tnumreads\tcovbases\tcoverage\tmeandepth\tmeanbaseq\tmeanmapq\n", file_out);
-+
-+ h = data[0]->hdr; // easy access to the header of the 1st BAM
-+ int n_targets = sam_hdr_nref(h);
-+ covered_tids = calloc(n_targets, sizeof(bool));
-+ stats = calloc(1, sizeof(stats_aux_t));
-+ if (!covered_tids || !stats) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ int64_t n_bins = opt_n_bins;
-+ if (opt_reg) {
-+ stats->tid = data[0]->iter->tid;
-+ stats->beg = data[0]->iter->beg; // and to the parsed region coordinates
-+ stats->end = data[0]->iter->end;
-+ if (stats->end == HTS_POS_MAX) {
-+ stats->end = sam_hdr_tid2len(h, stats->tid);
-+ }
-+ if (opt_n_bins > stats->end - stats->beg) {
-+ n_bins = stats->end - stats->beg;
-+ }
-+ stats->bin_width = (stats->end-stats->beg) / n_bins;
-+ } else {
-+ stats->tid = -1;
-+ }
-+
-+ int64_t current_bin = 0;
-+
-+ // the core multi-pileup loop
-+ mplp = bam_mplp_init(n_bam_files, read_bam, (void**)data); // initialization
-+ if (max_depth > 0)
-+ bam_mplp_set_maxcnt(mplp, max_depth); // set maximum coverage depth
-+ else if (!max_depth)
-+ bam_mplp_set_maxcnt(mplp, INT_MAX);
-+
-+
-+ // Extra info for histogram and coverage counting
-+ hist = (uint32_t*) calloc(opt_n_bins, sizeof(uint32_t));
-+ n_plp = (int*) calloc(n_bam_files, sizeof(int*)); // n_plp[i] is the number of covering reads from the i-th BAM
-+ plp = (const bam_pileup1_t**) calloc(n_bam_files, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp)
-+ if (!hist || !n_plp || !plp) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
-+
-+ if (tid != stats->tid) { // Next target sequence
-+ if (stats->tid >= 0) { // It's not the first sequence, print results
-+ set_read_counts(data, stats, n_bam_files);
-+ if (opt_print_histogram) {
-+ print_hist(file_out, h, stats, hist, n_bins, opt_full_utf);
-+ fputc('\n', file_out);
-+ } else if (opt_print_tabular) {
-+ print_tabular_line(file_out, h, stats);
-+ }
-+
-+ // reset data
-+ memset(stats, 0, sizeof(stats_aux_t));
-+ if (opt_print_histogram)
-+ memset(hist, 0, n_bins*sizeof(uint32_t));
-+ }
-+
-+ stats->tid = tid;
-+ covered_tids[tid] = true;
-+ if (!opt_reg)
-+ stats->end = sam_hdr_tid2len(h, tid);
-+
-+ if (opt_print_histogram) {
-+ n_bins = opt_n_bins > stats->end-stats->beg? stats->end-stats->beg : opt_n_bins;
-+ stats->bin_width = (stats->end-stats->beg) / n_bins;
-+ }
-+ }
-+ if (pos < stats->beg || pos >= stats->end) continue; // out of range; skip
-+ if (tid >= n_targets) continue; // diff number of @SQ lines per file?
-+
-+ if (opt_print_histogram) {
-+ current_bin = (pos - stats->beg) / stats->bin_width;
-+ }
-+
-+ bool count_base = false;
-+ for (i = 0; i < n_bam_files; ++i) { // base level filters have to go here
-+ int depth_at_pos = n_plp[i];
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = plp[i] + j; // DON'T modify plp[][] unless you really know
-+
-+ if (p->is_del || p->is_refskip) --depth_at_pos; // having dels or refskips at tid:pos
-+ else if (p->qpos < p->b->core.l_qseq &&
-+ bam_get_qual(p->b)[p->qpos] < opt_min_baseQ) --depth_at_pos; // low base quality
-+ else
-+ stats->summed_baseQ += bam_get_qual(p->b)[p->qpos];
-+ }
-+ if (depth_at_pos > 0) {
-+ count_base = true;
-+ stats->summed_coverage += depth_at_pos;
-+ }
-+ // hist[current_bin] += depth_at_pos; // Add counts to the histogram here to have one based on coverage
-+ //fprintf(file_out, "\t%d", n_plp[i] - m); // this the depth to output
-+ }
-+ if (count_base) {
-+ ++(stats->n_covered_bases);
-+ if (opt_print_histogram && current_bin < n_bins)
-+ ++(hist[current_bin]); // Histogram based on breadth of coverage
-+ }
-+ }
-+
-+ if (stats->tid != -1) {
-+ set_read_counts(data, stats, n_bam_files);
-+ if (opt_print_histogram) {
-+ print_hist(file_out, h, stats, hist, n_bins, opt_full_utf);
-+ } else if (opt_print_tabular) {
-+ print_tabular_line(file_out, h, stats);
-+ }
-+ }
-+
-+
-+ if (!opt_reg && opt_print_tabular) {
-+ memset(stats, 0, sizeof(stats_aux_t));
-+ for (i = 0; i < n_targets; ++i) {
-+ if (!covered_tids[i]) {
-+ stats->tid = i;
-+ stats->end = sam_hdr_tid2len(h, i);
-+ print_tabular_line(file_out, h, stats);
-+ }
-+ }
-+ }
-+
-+ if (ret < 0) status = EXIT_FAILURE;
-+
-+coverage_end:
-+ if (n_plp) free(n_plp);
-+ if (plp) free(plp);
-+ bam_mplp_destroy(mplp);
-+
-+ if (covered_tids) free(covered_tids);
-+ if (hist) free(hist);
-+ if (stats) free(stats);
-+
-+
-+ // Close files and free data structures
-+ if (!(file_out == stdout || fclose(file_out) == 0)) {
-+ if (status == EXIT_SUCCESS) {
-+ print_error_errno("coverage", "error on closing \"%s\"",
-+ (opt_output_file && strcmp(opt_output_file, "-") != 0?
-+ opt_output_file : "stdout"));
-+ status = EXIT_FAILURE;
-+ }
-+ }
-+
-+ if (data) {
-+ for (i = 0; i < n_bam_files && data[i]; ++i) {
-+ sam_hdr_destroy(data[i]->hdr);
-+ if (data[i]->fp) sam_close(data[i]->fp);
-+ hts_itr_destroy(data[i]->iter);
-+ free(data[i]);
-+ }
-+ free(data);
-+ }
-+
-+ if (opt_file_list && fn) {
-+ for (i = 0; i < n_bam_files; ++i)
-+ free(fn[i]);
-+ free(fn);
-+ }
-+ sam_global_args_free(&ga);
-+
-+ return status;
-+}
-+
-+#ifdef _MAIN_BAMCOV
-+int main(int argc, char *argv[]) {
-+ return main_coverage(argc, argv);
-+}
-+#endif
---- /dev/null
-+++ python-pysam/samtools/coverage.c.pysam.c
-@@ -0,0 +1,704 @@
-+#include "samtools.pysam.h"
-+
-+/* coverage.c -- samtools coverage subcommand
-+
-+ Copyright (C) 2018,2019 Florian Breitwieser
-+ Portions copyright (C) 2019 Genome Research Ltd.
-+
-+ Author: Florian P Breitwieser <florian.bw@gmail.com>
-+
-+Permission is hereby granted, free of charge, to any person obtaining a copy
-+of this software and associated documentation files (the "Software"), to deal
-+in the Software without restriction, including without limitation the rights
-+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+copies of the Software, and to permit persons to whom the Software is
-+furnished to do so, subject to the following conditions:
-+
-+The above copyright notice and this permission notice shall be included in
-+all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+DEALINGS IN THE SOFTWARE. */
-+
-+/* This program calculates coverage from multiple BAMs
-+ * simutaneously, to achieve random access and to use the BED interface.
-+ * To compile this program separately, you may:
-+ *
-+ * gcc -g -O2 -Wall -o bamcov -D_MAIN_BAMCOV coverage.c -lhts -lz
-+ */
-+
-+// C headers
-+#include <config.h>
-+
-+#include <ctype.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdarg.h> // variadic functions
-+#include <limits.h> // INT_MAX
-+#include <math.h> // round
-+#include <stdbool.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <assert.h>
-+
-+#ifdef _WIN32
-+#include <windows.h>
-+#else
-+#include <sys/ioctl.h>
-+#endif
-+
-+#include "htslib/sam.h"
-+#include "htslib/hts.h"
-+#include "samtools.h"
-+#include "sam_opts.h"
-+
-+const char *VERSION = "0.1";
-+
-+typedef struct { // auxiliary data structure to hold a BAM file
-+ samFile *fp; // file handle
-+ sam_hdr_t *hdr; // file header
-+ hts_itr_t *iter; // iterator to a region - NULL for us by default
-+ int min_mapQ; // mapQ filter
-+ int min_len; // length filter
-+ unsigned int n_reads; // records the number of reads seen in file
-+ unsigned int n_selected_reads; // records the number of reads passing filter
-+ unsigned long summed_mapQ; // summed mapQ of all reads passing filter
-+ int fail_flags;
-+ int required_flags;
-+} bam_aux_t;
-+
-+typedef struct { // auxiliary data structure to hold stats on coverage
-+ unsigned long long n_covered_bases;
-+ unsigned long long summed_coverage;
-+ unsigned long long summed_baseQ;
-+ unsigned long long summed_mapQ;
-+ unsigned int n_reads;
-+ unsigned int n_selected_reads;
-+ int32_t tid; // chromosome ID, defined by header
-+ hts_pos_t beg;
-+ hts_pos_t end;
-+ int64_t bin_width;
-+} stats_aux_t;
-+
-+#if __STDC_VERSION__ >= 199901L
-+#define VERTICAL_LINE "\u2502" // BOX DRAWINGS LIGHT VERTICAL
-+
-+// UTF8 specifies block characters in eights going from \u2581 (lower one eight block) to \u2588 (full block)
-+// https://en.wikipedia.org/wiki/Block_Elements
-+// LOWER ONE EIGHTH BLOCK … FULL BLOCK
-+static const char *const BLOCK_CHARS8[8] = {"\u2581", "\u2582", "\u2583", "\u2584", "\u2585", "\u2586", "\u2587", "\u2588"};
-+// In some terminals / with some fonts not all UTF8 block characters are supported (e.g. Putty). Use only half and full block for those
-+static const char *const BLOCK_CHARS2[2] = {"\u2584", "\u2588"};
-+
-+#else
-+
-+// Fall back to explicit UTF-8 encodings of the same characters
-+#define VERTICAL_LINE "\xE2\x94\x82"
-+
-+static const char *const BLOCK_CHARS8[8] = {
-+ "\xE2\x96\x81", "\xE2\x96\x82", "\xE2\x96\x83", "\xE2\x96\x84",
-+ "\xE2\x96\x85", "\xE2\x96\x86", "\xE2\x96\x87", "\xE2\x96\x88" };
-+
-+static const char *const BLOCK_CHARS2[2] = {"\xE2\x96\x84", "\xE2\x96\x88"};
-+
-+#endif
-+
-+// in bam_plcmd.c
-+int read_file_list(const char *file_list, int *n, char **argv[]);
-+
-+static int usage() {
-+ fprintf(samtools_stdout, "Usage: samtools coverage [options] in1.bam [in2.bam [...]]\n\n"
-+ "Input options:\n"
-+ " -b, --bam-list FILE list of input BAM filenames, one per line\n"
-+ " -l, --min-read-len INT ignore reads shorter than INT bp [0]\n"
-+ " -q, --min-MQ INT base quality threshold [0]\n"
-+ " -Q, --min-BQ INT mapping quality threshold [0]\n"
-+ " --rf <int|str> required flags: skip reads with mask bits unset []\n"
-+ " --ff <int|str> filter flags: skip reads with mask bits set \n"
-+ " [UNMAP,SECONDARY,QCFAIL,DUP]\n"
-+ "Output options:\n"
-+ " -m, --histogram show histogram instead of tabular output\n"
-+ " -A, --ascii show only ASCII characters in histogram\n"
-+ " -o, --output FILE write output to FILE [samtools_stdout]\n"
-+ " -H, --no-header don't print a header in tabular mode\n"
-+ " -w, --n-bins INT number of bins in histogram [terminal width - 40]\n"
-+ " -r, --region REG show specified region. Format: chr:start-end. \n"
-+ " -h, --help help (this page)\n");
-+
-+ fprintf(samtools_stdout, "\nGeneric options:\n");
-+ sam_global_opt_help(samtools_stdout, "-.--.--.");
-+
-+ fprintf(samtools_stdout,
-+ "\nSee manpage for additional details.\n"
-+ " rname Reference name / chromosome\n"
-+ " startpos Start position\n"
-+ " endpos End position (or sequence length)\n"
-+ " numreads Number reads aligned to the region (after filtering)\n"
-+ " covbases Number of covered bases with depth >= 1\n"
-+ " coverage Proportion of covered bases [0..1]\n"
-+ " meandepth Mean depth of coverage\n"
-+ " meanbaseq Mean baseQ in covered region\n"
-+ " meanmapq Mean mapQ of selected reads\n"
-+ );
-+
-+ return EXIT_SUCCESS;
-+}
-+
-+static char* center_text(char *text, char *buf, int width) {
-+ int len = strlen(text);
-+ assert(len <= width);
-+ int padding = (width - len) / 2;
-+ int padding_ex = (width - len) % 2;
-+ if (padding >= 1)
-+ sprintf(buf, " %*s%*s", len+padding, text, padding-1+padding_ex, " ");
-+ else
-+ sprintf(buf, "%s", text);
-+
-+ return buf;
-+}
-+
-+static char* readable_bps(double base_pairs, char *buf) {
-+ const char* units[] = {"", "K", "M", "G", "T"};
-+ int i = 0;
-+ while (base_pairs >= 1000 && i < (sizeof(units)/sizeof(units[0]) - 1)) {
-+ base_pairs /= 1000;
-+ i++;
-+ }
-+ sprintf(buf, "%.*f%s", i, base_pairs, units[i]);
-+ return buf;
-+}
-+
-+static void set_read_counts(bam_aux_t **data, stats_aux_t *stats, int n_bam_files) {
-+ int i;
-+ stats->n_reads = 0;
-+ stats->n_selected_reads = 0;
-+ stats->summed_mapQ = 0;
-+ for (i = 0; i < n_bam_files && data[i]; ++i) {
-+ stats->n_reads += data[i]->n_reads;
-+ stats->n_selected_reads += data[i]->n_selected_reads;
-+ stats->summed_mapQ += data[i]->summed_mapQ;
-+ data[i]->n_reads = 0;
-+ data[i]->n_selected_reads = 0;
-+ data[i]->summed_mapQ = 0;
-+ }
-+}
-+
-+// read one alignment from one BAM file
-+static int read_bam(void *data, bam1_t *b) {
-+ bam_aux_t *aux = (bam_aux_t*)data; // data in fact is a pointer to an auxiliary structure
-+ int ret;
-+ while (1) {
-+ if((ret = aux->iter? sam_itr_next(aux->fp, aux->iter, b) : sam_read1(aux->fp, aux->hdr, b)) < 0) break;
-+ ++aux->n_reads;
-+
-+ if ( aux->fail_flags && (b->core.flag & aux->fail_flags) ) continue;
-+ if ( aux->required_flags && !(b->core.flag & aux->required_flags) ) continue;
-+ if ( b->core.qual < aux->min_mapQ ) continue;
-+ if ( aux->min_len && bam_cigar2qlen(b->core.n_cigar, bam_get_cigar(b)) < aux->min_len ) continue;
-+ ++aux->n_selected_reads;
-+ aux->summed_mapQ += b->core.qual;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+void print_tabular_line(FILE *file_out, const sam_hdr_t *h, const stats_aux_t *stats) {
-+ fputs(sam_hdr_tid2name(h, stats->tid), file_out);
-+ double region_len = (double) stats->end - stats->beg;
-+ fprintf(file_out, "\t%"PRId64"\t%"PRId64"\t%u\t%llu\t%g\t%g\t%.3g\t%.3g\n",
-+ stats->beg+1,
-+ stats->end,
-+ stats->n_selected_reads,
-+ stats->n_covered_bases,
-+ 100.0 * stats->n_covered_bases / region_len,
-+ stats->summed_coverage / region_len,
-+ stats->summed_coverage > 0? stats->summed_baseQ/(double) stats->summed_coverage : 0,
-+ stats->n_selected_reads > 0? stats->summed_mapQ/(double) stats->n_selected_reads : 0
-+ );
-+}
-+
-+void print_hist(FILE *file_out, const sam_hdr_t *h, const stats_aux_t *stats, const uint32_t *hist,
-+ const int hist_size, const bool full_utf) {
-+ int i, col;
-+ bool show_percentiles = false;
-+ const int n_rows = 10;
-+ const char * const * BLOCK_CHARS = full_utf? BLOCK_CHARS8 : BLOCK_CHARS2;
-+ const int blockchar_len = full_utf? 8 : 2;
-+ /*
-+ if (stats->beg == 0) {
-+ stats->end = h->target_len[stats->tid];
-+ }
-+ */
-+ double region_len = stats->end - stats->beg;
-+
-+ // Calculate histogram that contains percent covered
-+ double hist_data[hist_size];
-+ double max_val = 0.0;
-+ for (i = 0; i < hist_size; ++i) {
-+ hist_data[i] = 100 * hist[i] / (double) stats->bin_width;
-+ if (hist_data[i] > max_val) max_val = hist_data[i];
-+ }
-+
-+ char buf[30];
-+ fprintf(file_out, "%s (%sbp)\n", sam_hdr_tid2name(h, stats->tid), readable_bps(sam_hdr_tid2len(h, stats->tid), buf));
-+
-+ double row_bin_size = max_val / (double) n_rows;
-+ for (i = n_rows-1; i >= 0; --i) {
-+ double current_bin = row_bin_size * i;
-+ if (show_percentiles) {
-+ fprintf(file_out, ">%3i%% ", i*10);
-+ } else {
-+ fprintf(file_out, ">%7.2f%% ", current_bin);
-+ }
-+ fprintf(file_out, VERTICAL_LINE);
-+ for (col = 0; col < hist_size; ++col) {
-+ // get the difference in eights, or halfs when full UTF8 is not supported
-+ int cur_val_diff = round(blockchar_len * (hist_data[col] - current_bin) / row_bin_size) - 1;
-+ if (cur_val_diff < 0) {
-+ fputc(' ', file_out);
-+ } else {
-+ if (cur_val_diff >= blockchar_len)
-+ cur_val_diff = blockchar_len - 1;
-+
-+ fprintf(file_out, "%s", BLOCK_CHARS[cur_val_diff]);
-+ }
-+ }
-+ fprintf(file_out, VERTICAL_LINE);
-+ fputc(' ', file_out);
-+ switch (i) {
-+ case 9: fprintf(file_out, "Number of reads: %i", stats->n_selected_reads); break;
-+ case 8: if (stats->n_reads - stats->n_selected_reads > 0) fprintf(file_out, " (%i filtered)", stats->n_reads - stats->n_selected_reads); break;
-+ case 7: fprintf(file_out, "Covered bases: %sbp", readable_bps(stats->n_covered_bases, buf)); break;
-+ case 6: fprintf(file_out, "Percent covered: %.4g%%",
-+ 100.0 * stats->n_covered_bases / region_len); break;
-+ case 5: fprintf(file_out, "Mean coverage: %.3gx",
-+ stats->summed_coverage / region_len); break;
-+ case 4: fprintf(file_out, "Mean baseQ: %.3g",
-+ stats->summed_baseQ/(double) stats->summed_coverage); break;
-+ case 3: fprintf(file_out, "Mean mapQ: %.3g",
-+ stats->summed_mapQ/(double) stats->n_selected_reads); break;
-+ case 1: fprintf(file_out, "Histo bin width: %sbp",
-+ readable_bps(stats->bin_width, buf)); break;
-+ case 0: fprintf(file_out, "Histo max bin: %.5g%%", max_val); break;
-+ };
-+ fputc('\n', file_out);
-+ }
-+
-+ // print x axis. Could be made pretty for widths that are not divisible
-+ // by 10 by variable spacing of the labels, instead of placing a label every 10 characters
-+ char buf2[50];
-+ fprintf(file_out, " %s", center_text(readable_bps(stats->beg + 1, buf), buf2, 10));
-+ int rest;
-+ for (rest = 10; rest < 10*(hist_size/10); rest += 10) {
-+ fprintf(file_out, "%s", center_text(readable_bps(stats->beg + stats->bin_width*rest, buf), buf2, 10));
-+ }
-+ int last_padding = hist_size%10;
-+ fprintf(file_out, "%*s%s", last_padding, " ", center_text(readable_bps(stats->end, buf), buf2, 10));
-+ fprintf(file_out, "\n");
-+}
-+
-+int main_coverage(int argc, char *argv[]) {
-+ int status = EXIT_SUCCESS;
-+
-+ int ret, tid, pos, i, j;
-+
-+ int max_depth = 0;
-+ int opt_min_baseQ = 0;
-+ int opt_min_mapQ = 0;
-+ int opt_min_len = 0;
-+ int opt_n_bins = 50;
-+ bool opt_full_width = true;
-+ char *opt_output_file = NULL;
-+ bam_aux_t **data = NULL;
-+ bam_mplp_t mplp = NULL;
-+ const bam_pileup1_t **plp = NULL;
-+ uint32_t *hist = NULL;
-+ stats_aux_t *stats = NULL;
-+ char *opt_reg = 0; // specified region
-+ char *opt_file_list = NULL;
-+ int n_bam_files = 0;
-+ char **fn = NULL;
-+ int fail_flags = (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP); // Default fail flags
-+ int required_flags = 0;
-+
-+ int *n_plp = NULL;
-+ sam_hdr_t *h = NULL; // BAM header of the 1st input
-+
-+ bool opt_print_header = true;
-+ bool opt_print_tabular = true;
-+ bool opt_print_histogram = false;
-+ bool *covered_tids = NULL;
-+ bool opt_full_utf = true;
-+
-+ FILE *file_out = samtools_stdout;
-+
-+ sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-+ static const struct option lopts[] = {
-+ SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '-'),
-+ {"rf", required_argument, NULL, 1}, // require flag
-+ {"ff", required_argument, NULL, 2}, // filter flag
-+ {"incl-flags", required_argument, NULL, 1}, // require flag
-+ {"excl-flags", required_argument, NULL, 2}, // filter flag
-+ {"bam-list", required_argument, NULL, 'b'},
-+ {"min-read-len", required_argument, NULL, 'L'},
-+ {"min-MQ", required_argument, NULL, 'q'},
-+ {"min-mq", required_argument, NULL, 'q'},
-+ {"min-BQ", required_argument, NULL, 'Q'},
-+ {"min-bq", required_argument, NULL, 'Q'},
-+ {"histogram", no_argument, NULL, 'm'},
-+ {"ascii", no_argument, NULL, 'A'},
-+ {"output", required_argument, NULL, 'o'},
-+ {"no-header", no_argument, NULL, 'H'},
-+ {"n-bins", required_argument, NULL, 'w'},
-+ {"region", required_argument, NULL, 'r'},
-+ {"help", no_argument, NULL, 'h'},
-+ { NULL, 0, NULL, 0 }
-+ };
-+
-+ // parse the command line
-+ int c;
-+ opterr = 0;
-+ while ((c = getopt_long(argc, argv, "Ao:L:q:Q:hHw:r:b:m", lopts, NULL)) != -1) {
-+ switch (c) {
-+ case 1:
-+ if ((required_flags = bam_str2flag(optarg)) < 0) {
-+ fprintf(samtools_stderr,"Could not parse --rf %s\n", optarg); return EXIT_FAILURE;
-+ }; break;
-+ case 2:
-+ if ((fail_flags = bam_str2flag(optarg)) < 0) {
-+ fprintf(samtools_stderr,"Could not parse --ff %s\n", optarg); return EXIT_FAILURE;
-+ }; break;
-+ case 'o': opt_output_file = optarg; opt_full_width = false; break;
-+ case 'L': opt_min_len = atoi(optarg); break;
-+ case 'q': opt_min_baseQ = atoi(optarg); break;
-+ case 'Q': opt_min_mapQ = atoi(optarg); break;
-+ case 'w': opt_n_bins = atoi(optarg); opt_full_width = false;
-+ opt_print_histogram = true; opt_print_tabular = false;
-+ break;
-+ case 'r': opt_reg = optarg; break; // parsing a region requires a BAM header (strdup unnecessary)
-+ case 'b': opt_file_list = optarg; break;
-+ case 'm': opt_print_histogram = true; opt_print_tabular = false; break;
-+ case 'A': opt_full_utf = false;
-+ opt_print_histogram = true; opt_print_tabular = false;
-+ break;
-+ case 'H': opt_print_header = false; break;
-+ case 'h': return usage();
-+ default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
-+ /* else fall-through */
-+ case '?':
-+ if (optopt != '?') { // '-?' appeared on command line
-+ if (optopt) { // Bad short option
-+ print_error("coverage", "invalid option -- '%c'", optopt);
-+ } else { // Bad long option
-+ // Do our best. There is no good solution to finding
-+ // out what the bad option was.
-+ // See, e.g. https://stackoverflow.com/questions/2723888/where-does-getopt-long-store-an-unrecognized-option
-+ if (optind > 0 && strncmp(argv[optind - 1], "--", 2) == 0) {
-+ print_error("coverage", "unrecognised option '%s'",
-+ argv[optind - 1]);
-+ }
-+ }
-+ }
-+ return usage();
-+ }
-+ }
-+ if (optind == argc && !opt_file_list)
-+ return usage();
-+
-+ // output file provided by user
-+ if (opt_output_file != NULL && strcmp(opt_output_file,"-")!=0) {
-+ file_out = fopen( opt_output_file, "w" );
-+ if (file_out == NULL) {
-+ print_error_errno("coverage", "Cannot open \"%s\" for writing.", opt_output_file);
-+ return EXIT_FAILURE;
-+ }
-+ }
-+
-+ if (opt_n_bins <= 0 || opt_full_width) {
-+ // get number of columns of terminal
-+ const char* env_columns = getenv("COLUMNS");
-+ int columns = 0;
-+ if (env_columns == NULL) {
-+#ifdef _WIN32
-+ CONSOLE_SCREEN_BUFFER_INFO csbi;
-+ if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) {
-+ columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
-+ }
-+#else
-+ struct winsize w;
-+ if (ioctl(2, TIOCGWINSZ, &w) == 0)
-+ columns = w.ws_col;
-+#endif
-+ } else {
-+ columns = atoi(env_columns); // atoi(NULL) returns 0
-+ }
-+
-+ if (columns > 60) {
-+ opt_n_bins = columns - 40;
-+ } else {
-+ opt_n_bins = 40;
-+ }
-+ }
-+
-+ // setvbuf(file_out, NULL, _IONBF, 0); //turn off buffering
-+
-+ // Open all BAM files
-+ if (opt_file_list) {
-+ // Read file names from opt_file_list into argv, and record the number of files in n_bam_files
-+ if (read_file_list(opt_file_list, &n_bam_files, &fn)) {
-+ print_error_errno("coverage", "Cannot open file list \"%s\".", opt_file_list);
-+ return EXIT_FAILURE;
-+ }
-+ argv = fn;
-+ optind = 0;
-+ } else {
-+ n_bam_files = argc - optind; // the number of BAMs on the command line
-+ }
-+
-+ data = (bam_aux_t **)calloc(n_bam_files, sizeof(bam_aux_t*)); // data[i] for the i-th BAM file
-+ if (!data) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ for (i = 0; i < n_bam_files; ++i) {
-+ int rf;
-+ data[i] = (bam_aux_t *) calloc(1, sizeof(bam_aux_t));
-+ if (!data[i]) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->fp = sam_open_format(argv[optind+i], "r", &ga.in); // open BAM
-+
-+ if (data[i]->fp == NULL) {
-+ print_error_errno("coverage", "Could not open \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ rf = SAM_FLAG | SAM_RNAME | SAM_POS | SAM_MAPQ | SAM_CIGAR | SAM_SEQ;
-+ if (opt_min_baseQ) rf |= SAM_QUAL;
-+
-+ // Set CRAM options on file handle - returns 0 on success
-+ if (hts_set_opt(data[i]->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-+ print_error_errno("coverage", "Failed to set CRAM_OPT_REQUIRED_FIELDS value");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ if (hts_set_opt(data[i]->fp, CRAM_OPT_DECODE_MD, 0)) {
-+ print_error_errno("coverage", "Failed to set CRAM_OPT_DECODE_MD value");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->min_mapQ = opt_min_mapQ; // set the mapQ filter
-+ data[i]->min_len = opt_min_len; // set the qlen filter
-+ data[i]->hdr = sam_hdr_read(data[i]->fp); // read the BAM header
-+ data[i]->fail_flags = fail_flags;
-+ data[i]->required_flags = required_flags;
-+ if (data[i]->hdr == NULL) {
-+ print_error_errno("coverage", "Could not read header for \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ // Lookup region if specified
-+ if (opt_reg) { // if a region is specified
-+ hts_idx_t *idx = sam_index_load(data[i]->fp, argv[optind+i]); // load the index
-+ if (idx == NULL) {
-+ print_error_errno("coverage", "Failed to load index for \"%s\"", argv[optind+i]);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ data[i]->iter = sam_itr_querys(idx, data[i]->hdr, opt_reg); // set the iterator
-+ hts_idx_destroy(idx); // the index is not needed any more; free the memory
-+ if (data[i]->iter == NULL) {
-+ print_error_errno("coverage", "Failed to parse region \"%s\"", opt_reg);
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ }
-+ }
-+
-+ if (opt_print_tabular && opt_print_header)
-+ fputs("#rname\tstartpos\tendpos\tnumreads\tcovbases\tcoverage\tmeandepth\tmeanbaseq\tmeanmapq\n", file_out);
-+
-+ h = data[0]->hdr; // easy access to the header of the 1st BAM
-+ int n_targets = sam_hdr_nref(h);
-+ covered_tids = calloc(n_targets, sizeof(bool));
-+ stats = calloc(1, sizeof(stats_aux_t));
-+ if (!covered_tids || !stats) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+
-+ int64_t n_bins = opt_n_bins;
-+ if (opt_reg) {
-+ stats->tid = data[0]->iter->tid;
-+ stats->beg = data[0]->iter->beg; // and to the parsed region coordinates
-+ stats->end = data[0]->iter->end;
-+ if (stats->end == HTS_POS_MAX) {
-+ stats->end = sam_hdr_tid2len(h, stats->tid);
-+ }
-+ if (opt_n_bins > stats->end - stats->beg) {
-+ n_bins = stats->end - stats->beg;
-+ }
-+ stats->bin_width = (stats->end-stats->beg) / n_bins;
-+ } else {
-+ stats->tid = -1;
-+ }
-+
-+ int64_t current_bin = 0;
-+
-+ // the core multi-pileup loop
-+ mplp = bam_mplp_init(n_bam_files, read_bam, (void**)data); // initialization
-+ if (max_depth > 0)
-+ bam_mplp_set_maxcnt(mplp, max_depth); // set maximum coverage depth
-+ else if (!max_depth)
-+ bam_mplp_set_maxcnt(mplp, INT_MAX);
-+
-+
-+ // Extra info for histogram and coverage counting
-+ hist = (uint32_t*) calloc(opt_n_bins, sizeof(uint32_t));
-+ n_plp = (int*) calloc(n_bam_files, sizeof(int*)); // n_plp[i] is the number of covering reads from the i-th BAM
-+ plp = (const bam_pileup1_t**) calloc(n_bam_files, sizeof(bam_pileup1_t*)); // plp[i] points to the array of covering reads (internal in mplp)
-+ if (!hist || !n_plp || !plp) {
-+ print_error("coverage", "Failed to allocate memory");
-+ status = EXIT_FAILURE;
-+ goto coverage_end;
-+ }
-+ while ((ret=bam_mplp_auto(mplp, &tid, &pos, n_plp, plp)) > 0) { // come to the next covered position
-+
-+ if (tid != stats->tid) { // Next target sequence
-+ if (stats->tid >= 0) { // It's not the first sequence, print results
-+ set_read_counts(data, stats, n_bam_files);
-+ if (opt_print_histogram) {
-+ print_hist(file_out, h, stats, hist, n_bins, opt_full_utf);
-+ fputc('\n', file_out);
-+ } else if (opt_print_tabular) {
-+ print_tabular_line(file_out, h, stats);
-+ }
-+
-+ // reset data
-+ memset(stats, 0, sizeof(stats_aux_t));
-+ if (opt_print_histogram)
-+ memset(hist, 0, n_bins*sizeof(uint32_t));
-+ }
-+
-+ stats->tid = tid;
-+ covered_tids[tid] = true;
-+ if (!opt_reg)
-+ stats->end = sam_hdr_tid2len(h, tid);
-+
-+ if (opt_print_histogram) {
-+ n_bins = opt_n_bins > stats->end-stats->beg? stats->end-stats->beg : opt_n_bins;
-+ stats->bin_width = (stats->end-stats->beg) / n_bins;
-+ }
-+ }
-+ if (pos < stats->beg || pos >= stats->end) continue; // out of range; skip
-+ if (tid >= n_targets) continue; // diff number of @SQ lines per file?
-+
-+ if (opt_print_histogram) {
-+ current_bin = (pos - stats->beg) / stats->bin_width;
-+ }
-+
-+ bool count_base = false;
-+ for (i = 0; i < n_bam_files; ++i) { // base level filters have to go here
-+ int depth_at_pos = n_plp[i];
-+ for (j = 0; j < n_plp[i]; ++j) {
-+ const bam_pileup1_t *p = plp[i] + j; // DON'T modify plp[][] unless you really know
-+
-+ if (p->is_del || p->is_refskip) --depth_at_pos; // having dels or refskips at tid:pos
-+ else if (p->qpos < p->b->core.l_qseq &&
-+ bam_get_qual(p->b)[p->qpos] < opt_min_baseQ) --depth_at_pos; // low base quality
-+ else
-+ stats->summed_baseQ += bam_get_qual(p->b)[p->qpos];
-+ }
-+ if (depth_at_pos > 0) {
-+ count_base = true;
-+ stats->summed_coverage += depth_at_pos;
-+ }
-+ // hist[current_bin] += depth_at_pos; // Add counts to the histogram here to have one based on coverage
-+ //fprintf(file_out, "\t%d", n_plp[i] - m); // this the depth to output
-+ }
-+ if (count_base) {
-+ ++(stats->n_covered_bases);
-+ if (opt_print_histogram && current_bin < n_bins)
-+ ++(hist[current_bin]); // Histogram based on breadth of coverage
-+ }
-+ }
-+
-+ if (stats->tid != -1) {
-+ set_read_counts(data, stats, n_bam_files);
-+ if (opt_print_histogram) {
-+ print_hist(file_out, h, stats, hist, n_bins, opt_full_utf);
-+ } else if (opt_print_tabular) {
-+ print_tabular_line(file_out, h, stats);
-+ }
-+ }
-+
-+
-+ if (!opt_reg && opt_print_tabular) {
-+ memset(stats, 0, sizeof(stats_aux_t));
-+ for (i = 0; i < n_targets; ++i) {
-+ if (!covered_tids[i]) {
-+ stats->tid = i;
-+ stats->end = sam_hdr_tid2len(h, i);
-+ print_tabular_line(file_out, h, stats);
-+ }
-+ }
-+ }
-+
-+ if (ret < 0) status = EXIT_FAILURE;
-+
-+coverage_end:
-+ if (n_plp) free(n_plp);
-+ if (plp) free(plp);
-+ bam_mplp_destroy(mplp);
-+
-+ if (covered_tids) free(covered_tids);
-+ if (hist) free(hist);
-+ if (stats) free(stats);
-+
-+
-+ // Close files and free data structures
-+ if (!(file_out == samtools_stdout || fclose(file_out) == 0)) {
-+ if (status == EXIT_SUCCESS) {
-+ print_error_errno("coverage", "error on closing \"%s\"",
-+ (opt_output_file && strcmp(opt_output_file, "-") != 0?
-+ opt_output_file : "samtools_stdout"));
-+ status = EXIT_FAILURE;
-+ }
-+ }
-+
-+ if (data) {
-+ for (i = 0; i < n_bam_files && data[i]; ++i) {
-+ sam_hdr_destroy(data[i]->hdr);
-+ if (data[i]->fp) sam_close(data[i]->fp);
-+ hts_itr_destroy(data[i]->iter);
-+ free(data[i]);
-+ }
-+ free(data);
-+ }
-+
-+ if (opt_file_list && fn) {
-+ for (i = 0; i < n_bam_files; ++i)
-+ free(fn[i]);
-+ free(fn);
-+ }
-+ sam_global_args_free(&ga);
-+
-+ return status;
-+}
-+
-+#ifdef _MAIN_BAMCOV
-+int samtools_coverage_main(int argc, char *argv[]) {
-+ return main_coverage(argc, argv);
-+}
-+#endif
---- python-pysam.orig/samtools/cut_target.c
-+++ python-pysam/samtools/cut_target.c
-@@ -1,7 +1,7 @@
- /* cut_target.c -- targetcut subcommand.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2012-2013, 2015, 2016 Genome Research Ltd.
-+ Copyright (C) 2012-2013, 2015, 2016, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -49,9 +49,9 @@
- int min_baseQ, tid, max_bases;
- uint16_t *bases;
- samFile *fp;
-- bam_hdr_t *h;
-+ sam_hdr_t *h;
- char *ref;
-- int len;
-+ hts_pos_t len;
- faidx_t *fai;
- errmod_t *em;
- } ct_t;
-@@ -92,9 +92,10 @@
- return ret<<8|k;
- }
-
--static void process_cns(bam_hdr_t *h, int tid, int l, uint16_t *cns)
-+static void process_cns(sam_hdr_t *h, int tid, hts_pos_t l, uint16_t *cns)
- {
-- int i, f[2][2], *prev, *curr, *swap_tmp, s;
-+ int64_t i, s;
-+ int f[2][2], *prev, *curr, *swap_tmp;
- uint8_t *b; // backtrack array
- b = calloc(l, 1);
- f[0][0] = f[0][1] = 0;
-@@ -123,11 +124,11 @@
- s = b[i]>>s&1;
- }
- // print
-- for (i = 0, s = -1; i < INT_MAX && i <= l; ++i) {
-+ for (i = 0, s = -1; i < INT64_MAX && i <= l; ++i) {
- if (i == l || ((b[i]>>2&3) == 0 && s >= 0)) {
- if (s >= 0) {
-- int j;
-- printf("%s:%d-%d\t0\t%s\t%d\t60\t%dM\t*\t0\t0\t", h->target_name[tid], s+1, i, h->target_name[tid], s+1, i-s);
-+ int64_t j;
-+ printf("%s:%"PRId64"-%"PRId64"\t0\t%s\t%"PRId64"\t60\t%"PRId64"M\t*\t0\t0\t", sam_hdr_tid2name(h, tid), s+1, i, sam_hdr_tid2name(h, tid), s+1, i-s);
- for (j = s; j < i; ++j) {
- int c = cns[j]>>8;
- if (c == 0) putchar('N');
-@@ -157,7 +158,7 @@
- if ( g->fai && b->core.tid >= 0 ) {
- if (b->core.tid != g->tid) { // then load the sequence
- free(g->ref);
-- g->ref = fai_fetch(g->fai, g->h->target_name[b->core.tid], &g->len);
-+ g->ref = fai_fetch64(g->fai, sam_hdr_tid2name(g->h, b->core.tid), &g->len);
- g->tid = b->core.tid;
- }
- sam_prob_realn(b, g->ref, g->len, 1<<1|1);
-@@ -169,7 +170,8 @@
-
- int main_cut_target(int argc, char *argv[])
- {
-- int c, tid, pos, n, lasttid = -1, l, max_l, usage = 0;
-+ int c, tid, pos, n, lasttid = -1, usage = 0;
-+ hts_pos_t l, max_l;
- const bam_pileup1_t *p;
- bam_plp_t plp;
- uint16_t *cns;
-@@ -201,7 +203,7 @@
- }
- if (usage || argc == optind) {
- fprintf(stderr, "Usage: samtools targetcut [-Q minQ] [-i inPen] [-0 em0] [-1 em1] [-2 em2] <in.bam>\n");
-- sam_global_opt_help(stderr, "-.--f-");
-+ sam_global_opt_help(stderr, "-.--f--.");
- return 1;
- }
- l = max_l = 0; cns = 0;
-@@ -223,12 +225,12 @@
- if (tid < 0) break;
- if (tid != lasttid) { // change of chromosome
- if (cns) process_cns(g.h, lasttid, l, cns);
-- if (max_l < g.h->target_len[tid]) {
-- max_l = g.h->target_len[tid];
-+ if (max_l < sam_hdr_tid2len(g.h, tid)) {
-+ max_l = sam_hdr_tid2len(g.h, tid);
- kroundup32(max_l);
- cns = realloc(cns, max_l * 2);
- }
-- l = g.h->target_len[tid];
-+ l = sam_hdr_tid2len(g.h, tid);
- memset(cns, 0, max_l * 2);
- lasttid = tid;
- }
-@@ -236,7 +238,7 @@
- }
- process_cns(g.h, lasttid, l, cns);
- free(cns);
-- bam_hdr_destroy(g.h);
-+ sam_hdr_destroy(g.h);
- bam_plp_destroy(plp);
- sam_close(g.fp);
- if (g.fai) {
---- python-pysam.orig/samtools/cut_target.c.pysam.c
-+++ python-pysam/samtools/cut_target.c.pysam.c
-@@ -3,7 +3,7 @@
- /* cut_target.c -- targetcut subcommand.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2012-2013, 2015, 2016 Genome Research Ltd.
-+ Copyright (C) 2012-2013, 2015, 2016, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -51,9 +51,9 @@
- int min_baseQ, tid, max_bases;
- uint16_t *bases;
- samFile *fp;
-- bam_hdr_t *h;
-+ sam_hdr_t *h;
- char *ref;
-- int len;
-+ hts_pos_t len;
- faidx_t *fai;
- errmod_t *em;
- } ct_t;
-@@ -94,9 +94,10 @@
- return ret<<8|k;
- }
-
--static void process_cns(bam_hdr_t *h, int tid, int l, uint16_t *cns)
-+static void process_cns(sam_hdr_t *h, int tid, hts_pos_t l, uint16_t *cns)
- {
-- int i, f[2][2], *prev, *curr, *swap_tmp, s;
-+ int64_t i, s;
-+ int f[2][2], *prev, *curr, *swap_tmp;
- uint8_t *b; // backtrack array
- b = calloc(l, 1);
- f[0][0] = f[0][1] = 0;
-@@ -125,11 +126,11 @@
- s = b[i]>>s&1;
- }
- // print
-- for (i = 0, s = -1; i < INT_MAX && i <= l; ++i) {
-+ for (i = 0, s = -1; i < INT64_MAX && i <= l; ++i) {
- if (i == l || ((b[i]>>2&3) == 0 && s >= 0)) {
- if (s >= 0) {
-- int j;
-- fprintf(samtools_stdout, "%s:%d-%d\t0\t%s\t%d\t60\t%dM\t*\t0\t0\t", h->target_name[tid], s+1, i, h->target_name[tid], s+1, i-s);
-+ int64_t j;
-+ fprintf(samtools_stdout, "%s:%"PRId64"-%"PRId64"\t0\t%s\t%"PRId64"\t60\t%"PRId64"M\t*\t0\t0\t", sam_hdr_tid2name(h, tid), s+1, i, sam_hdr_tid2name(h, tid), s+1, i-s);
- for (j = s; j < i; ++j) {
- int c = cns[j]>>8;
- if (c == 0) fputc('N', samtools_stdout);
-@@ -159,7 +160,7 @@
- if ( g->fai && b->core.tid >= 0 ) {
- if (b->core.tid != g->tid) { // then load the sequence
- free(g->ref);
-- g->ref = fai_fetch(g->fai, g->h->target_name[b->core.tid], &g->len);
-+ g->ref = fai_fetch64(g->fai, sam_hdr_tid2name(g->h, b->core.tid), &g->len);
- g->tid = b->core.tid;
- }
- sam_prob_realn(b, g->ref, g->len, 1<<1|1);
-@@ -171,7 +172,8 @@
-
- int main_cut_target(int argc, char *argv[])
- {
-- int c, tid, pos, n, lasttid = -1, l, max_l, usage = 0;
-+ int c, tid, pos, n, lasttid = -1, usage = 0;
-+ hts_pos_t l, max_l;
- const bam_pileup1_t *p;
- bam_plp_t plp;
- uint16_t *cns;
-@@ -203,7 +205,7 @@
- }
- if (usage || argc == optind) {
- fprintf(samtools_stderr, "Usage: samtools targetcut [-Q minQ] [-i inPen] [-0 em0] [-1 em1] [-2 em2] <in.bam>\n");
-- sam_global_opt_help(samtools_stderr, "-.--f-");
-+ sam_global_opt_help(samtools_stderr, "-.--f--.");
- return 1;
- }
- l = max_l = 0; cns = 0;
-@@ -225,12 +227,12 @@
- if (tid < 0) break;
- if (tid != lasttid) { // change of chromosome
- if (cns) process_cns(g.h, lasttid, l, cns);
-- if (max_l < g.h->target_len[tid]) {
-- max_l = g.h->target_len[tid];
-+ if (max_l < sam_hdr_tid2len(g.h, tid)) {
-+ max_l = sam_hdr_tid2len(g.h, tid);
- kroundup32(max_l);
- cns = realloc(cns, max_l * 2);
- }
-- l = g.h->target_len[tid];
-+ l = sam_hdr_tid2len(g.h, tid);
- memset(cns, 0, max_l * 2);
- lasttid = tid;
- }
-@@ -238,7 +240,7 @@
- }
- process_cns(g.h, lasttid, l, cns);
- free(cns);
-- bam_hdr_destroy(g.h);
-+ sam_hdr_destroy(g.h);
- bam_plp_destroy(plp);
- sam_close(g.fp);
- if (g.fai) {
---- python-pysam.orig/samtools/dict.c
-+++ python-pysam/samtools/dict.c
-@@ -98,6 +98,7 @@
- hts_md5_destroy(md5);
-
- if (args->output_fname) fclose(out);
-+ gzclose(fp);
- }
-
- static int dict_usage(void)
---- python-pysam.orig/samtools/dict.c.pysam.c
-+++ python-pysam/samtools/dict.c.pysam.c
-@@ -100,6 +100,7 @@
- hts_md5_destroy(md5);
-
- if (args->output_fname) fclose(out);
-+ gzclose(fp);
- }
-
- static int dict_usage(void)
---- python-pysam.orig/samtools/faidx.c
-+++ python-pysam/samtools/faidx.c
-@@ -1,6 +1,6 @@
- /* faidx.c -- faidx subcommand.
-
-- Copyright (C) 2008, 2009, 2013, 2016, 2018 Genome Research Ltd.
-+ Copyright (C) 2008, 2009, 2013, 2016, 2018-2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -67,9 +67,9 @@
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
- };
-
--static void reverse_complement(char *str, int len) {
-+static void reverse_complement(char *str, const hts_pos_t len) {
- char c;
-- int i = 0, j = len - 1;
-+ hts_pos_t i = 0, j = len - 1;
-
- while (i <= j) {
- c = str[i];
-@@ -80,10 +80,9 @@
- }
- }
-
--
--static void reverse(char *str, int len) {
-+static void reverse(char *str, const hts_pos_t len) {
- char c;
-- int i = 0, j = len - 1;
-+ hts_pos_t i = 0, j = len - 1;
-
- while (i < j) {
- c = str[i];
-@@ -95,9 +94,10 @@
- }
-
-
--static int write_line(FILE *file, const char *line, const char *name, const int ignore,
-- const int length, const int seq_len) {
-- int beg, end;
-+static int write_line(faidx_t *faid, FILE *file, const char *line, const char *name,
-+ const int ignore, const int length, const hts_pos_t seq_len) {
-+ int id;
-+ hts_pos_t beg, end;
-
- if (seq_len < 0) {
- fprintf(stderr, "[faidx] Failed to fetch sequence in %s\n", name);
-@@ -109,15 +109,16 @@
- }
- } else if (seq_len == 0) {
- fprintf(stderr, "[faidx] Zero length sequence: %s\n", name);
-- } else if (hts_parse_reg(name, &beg, &end) && (end < INT_MAX) && (seq_len != end - beg)) {
-+ } else if (fai_parse_region(faid, name, &id, &beg, &end, 0)
-+ && (end < INT_MAX) && (seq_len != end - beg)) {
- fprintf(stderr, "[faidx] Truncated sequence: %s\n", name);
- }
-
-- size_t i, seq_sz = seq_len;
-+ hts_pos_t i, seq_sz = seq_len;
-
- for (i = 0; i < seq_sz; i += length)
- {
-- size_t len = i + length < seq_sz ? length : seq_sz - i;
-+ hts_pos_t len = i + length < seq_sz ? length : seq_sz - i;
- if (fwrite(line + i, 1, len, file) < len ||
- fputc('\n', file) == EOF) {
- print_error_errno("faidx", "failed to write output");
-@@ -133,8 +134,8 @@
- const int length, const int rev,
- const char *pos_strand_name, const char *neg_strand_name,
- enum fai_format_options format) {
-- int seq_len;
-- char *seq = fai_fetch(faid, name, &seq_len);
-+ hts_pos_t seq_len;
-+ char *seq = fai_fetch64(faid, name, &seq_len);
-
- if (format == FAI_FASTA) {
- fprintf(file, ">%s%s\n", name, rev ? neg_strand_name : pos_strand_name);
-@@ -146,7 +147,8 @@
- reverse_complement(seq, seq_len);
- }
-
-- if (write_line(file, seq, name, ignore, length, seq_len) == EXIT_FAILURE) {
-+ if (write_line(faid, file, seq, name, ignore, length, seq_len)
-+ == EXIT_FAILURE) {
- free(seq);
- return EXIT_FAILURE;
- }
-@@ -156,14 +158,15 @@
- if (format == FAI_FASTQ) {
- fprintf(file, "+\n");
-
-- char *qual = fai_fetchqual(faid, name, &seq_len);
-+ char *qual = fai_fetchqual64(faid, name, &seq_len);
-
- if (rev && seq_len > 0) {
- reverse(qual, seq_len);
- }
-
-- if (write_line(file, qual, name, ignore, length, seq_len) == EXIT_FAILURE) {
-- free(seq);
-+ if (write_line(faid, file, qual, name, ignore, length, seq_len)
-+ == EXIT_FAILURE) {
-+ free(qual);
- return EXIT_FAILURE;
- }
-
---- python-pysam.orig/samtools/faidx.c.pysam.c
-+++ python-pysam/samtools/faidx.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* faidx.c -- faidx subcommand.
-
-- Copyright (C) 2008, 2009, 2013, 2016, 2018 Genome Research Ltd.
-+ Copyright (C) 2008, 2009, 2013, 2016, 2018-2019 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -69,9 +69,9 @@
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
- };
-
--static void reverse_complement(char *str, int len) {
-+static void reverse_complement(char *str, const hts_pos_t len) {
- char c;
-- int i = 0, j = len - 1;
-+ hts_pos_t i = 0, j = len - 1;
-
- while (i <= j) {
- c = str[i];
-@@ -82,10 +82,9 @@
- }
- }
-
--
--static void reverse(char *str, int len) {
-+static void reverse(char *str, const hts_pos_t len) {
- char c;
-- int i = 0, j = len - 1;
-+ hts_pos_t i = 0, j = len - 1;
-
- while (i < j) {
- c = str[i];
-@@ -97,9 +96,10 @@
- }
-
-
--static int write_line(FILE *file, const char *line, const char *name, const int ignore,
-- const int length, const int seq_len) {
-- int beg, end;
-+static int write_line(faidx_t *faid, FILE *file, const char *line, const char *name,
-+ const int ignore, const int length, const hts_pos_t seq_len) {
-+ int id;
-+ hts_pos_t beg, end;
-
- if (seq_len < 0) {
- fprintf(samtools_stderr, "[faidx] Failed to fetch sequence in %s\n", name);
-@@ -111,15 +111,16 @@
- }
- } else if (seq_len == 0) {
- fprintf(samtools_stderr, "[faidx] Zero length sequence: %s\n", name);
-- } else if (hts_parse_reg(name, &beg, &end) && (end < INT_MAX) && (seq_len != end - beg)) {
-+ } else if (fai_parse_region(faid, name, &id, &beg, &end, 0)
-+ && (end < INT_MAX) && (seq_len != end - beg)) {
- fprintf(samtools_stderr, "[faidx] Truncated sequence: %s\n", name);
- }
-
-- size_t i, seq_sz = seq_len;
-+ hts_pos_t i, seq_sz = seq_len;
-
- for (i = 0; i < seq_sz; i += length)
- {
-- size_t len = i + length < seq_sz ? length : seq_sz - i;
-+ hts_pos_t len = i + length < seq_sz ? length : seq_sz - i;
- if (fwrite(line + i, 1, len, file) < len ||
- fputc('\n', file) == EOF) {
- print_error_errno("faidx", "failed to write output");
-@@ -135,8 +136,8 @@
- const int length, const int rev,
- const char *pos_strand_name, const char *neg_strand_name,
- enum fai_format_options format) {
-- int seq_len;
-- char *seq = fai_fetch(faid, name, &seq_len);
-+ hts_pos_t seq_len;
-+ char *seq = fai_fetch64(faid, name, &seq_len);
-
- if (format == FAI_FASTA) {
- fprintf(file, ">%s%s\n", name, rev ? neg_strand_name : pos_strand_name);
-@@ -148,7 +149,8 @@
- reverse_complement(seq, seq_len);
- }
-
-- if (write_line(file, seq, name, ignore, length, seq_len) == EXIT_FAILURE) {
-+ if (write_line(faid, file, seq, name, ignore, length, seq_len)
-+ == EXIT_FAILURE) {
- free(seq);
- return EXIT_FAILURE;
- }
-@@ -158,14 +160,15 @@
- if (format == FAI_FASTQ) {
- fprintf(file, "+\n");
-
-- char *qual = fai_fetchqual(faid, name, &seq_len);
-+ char *qual = fai_fetchqual64(faid, name, &seq_len);
-
- if (rev && seq_len > 0) {
- reverse(qual, seq_len);
- }
-
-- if (write_line(file, qual, name, ignore, length, seq_len) == EXIT_FAILURE) {
-- free(seq);
-+ if (write_line(faid, file, qual, name, ignore, length, seq_len)
-+ == EXIT_FAILURE) {
-+ free(qual);
- return EXIT_FAILURE;
- }
-
---- python-pysam.orig/samtools/htslib-1.9/LICENSE
-+++ /dev/null
-@@ -1,69 +0,0 @@
--[Files in this distribution outwith the cram/ subdirectory are distributed
--according to the terms of the following MIT/Expat license.]
--
--The MIT/Expat License
--
--Copyright (C) 2012-2018 Genome Research Ltd.
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE.
--
--
--[Files within the cram/ subdirectory in this distribution are distributed
--according to the terms of the following Modified 3-Clause BSD license.]
--
--The Modified-BSD License
--
--Copyright (C) 2012-2018 Genome Research Ltd.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are met:
--
--1. Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
--2. Redistributions in binary form must reproduce the above copyright notice,
-- this list of conditions and the following disclaimer in the documentation
-- and/or other materials provided with the distribution.
--
--3. Neither the names Genome Research Ltd and Wellcome Trust Sanger Institute
-- nor the names of its contributors may be used to endorse or promote products
-- derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY GENOME RESEARCH LTD AND CONTRIBUTORS "AS IS"
--AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
--IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
--DISCLAIMED. IN NO EVENT SHALL GENOME RESEARCH LTD OR ITS CONTRIBUTORS BE LIABLE
--FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
--DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
--SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
--CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
--OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
--OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--
--
--[The use of a range of years within a copyright notice in this distribution
--should be interpreted as being equivalent to a list of years including the
--first and last year specified and all consecutive years between them.
--
--For example, a copyright notice that reads "Copyright (C) 2005, 2007-2009,
--2011-2012" should be interpreted as being identical to a notice that reads
--"Copyright (C) 2005, 2007, 2008, 2009, 2011, 2012" and a copyright notice
--that reads "Copyright (C) 2005-2012" should be interpreted as being identical
--to a notice that reads "Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
--2011, 2012".]
---- python-pysam.orig/samtools/htslib-1.9/README
-+++ /dev/null
-@@ -1,5 +0,0 @@
--HTSlib is an implementation of a unified C library for accessing common file
--formats, such as SAM, CRAM, VCF, and BCF, used for high-throughput sequencing
--data. It is the core library used by samtools and bcftools.
--
--See INSTALL for building and installation instructions.
---- python-pysam.orig/samtools/misc/ace2sam.c
-+++ python-pysam/samtools/misc/ace2sam.c
-@@ -93,7 +93,8 @@
- s.l = s.m = 0; s.s = 0;
- af_n = af_max = af_i = 0; af = 0;
- for (i = 0; i < N_TMPSTR; ++i) t[i].l = t[i].m = 0, t[i].s = 0;
-- fp = strcmp(argv[1], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r");
-+ fp = strcmp(argv[optind], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r");
-+ if (fp == NULL) fatal("can't open input file");
- ks = ks_init(fp);
- while (ks_getuntil(ks, 0, &s, &dret) >= 0) {
- if (strcmp(s.s, "CO") == 0) { // contig sequence
---- python-pysam.orig/samtools/misc/ace2sam.c.pysam.c
-+++ python-pysam/samtools/misc/ace2sam.c.pysam.c
-@@ -95,7 +95,8 @@
- s.l = s.m = 0; s.s = 0;
- af_n = af_max = af_i = 0; af = 0;
- for (i = 0; i < N_TMPSTR; ++i) t[i].l = t[i].m = 0, t[i].s = 0;
-- fp = strcmp(argv[1], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r");
-+ fp = strcmp(argv[optind], "-")? gzopen(argv[optind], "r") : gzdopen(fileno(stdin), "r");
-+ if (fp == NULL) fatal("can't open input file");
- ks = ks_init(fp);
- while (ks_getuntil(ks, 0, &s, &dret) >= 0) {
- if (strcmp(s.s, "CO") == 0) { // contig sequence
---- python-pysam.orig/samtools/padding.c
-+++ python-pysam/samtools/padding.c
-@@ -1,7 +1,7 @@
- /* padding.c -- depad subcommand.
-
- Copyright (C) 2011, 2012 Broad Institute.
-- Copyright (C) 2014-2016 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2012, 2013 Peter Cock, The James Hutton Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -29,10 +29,10 @@
- #include <string.h>
- #include <assert.h>
- #include <unistd.h>
-+#include <inttypes.h>
- #include <htslib/kstring.h>
- #include <htslib/sam.h>
- #include <htslib/faidx.h>
--#include "sam_header.h"
- #include "sam_opts.h"
- #include "samtools.h"
-
-@@ -62,6 +62,10 @@
- if (_n == _m) { \
- _m = _m? _m<<1 : 4; \
- _c = (uint32_t*)realloc(_c, _m * 4); \
-+ if (!(_c)) { \
-+ fprintf(stderr, "[depad] ERROR: Memory allocation failure.\n"); \
-+ return -1; \
-+ } \
- } \
- _c[_n++] = (_v); \
- } while (0)
-@@ -107,15 +111,15 @@
- return length != s->l;
- }
-
--int load_unpadded_ref(faidx_t *fai, char *ref_name, int ref_len, kstring_t *seq)
-+int load_unpadded_ref(faidx_t *fai, const char *ref_name, hts_pos_t ref_len, kstring_t *seq)
- {
- char base;
- char *fai_ref = 0;
-- int fai_ref_len = 0, k;
-+ hts_pos_t fai_ref_len = 0, k;
-
-- fai_ref = fai_fetch(fai, ref_name, &fai_ref_len);
-+ fai_ref = fai_fetch64(fai, ref_name, &fai_ref_len);
- if (fai_ref_len != ref_len) {
-- fprintf(stderr, "[depad] ERROR: FASTA sequence %s length %i, expected %i\n", ref_name, fai_ref_len, ref_len);
-+ fprintf(stderr, "[depad] ERROR: FASTA sequence %s length %"PRIhts_pos", expected %"PRIhts_pos"\n", ref_name, fai_ref_len, ref_len);
- free(fai_ref);
- return -1;
- }
-@@ -141,16 +145,16 @@
- return 0;
- }
-
--int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len)
-+hts_pos_t get_unpadded_len(faidx_t *fai, const char *ref_name, hts_pos_t padded_len)
- {
- char base;
- char *fai_ref = 0;
-- int fai_ref_len = 0, k;
-- int bases=0, gaps=0;
-+ hts_pos_t fai_ref_len = 0, k;
-+ hts_pos_t bases=0, gaps=0;
-
-- fai_ref = fai_fetch(fai, ref_name, &fai_ref_len);
-+ fai_ref = fai_fetch64(fai, ref_name, &fai_ref_len);
- if (fai_ref_len != padded_len) {
-- fprintf(stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len);
-+ fprintf(stderr, "[depad] ERROR: FASTA sequence '%s' length %"PRIhts_pos", expected %"PRIhts_pos"\n", ref_name, fai_ref_len, padded_len);
- free(fai_ref);
- return -1;
- }
-@@ -185,7 +189,7 @@
- return posmap;
- }
-
--int bam_pad2unpad(samFile *in, samFile *out, bam_hdr_t *h, faidx_t *fai)
-+int bam_pad2unpad(samFile *in, samFile *out, sam_hdr_t *h, faidx_t *fai)
- {
- bam1_t *b = 0;
- kstring_t r, q;
-@@ -207,21 +211,21 @@
-
- uint32_t *cigar = bam_get_cigar(b);
- n2 = 0;
-- if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), h->target_name[b->core.tid]) == 0) {
-+ if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), sam_hdr_tid2name(h, b->core.tid)) == 0) {
- // fprintf(stderr, "[depad] Found embedded reference '%s'\n", bam_get_qname(b));
- r_tid = b->core.tid;
- if (0!=unpad_seq(b, &r)) {
- fprintf(stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in reference %s\n", bam_get_qname(b));
- return -1;
- };
-- if (h->target_len[r_tid] != r.l) {
-- fprintf(stderr, "[depad] ERROR: (Padded) length of '%s' is %u in BAM header, but %llu in embedded reference\n", bam_get_qname(b), h->target_len[r_tid], (unsigned long long)(r.l));
-+ if (sam_hdr_tid2len(h, r_tid) != r.l) {
-+ fprintf(stderr, "[depad] ERROR: (Padded) length of '%s' is %"PRId64" in BAM header, but %zu in embedded reference\n", bam_get_qname(b), (int64_t) sam_hdr_tid2len(h, r_tid), r.l);
- return -1;
- }
- if (fai) {
- // Check the embedded reference matches the FASTA file
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &q)) {
-- fprintf(stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &q)) {
-+ fprintf(stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- assert(r.l == q.l);
-@@ -230,7 +234,7 @@
- if (r.s[i] != q.s[i]) {
- // Show gaps as ASCII 45
- fprintf(stderr, "[depad] ERROR: Embedded sequence and reference FASTA don't match for %s base %i, '%c' vs '%c'\n",
-- h->target_name[b->core.tid], i+1,
-+ sam_hdr_tid2name(h, b->core.tid), i+1,
- r.s[i] ? seq_nt16_str[(int)r.s[i]] : 45,
- q.s[i] ? seq_nt16_str[(int)q.s[i]] : 45);
- return -1;
-@@ -249,15 +253,15 @@
- ; // good case, reference available
- //fprintf(stderr, "[depad] Have ref '%s' for read '%s'\n", h->target_name[b->core.tid], bam_get_qname(b));
- } else if (fai) {
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) {
-- fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &r)) {
-+ fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
- r_tid = b->core.tid;
- // fprintf(stderr, "[depad] Loaded %s from FASTA file\n", h->target_name[b->core.tid]);
- } else {
-- fprintf(stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", h->target_name[b->core.tid]);
-+ fprintf(stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- if (0!=unpad_seq(b, &q)) {
-@@ -343,19 +347,19 @@
- /* Nasty case, Must load alternative posmap */
- // fprintf(stderr, "[depad] Loading reference '%s' temporarily\n", h->target_name[b->core.mtid]);
- if (!fai) {
-- fprintf(stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]);
-+ fprintf(stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", sam_hdr_tid2name(h, b->core.mtid));
- return -1;
- }
- /* Temporarily load the other reference sequence */
-- if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) {
-- fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.mtid), sam_hdr_tid2len(h, b->core.mtid), &r)) {
-+ fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.mtid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
- b->core.mpos = posmap[b->core.mpos];
- /* Restore the reference and posmap*/
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) {
-- fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &r)) {
-+ fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
-@@ -374,126 +378,47 @@
- ret = 1;
- }
- free(r.s); free(q.s); free(posmap);
-+ free(cigar2);
- bam_destroy1(b);
- return ret;
- }
-
--bam_hdr_t * fix_header(bam_hdr_t *old, faidx_t *fai)
-+sam_hdr_t * fix_header(sam_hdr_t *old, faidx_t *fai)
- {
-- int i = 0, unpadded_len = 0;
-- bam_hdr_t *header = 0 ;
-- unsigned short ln_found;
--
-- header = bam_hdr_dup(old);
-- for (i = 0; i < old->n_targets; ++i) {
-- unpadded_len = get_unpadded_len(fai, old->target_name[i], old->target_len[i]);
-+ int i = 0, ret = 0;
-+ hts_pos_t unpadded_len = 0;
-+ sam_hdr_t *header = sam_hdr_dup(old);
-+ if (!header)
-+ return NULL;
-+
-+ int nref = sam_hdr_nref(old);
-+ char len_buf[64];
-+
-+ for (i = 0; i < nref; ++i) {
-+ unpadded_len = get_unpadded_len(fai, sam_hdr_tid2name(old, i), sam_hdr_tid2len(old, i));
- if (unpadded_len < 0) {
-- fprintf(stderr, "[depad] ERROR getting unpadded length of '%s', padded length %i\n", old->target_name[i], old->target_len[i]);
-+ fprintf(stderr, "[depad] ERROR getting unpadded length of '%s', padded length %"PRIhts_pos"\n", sam_hdr_tid2name(old, i), (hts_pos_t) sam_hdr_tid2len(old, i));
-+ } else if (unpadded_len > sam_hdr_tid2len(old, i)) {
-+ fprintf(stderr, "[depad] New unpadded length of '%s' is larger than the padded length (%"PRIhts_pos" > %"PRIhts_pos")\n",
-+ sam_hdr_tid2name(old, i), unpadded_len,
-+ (hts_pos_t) sam_hdr_tid2len(old, i));
-+ ret = 1;
- } else {
-- header->target_len[i] = unpadded_len;
-+ sprintf(len_buf, "%"PRIhts_pos"", unpadded_len);
-+ if ((ret |= sam_hdr_update_line(header, "SQ", "SN", sam_hdr_tid2name(header, i), "LN", len_buf, NULL)))
-+ fprintf(stderr, "[depad] Error updating length of '%s' from %"PRIhts_pos" to %"PRIhts_pos"\n",
-+ sam_hdr_tid2name(header, i),
-+ (hts_pos_t) sam_hdr_tid2len(header, i),
-+ unpadded_len);
- //fprintf(stderr, "[depad] Recalculating '%s' length %i -> %i\n", old->target_name[i], old->target_len[i], header->target_len[i]);
- }
- }
-- /* Duplicating the header allocated new buffer for header string */
-- /* After modifying the @SQ lines it will only get smaller, since */
-- /* the LN entries will be the same or shorter, and we'll remove */
-- /* any MD entries (MD5 checksums). */
-- assert(strlen(old->text) == strlen(header->text));
-- assert (0==strcmp(old->text, header->text));
-- const char *text;
-- text = old->text;
-- header->text[0] = '\0'; /* Resuse the allocated buffer */
-- char * newtext = header->text;
-- char * end=NULL;
-- while (text[0]=='@') {
-- end = strchr(text, '\n');
-- assert(end != 0);
-- if (text[1]=='S' && text[2]=='Q' && text[3]=='\t') {
-- const char *cp = text+3;
-- char *name = strstr(text, "\tSN:");
-- char *name_end;
-- if (!name) {
-- fprintf(stderr, "Unable to find SN: header field\n");
-- return NULL;
-- }
-- name += 4;
-- for (name_end = name; name_end != end && *name_end != '\t'; name_end++);
-- strcat(newtext, "@SQ");
-- ln_found = 0;
--
-- /* Parse the @SQ lines */
-- while (cp != end) {
-- if (!ln_found && end-cp >= 2 && strncmp(cp, "LN", 2) == 0) {
-- // Rewrite the length
-- char len_buf[100];
-- int tid;
-- unsigned int old_length, new_length;
-- const char *old_cp = cp;
--
-- ln_found = 1;
--
-- while (cp != end && *cp++ != '\t');
-- old_length = (int)(cp - old_cp);
--
-- for (tid = 0; tid < header->n_targets; tid++) {
-- // may want to hash this, but new header API incoming.
-- if (strncmp(name, header->target_name[tid], name_end - name) == 0) {
-- new_length = sprintf(len_buf, "LN:%d", header->target_len[tid]);
-- if (new_length <= old_length) {
-- strcat(newtext, len_buf);
-- }
-- else {
-- fprintf(stderr, "LN value of the reference is larger than the original!\n");
-- exit(1);
-- }
-- break;
-- }
-- }
-
-- if (cp != end)
-- strcat(newtext, "\t");
-- } else if (end-cp >= 2 &&
-- ((ln_found && strncmp(cp, "LN", 2) == 0) ||
-- strncmp(cp, "M5", 2) == 0 ||
-- strncmp(cp, "UR", 2) == 0))
-- {
-- // skip secondary LNs
-- // MD5 changed during depadding; ditch it.
-- // URLs are also invalid.
-- while (cp != end && *cp++ != '\t');
-- } else {
-- // Otherwise copy this sub-field verbatim
-- const char *cp_start = cp;
-- while (cp != end && *cp++ != '\t');
-- strncat(newtext, cp_start, cp-cp_start);
-- }
-- }
--
-- // Add newline, replacing trailing '\t' if last on line was the LN:
-- char *text_end = newtext + strlen(newtext);
-- if (text_end[-1] == '\t')
-- text_end[-1] = '\n';
-- else
-- *text_end++ = '\n', *text_end = '\0';
-- } else {
-- /* Copy this line to the new header */
-- strncat(newtext, text, end - text + 1);
-- }
-- text = end + 1;
-+ if (ret) {
-+ sam_hdr_destroy(header);
-+ return NULL;
- }
-- assert (text[0]=='\0');
-- /* Check we didn't overflow the buffer */
-- assert (strlen(header->text) <= strlen(old->text));
-- if (strlen(header->text) < header->l_text) {
-- //fprintf(stderr, "[depad] Reallocating header buffer\n");
-- assert (newtext == header->text);
-- newtext = malloc(strlen(header->text) + 1);
-- strcpy(newtext, header->text);
-- free(header->text);
-- header->text = newtext;
-- header->l_text = strlen(newtext);
-- }
-- //fprintf(stderr, "[depad] Here is the new header (pending @SQ lines),\n\n%s\n(end)\n", header->text);
-+
- return header;
- }
-
-@@ -502,15 +427,17 @@
- int main_pad2unpad(int argc, char *argv[])
- {
- samFile *in = 0, *out = 0;
-- bam_hdr_t *h = 0, *h_fix = 0;
-+ sam_hdr_t *h = 0, *h_fix = 0;
- faidx_t *fai = 0;
-- int c, compress_level = -1, is_long_help = 0;
-- char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0;
-+ int c, compress_level = -1, is_long_help = 0, no_pg = 0;
-+ char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0, *fn_out_idx = NULL;
- int ret=0;
-+ char *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 'T', '-'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -532,6 +459,7 @@
- if (ga.out.format == unknown_format)
- hts_parse_format(&ga.out, "bam");
- break;
-+ case 1: no_pg = 1; break;
- case '?': is_long_help = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c);
-@@ -569,7 +497,11 @@
- goto depad_end;
- }
- if (fai) {
-- h_fix = fix_header(h, fai);
-+ if (!(h_fix = fix_header(h, fai))){
-+ fprintf(stderr, "[depad] failed to fix the header from\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
- } else {
- fprintf(stderr, "[depad] Warning - reference lengths will not be corrected without FASTA reference\n");
- h_fix = h;
-@@ -587,25 +519,61 @@
- if (ga.out.format == cram)
- hts_set_opt(out, CRAM_OPT_NO_REF, 1);
-
-+ if (!no_pg) {
-+ if(!(arg_list = stringify_argv(argc+1, argv-1))) {
-+ fprintf(stderr, "[depad] failed to create arg_list\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
-+
-+ if (sam_hdr_add_pg(h_fix, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ fprintf(stderr, "[depad] failed to add PG line to header\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
-+ }
-+
- if (sam_hdr_write(out, h_fix) != 0) {
- fprintf(stderr, "[depad] failed to write header.\n");
- ret = 1;
- goto depad_end;
- }
-+ if (ga.write_index) {
-+ if (!(fn_out_idx = auto_index(out, fn_out, h_fix))) {
-+ ret = 1;
-+ goto depad_end;
-+ }
-+ }
-
- // Do the depad
- if (bam_pad2unpad(in, out, h, fai) != 0) ret = 1;
-
-+ if (ga.write_index) {
-+ if (sam_idx_save(out) < 0) {
-+ print_error_errno("depad", "writing index failed");
-+ ret = 1;
-+ }
-+ }
-+
- depad_end:
- // close files, free and return
-+ free(arg_list);
- if (fai) fai_destroy(fai);
-- if (h) bam_hdr_destroy(h);
-+ if (h) sam_hdr_destroy(h);
-+ if (h_fix && h_fix != h) sam_hdr_destroy(h_fix);
- if (in) sam_close(in);
- if (out && sam_close(out) < 0) {
- fprintf(stderr, "[depad] error on closing output file.\n");
- ret = 1;
- }
- free(fn_list); free(fn_out);
-+ if (fn_out_idx)
-+ free(fn_out_idx);
-+ sam_global_args_free(&ga);
- return ret;
- }
-
-@@ -621,8 +589,9 @@
- fprintf(stderr, " -T, --reference FILE\n");
- fprintf(stderr, " Padded reference sequence file [null]\n");
- fprintf(stderr, " -o FILE Output file name [stdout]\n");
-+ fprintf(stderr, " --no-PG do not add a PG line\n");
- fprintf(stderr, " -? Longer help\n");
-- sam_global_opt_help(stderr, "-...--");
-+ sam_global_opt_help(stderr, "-...--..");
-
- if (is_long_help)
- fprintf(stderr,
---- python-pysam.orig/samtools/padding.c.pysam.c
-+++ python-pysam/samtools/padding.c.pysam.c
-@@ -3,7 +3,7 @@
- /* padding.c -- depad subcommand.
-
- Copyright (C) 2011, 2012 Broad Institute.
-- Copyright (C) 2014-2016 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2019 Genome Research Ltd.
- Portions copyright (C) 2012, 2013 Peter Cock, The James Hutton Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -31,10 +31,10 @@
- #include <string.h>
- #include <assert.h>
- #include <unistd.h>
-+#include <inttypes.h>
- #include <htslib/kstring.h>
- #include <htslib/sam.h>
- #include <htslib/faidx.h>
--#include "sam_header.h"
- #include "sam_opts.h"
- #include "samtools.h"
-
-@@ -64,6 +64,10 @@
- if (_n == _m) { \
- _m = _m? _m<<1 : 4; \
- _c = (uint32_t*)realloc(_c, _m * 4); \
-+ if (!(_c)) { \
-+ fprintf(samtools_stderr, "[depad] ERROR: Memory allocation failure.\n"); \
-+ return -1; \
-+ } \
- } \
- _c[_n++] = (_v); \
- } while (0)
-@@ -109,15 +113,15 @@
- return length != s->l;
- }
-
--int load_unpadded_ref(faidx_t *fai, char *ref_name, int ref_len, kstring_t *seq)
-+int load_unpadded_ref(faidx_t *fai, const char *ref_name, hts_pos_t ref_len, kstring_t *seq)
- {
- char base;
- char *fai_ref = 0;
-- int fai_ref_len = 0, k;
-+ hts_pos_t fai_ref_len = 0, k;
-
-- fai_ref = fai_fetch(fai, ref_name, &fai_ref_len);
-+ fai_ref = fai_fetch64(fai, ref_name, &fai_ref_len);
- if (fai_ref_len != ref_len) {
-- fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence %s length %i, expected %i\n", ref_name, fai_ref_len, ref_len);
-+ fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence %s length %"PRIhts_pos", expected %"PRIhts_pos"\n", ref_name, fai_ref_len, ref_len);
- free(fai_ref);
- return -1;
- }
-@@ -143,16 +147,16 @@
- return 0;
- }
-
--int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len)
-+hts_pos_t get_unpadded_len(faidx_t *fai, const char *ref_name, hts_pos_t padded_len)
- {
- char base;
- char *fai_ref = 0;
-- int fai_ref_len = 0, k;
-- int bases=0, gaps=0;
-+ hts_pos_t fai_ref_len = 0, k;
-+ hts_pos_t bases=0, gaps=0;
-
-- fai_ref = fai_fetch(fai, ref_name, &fai_ref_len);
-+ fai_ref = fai_fetch64(fai, ref_name, &fai_ref_len);
- if (fai_ref_len != padded_len) {
-- fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len);
-+ fprintf(samtools_stderr, "[depad] ERROR: FASTA sequence '%s' length %"PRIhts_pos", expected %"PRIhts_pos"\n", ref_name, fai_ref_len, padded_len);
- free(fai_ref);
- return -1;
- }
-@@ -187,7 +191,7 @@
- return posmap;
- }
-
--int bam_pad2unpad(samFile *in, samFile *out, bam_hdr_t *h, faidx_t *fai)
-+int bam_pad2unpad(samFile *in, samFile *out, sam_hdr_t *h, faidx_t *fai)
- {
- bam1_t *b = 0;
- kstring_t r, q;
-@@ -209,21 +213,21 @@
-
- uint32_t *cigar = bam_get_cigar(b);
- n2 = 0;
-- if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), h->target_name[b->core.tid]) == 0) {
-+ if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam_get_qname(b), sam_hdr_tid2name(h, b->core.tid)) == 0) {
- // fprintf(samtools_stderr, "[depad] Found embedded reference '%s'\n", bam_get_qname(b));
- r_tid = b->core.tid;
- if (0!=unpad_seq(b, &r)) {
- fprintf(samtools_stderr, "[depad] ERROR: Problem parsing SEQ and/or CIGAR in reference %s\n", bam_get_qname(b));
- return -1;
- };
-- if (h->target_len[r_tid] != r.l) {
-- fprintf(samtools_stderr, "[depad] ERROR: (Padded) length of '%s' is %u in BAM header, but %llu in embedded reference\n", bam_get_qname(b), h->target_len[r_tid], (unsigned long long)(r.l));
-+ if (sam_hdr_tid2len(h, r_tid) != r.l) {
-+ fprintf(samtools_stderr, "[depad] ERROR: (Padded) length of '%s' is %"PRId64" in BAM header, but %zu in embedded reference\n", bam_get_qname(b), (int64_t) sam_hdr_tid2len(h, r_tid), r.l);
- return -1;
- }
- if (fai) {
- // Check the embedded reference matches the FASTA file
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &q)) {
-- fprintf(samtools_stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &q)) {
-+ fprintf(samtools_stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- assert(r.l == q.l);
-@@ -232,7 +236,7 @@
- if (r.s[i] != q.s[i]) {
- // Show gaps as ASCII 45
- fprintf(samtools_stderr, "[depad] ERROR: Embedded sequence and reference FASTA don't match for %s base %i, '%c' vs '%c'\n",
-- h->target_name[b->core.tid], i+1,
-+ sam_hdr_tid2name(h, b->core.tid), i+1,
- r.s[i] ? seq_nt16_str[(int)r.s[i]] : 45,
- q.s[i] ? seq_nt16_str[(int)q.s[i]] : 45);
- return -1;
-@@ -251,15 +255,15 @@
- ; // good case, reference available
- //fprintf(samtools_stderr, "[depad] Have ref '%s' for read '%s'\n", h->target_name[b->core.tid], bam_get_qname(b));
- } else if (fai) {
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) {
-- fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &r)) {
-+ fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
- r_tid = b->core.tid;
- // fprintf(samtools_stderr, "[depad] Loaded %s from FASTA file\n", h->target_name[b->core.tid]);
- } else {
-- fprintf(samtools_stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", h->target_name[b->core.tid]);
-+ fprintf(samtools_stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- if (0!=unpad_seq(b, &q)) {
-@@ -345,19 +349,19 @@
- /* Nasty case, Must load alternative posmap */
- // fprintf(samtools_stderr, "[depad] Loading reference '%s' temporarily\n", h->target_name[b->core.mtid]);
- if (!fai) {
-- fprintf(samtools_stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]);
-+ fprintf(samtools_stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", sam_hdr_tid2name(h, b->core.mtid));
- return -1;
- }
- /* Temporarily load the other reference sequence */
-- if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) {
-- fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.mtid), sam_hdr_tid2len(h, b->core.mtid), &r)) {
-+ fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.mtid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
- b->core.mpos = posmap[b->core.mpos];
- /* Restore the reference and posmap*/
-- if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) {
-- fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]);
-+ if (load_unpadded_ref(fai, sam_hdr_tid2name(h, b->core.tid), sam_hdr_tid2len(h, b->core.tid), &r)) {
-+ fprintf(samtools_stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", sam_hdr_tid2name(h, b->core.tid));
- return -1;
- }
- posmap = update_posmap(posmap, r);
-@@ -376,126 +380,47 @@
- ret = 1;
- }
- free(r.s); free(q.s); free(posmap);
-+ free(cigar2);
- bam_destroy1(b);
- return ret;
- }
-
--bam_hdr_t * fix_header(bam_hdr_t *old, faidx_t *fai)
-+sam_hdr_t * fix_header(sam_hdr_t *old, faidx_t *fai)
- {
-- int i = 0, unpadded_len = 0;
-- bam_hdr_t *header = 0 ;
-- unsigned short ln_found;
--
-- header = bam_hdr_dup(old);
-- for (i = 0; i < old->n_targets; ++i) {
-- unpadded_len = get_unpadded_len(fai, old->target_name[i], old->target_len[i]);
-+ int i = 0, ret = 0;
-+ hts_pos_t unpadded_len = 0;
-+ sam_hdr_t *header = sam_hdr_dup(old);
-+ if (!header)
-+ return NULL;
-+
-+ int nref = sam_hdr_nref(old);
-+ char len_buf[64];
-+
-+ for (i = 0; i < nref; ++i) {
-+ unpadded_len = get_unpadded_len(fai, sam_hdr_tid2name(old, i), sam_hdr_tid2len(old, i));
- if (unpadded_len < 0) {
-- fprintf(samtools_stderr, "[depad] ERROR getting unpadded length of '%s', padded length %i\n", old->target_name[i], old->target_len[i]);
-+ fprintf(samtools_stderr, "[depad] ERROR getting unpadded length of '%s', padded length %"PRIhts_pos"\n", sam_hdr_tid2name(old, i), (hts_pos_t) sam_hdr_tid2len(old, i));
-+ } else if (unpadded_len > sam_hdr_tid2len(old, i)) {
-+ fprintf(samtools_stderr, "[depad] New unpadded length of '%s' is larger than the padded length (%"PRIhts_pos" > %"PRIhts_pos")\n",
-+ sam_hdr_tid2name(old, i), unpadded_len,
-+ (hts_pos_t) sam_hdr_tid2len(old, i));
-+ ret = 1;
- } else {
-- header->target_len[i] = unpadded_len;
-+ sprintf(len_buf, "%"PRIhts_pos"", unpadded_len);
-+ if ((ret |= sam_hdr_update_line(header, "SQ", "SN", sam_hdr_tid2name(header, i), "LN", len_buf, NULL)))
-+ fprintf(samtools_stderr, "[depad] Error updating length of '%s' from %"PRIhts_pos" to %"PRIhts_pos"\n",
-+ sam_hdr_tid2name(header, i),
-+ (hts_pos_t) sam_hdr_tid2len(header, i),
-+ unpadded_len);
- //fprintf(samtools_stderr, "[depad] Recalculating '%s' length %i -> %i\n", old->target_name[i], old->target_len[i], header->target_len[i]);
- }
- }
-- /* Duplicating the header allocated new buffer for header string */
-- /* After modifying the @SQ lines it will only get smaller, since */
-- /* the LN entries will be the same or shorter, and we'll remove */
-- /* any MD entries (MD5 checksums). */
-- assert(strlen(old->text) == strlen(header->text));
-- assert (0==strcmp(old->text, header->text));
-- const char *text;
-- text = old->text;
-- header->text[0] = '\0'; /* Resuse the allocated buffer */
-- char * newtext = header->text;
-- char * end=NULL;
-- while (text[0]=='@') {
-- end = strchr(text, '\n');
-- assert(end != 0);
-- if (text[1]=='S' && text[2]=='Q' && text[3]=='\t') {
-- const char *cp = text+3;
-- char *name = strstr(text, "\tSN:");
-- char *name_end;
-- if (!name) {
-- fprintf(samtools_stderr, "Unable to find SN: header field\n");
-- return NULL;
-- }
-- name += 4;
-- for (name_end = name; name_end != end && *name_end != '\t'; name_end++);
-- strcat(newtext, "@SQ");
-- ln_found = 0;
--
-- /* Parse the @SQ lines */
-- while (cp != end) {
-- if (!ln_found && end-cp >= 2 && strncmp(cp, "LN", 2) == 0) {
-- // Rewrite the length
-- char len_buf[100];
-- int tid;
-- unsigned int old_length, new_length;
-- const char *old_cp = cp;
--
-- ln_found = 1;
--
-- while (cp != end && *cp++ != '\t');
-- old_length = (int)(cp - old_cp);
--
-- for (tid = 0; tid < header->n_targets; tid++) {
-- // may want to hash this, but new header API incoming.
-- if (strncmp(name, header->target_name[tid], name_end - name) == 0) {
-- new_length = sprintf(len_buf, "LN:%d", header->target_len[tid]);
-- if (new_length <= old_length) {
-- strcat(newtext, len_buf);
-- }
-- else {
-- fprintf(samtools_stderr, "LN value of the reference is larger than the original!\n");
-- exit(1);
-- }
-- break;
-- }
-- }
-
-- if (cp != end)
-- strcat(newtext, "\t");
-- } else if (end-cp >= 2 &&
-- ((ln_found && strncmp(cp, "LN", 2) == 0) ||
-- strncmp(cp, "M5", 2) == 0 ||
-- strncmp(cp, "UR", 2) == 0))
-- {
-- // skip secondary LNs
-- // MD5 changed during depadding; ditch it.
-- // URLs are also invalid.
-- while (cp != end && *cp++ != '\t');
-- } else {
-- // Otherwise copy this sub-field verbatim
-- const char *cp_start = cp;
-- while (cp != end && *cp++ != '\t');
-- strncat(newtext, cp_start, cp-cp_start);
-- }
-- }
--
-- // Add newline, replacing trailing '\t' if last on line was the LN:
-- char *text_end = newtext + strlen(newtext);
-- if (text_end[-1] == '\t')
-- text_end[-1] = '\n';
-- else
-- *text_end++ = '\n', *text_end = '\0';
-- } else {
-- /* Copy this line to the new header */
-- strncat(newtext, text, end - text + 1);
-- }
-- text = end + 1;
-+ if (ret) {
-+ sam_hdr_destroy(header);
-+ return NULL;
- }
-- assert (text[0]=='\0');
-- /* Check we didn't overflow the buffer */
-- assert (strlen(header->text) <= strlen(old->text));
-- if (strlen(header->text) < header->l_text) {
-- //fprintf(samtools_stderr, "[depad] Reallocating header buffer\n");
-- assert (newtext == header->text);
-- newtext = malloc(strlen(header->text) + 1);
-- strcpy(newtext, header->text);
-- free(header->text);
-- header->text = newtext;
-- header->l_text = strlen(newtext);
-- }
-- //fprintf(samtools_stderr, "[depad] Here is the new header (pending @SQ lines),\n\n%s\n(end)\n", header->text);
-+
- return header;
- }
-
-@@ -504,15 +429,17 @@
- int main_pad2unpad(int argc, char *argv[])
- {
- samFile *in = 0, *out = 0;
-- bam_hdr_t *h = 0, *h_fix = 0;
-+ sam_hdr_t *h = 0, *h_fix = 0;
- faidx_t *fai = 0;
-- int c, compress_level = -1, is_long_help = 0;
-- char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0;
-+ int c, compress_level = -1, is_long_help = 0, no_pg = 0;
-+ char in_mode[5], out_mode[6], *fn_out = 0, *fn_list = 0, *fn_out_idx = NULL;
- int ret=0;
-+ char *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 'T', '-'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -534,6 +461,7 @@
- if (ga.out.format == unknown_format)
- hts_parse_format(&ga.out, "bam");
- break;
-+ case 1: no_pg = 1; break;
- case '?': is_long_help = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- fprintf(samtools_stderr, "[bam_fillmd] unrecognized option '-%c'\n\n", c);
-@@ -571,7 +499,11 @@
- goto depad_end;
- }
- if (fai) {
-- h_fix = fix_header(h, fai);
-+ if (!(h_fix = fix_header(h, fai))){
-+ fprintf(samtools_stderr, "[depad] failed to fix the header from\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
- } else {
- fprintf(samtools_stderr, "[depad] Warning - reference lengths will not be corrected without FASTA reference\n");
- h_fix = h;
-@@ -589,25 +521,61 @@
- if (ga.out.format == cram)
- hts_set_opt(out, CRAM_OPT_NO_REF, 1);
-
-+ if (!no_pg) {
-+ if(!(arg_list = stringify_argv(argc+1, argv-1))) {
-+ fprintf(samtools_stderr, "[depad] failed to create arg_list\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
-+
-+ if (sam_hdr_add_pg(h_fix, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ fprintf(samtools_stderr, "[depad] failed to add PG line to header\n");
-+ ret = 1;
-+ goto depad_end;
-+ }
-+ }
-+
- if (sam_hdr_write(out, h_fix) != 0) {
- fprintf(samtools_stderr, "[depad] failed to write header.\n");
- ret = 1;
- goto depad_end;
- }
-+ if (ga.write_index) {
-+ if (!(fn_out_idx = auto_index(out, fn_out, h_fix))) {
-+ ret = 1;
-+ goto depad_end;
-+ }
-+ }
-
- // Do the depad
- if (bam_pad2unpad(in, out, h, fai) != 0) ret = 1;
-
-+ if (ga.write_index) {
-+ if (sam_idx_save(out) < 0) {
-+ print_error_errno("depad", "writing index failed");
-+ ret = 1;
-+ }
-+ }
-+
- depad_end:
- // close files, free and return
-+ free(arg_list);
- if (fai) fai_destroy(fai);
-- if (h) bam_hdr_destroy(h);
-+ if (h) sam_hdr_destroy(h);
-+ if (h_fix && h_fix != h) sam_hdr_destroy(h_fix);
- if (in) sam_close(in);
- if (out && sam_close(out) < 0) {
- fprintf(samtools_stderr, "[depad] error on closing output file.\n");
- ret = 1;
- }
- free(fn_list); free(fn_out);
-+ if (fn_out_idx)
-+ free(fn_out_idx);
-+ sam_global_args_free(&ga);
- return ret;
- }
-
-@@ -623,8 +591,9 @@
- fprintf(samtools_stderr, " -T, --reference FILE\n");
- fprintf(samtools_stderr, " Padded reference sequence file [null]\n");
- fprintf(samtools_stderr, " -o FILE Output file name [samtools_stdout]\n");
-+ fprintf(samtools_stderr, " --no-PG do not add a PG line\n");
- fprintf(samtools_stderr, " -? Longer help\n");
-- sam_global_opt_help(samtools_stderr, "-...--");
-+ sam_global_opt_help(samtools_stderr, "-...--..");
-
- if (is_long_help)
- fprintf(samtools_stderr,
---- python-pysam.orig/samtools/phase.c
-+++ python-pysam/samtools/phase.c
-@@ -1,7 +1,7 @@
- /* phase.c -- phase subcommand.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2013-2016 Genome Research Ltd.
-+ Copyright (C) 2013-2016, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -52,15 +52,15 @@
-
- typedef struct {
- // configurations, initialized in the main function
-- int flag, k, min_baseQ, min_varLOD, max_depth;
-+ int flag, k, min_baseQ, min_varLOD, max_depth, no_pg;
- // other global variables
- int vpos_shift;
- samFile* fp;
-- bam_hdr_t* fp_hdr;
-- char *pre;
-+ sam_hdr_t* fp_hdr;
-+ char *pre, *arg_list;
- char *out_name[3];
- samFile* out[3];
-- bam_hdr_t* out_hdr[3];
-+ sam_hdr_t* out_hdr[3];
- // alignment queue
- int n, m;
- bam1_t **b;
-@@ -503,7 +503,7 @@
- return ret;
- }
-
--static khash_t(set64) *loadpos(const char *fn, bam_hdr_t *h)
-+static khash_t(set64) *loadpos(const char *fn, sam_hdr_t *h)
- {
- gzFile fp;
- kstream_t *ks;
-@@ -511,9 +511,15 @@
- kstring_t *str;
- khash_t(set64) *hash;
-
-+ fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r");
-+ if (fp == NULL) {
-+ print_error_errno("phase", "Couldn't open site file '%s'", fn);
-+ return NULL;
-+ }
-+
- hash = kh_init(set64);
- str = calloc(1, sizeof(kstring_t));
-- fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r");
-+
- ks = ks_init(fp);
- while (ks_getuntil(ks, 0, str, &dret) >= 0) {
- int tid = bam_name2id(h, str->s);
-@@ -557,7 +563,15 @@
- return -1;
- }
-
-- g->out_hdr[c] = bam_hdr_dup(g->fp_hdr);
-+ g->out_hdr[c] = sam_hdr_dup(g->fp_hdr);
-+ if (!g->no_pg && sam_hdr_add_pg(g->out_hdr[c], "samtools",
-+ "VN", samtools_version(),
-+ g->arg_list ? "CL": NULL,
-+ g->arg_list ? g->arg_list : NULL,
-+ NULL)) {
-+ print_error("phase", "failed to add PG line to header");
-+ return -1;
-+ }
- if (sam_hdr_write(g->out[c], g->out_hdr[c]) < 0) {
- print_error_errno("phase", "Failed to write header for '%s'", g->out_name[c]);
- return -1;
-@@ -582,6 +596,7 @@
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -601,6 +616,7 @@
- case 'A': g.flag |= FLAG_DROP_AMBI; break;
- case 'b': g.pre = strdup(optarg); break;
- case 'l': fn_list = strdup(optarg); break;
-+ case 1: g.no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': usage=1; break;
-@@ -618,10 +634,11 @@
- // fprintf(stderr, " -l FILE list of sites to phase [null]\n");
- fprintf(stderr, " -F do not attempt to fix chimeras\n");
- fprintf(stderr, " -A drop reads with ambiguous phase\n");
-+ fprintf(stderr, " --no-PG do not add a PG line\n");
- // fprintf(stderr, " -e do not discover SNPs (effective with -l)\n");
- fprintf(stderr, "\n");
-
-- sam_global_opt_help(stderr, "-....-");
-+ sam_global_opt_help(stderr, "-....--.");
-
- return 1;
- }
-@@ -636,8 +653,13 @@
- __func__, argv[optind]);
- return 1;
- }
-+ if (!g.no_pg && !(g.arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("phase", "failed to create arg_list");
-+ return 1;
-+ }
- if (fn_list) { // read the list of sites to phase
- set = loadpos(fn_list, g.fp_hdr);
-+ if (set == NULL) return 1;
- free(fn_list);
- } else g.flag &= ~FLAG_LIST_EXCL;
- if (g.pre) { // open BAMs to write
-@@ -677,7 +699,7 @@
- g.vpos_shift = 0;
- if (lasttid >= 0) {
- seqs = shrink_hash(seqs);
-- if (phase(&g, g.fp_hdr->target_name[lasttid],
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, lasttid),
- vpos, cns, seqs) < 0) {
- return 1;
- }
-@@ -749,7 +771,7 @@
- }
- if (dophase) {
- seqs = shrink_hash(seqs);
-- if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) {
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, tid), vpos, cns, seqs) < 0) {
- return 1;
- }
- update_vpos(vpos, seqs);
-@@ -759,11 +781,11 @@
- ++vpos;
- }
- if (tid >= 0) {
-- if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) {
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, tid), vpos, cns, seqs) < 0) {
- return 1;
- }
- }
-- bam_hdr_destroy(g.fp_hdr);
-+ sam_hdr_destroy(g.fp_hdr);
- bam_plp_destroy(iter);
- sam_close(g.fp);
- kh_destroy(64, seqs);
-@@ -779,12 +801,13 @@
- __func__, g.out_name[c]);
- res = 1;
- }
-- bam_hdr_destroy(g.out_hdr[c]);
-+ sam_hdr_destroy(g.out_hdr[c]);
- free(g.out_name[c]);
- }
- free(g.pre); free(g.b);
- if (res) return 1;
- }
-+ free(g.arg_list);
- sam_global_args_free(&ga);
- return 0;
- }
---- python-pysam.orig/samtools/phase.c.pysam.c
-+++ python-pysam/samtools/phase.c.pysam.c
-@@ -3,7 +3,7 @@
- /* phase.c -- phase subcommand.
-
- Copyright (C) 2011 Broad Institute.
-- Copyright (C) 2013-2016 Genome Research Ltd.
-+ Copyright (C) 2013-2016, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -54,15 +54,15 @@
-
- typedef struct {
- // configurations, initialized in the main function
-- int flag, k, min_baseQ, min_varLOD, max_depth;
-+ int flag, k, min_baseQ, min_varLOD, max_depth, no_pg;
- // other global variables
- int vpos_shift;
- samFile* fp;
-- bam_hdr_t* fp_hdr;
-- char *pre;
-+ sam_hdr_t* fp_hdr;
-+ char *pre, *arg_list;
- char *out_name[3];
- samFile* out[3];
-- bam_hdr_t* out_hdr[3];
-+ sam_hdr_t* out_hdr[3];
- // alignment queue
- int n, m;
- bam1_t **b;
-@@ -505,7 +505,7 @@
- return ret;
- }
-
--static khash_t(set64) *loadpos(const char *fn, bam_hdr_t *h)
-+static khash_t(set64) *loadpos(const char *fn, sam_hdr_t *h)
- {
- gzFile fp;
- kstream_t *ks;
-@@ -513,9 +513,15 @@
- kstring_t *str;
- khash_t(set64) *hash;
-
-+ fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r");
-+ if (fp == NULL) {
-+ print_error_errno("phase", "Couldn't open site file '%s'", fn);
-+ return NULL;
-+ }
-+
- hash = kh_init(set64);
- str = calloc(1, sizeof(kstring_t));
-- fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r");
-+
- ks = ks_init(fp);
- while (ks_getuntil(ks, 0, str, &dret) >= 0) {
- int tid = bam_name2id(h, str->s);
-@@ -559,7 +565,15 @@
- return -1;
- }
-
-- g->out_hdr[c] = bam_hdr_dup(g->fp_hdr);
-+ g->out_hdr[c] = sam_hdr_dup(g->fp_hdr);
-+ if (!g->no_pg && sam_hdr_add_pg(g->out_hdr[c], "samtools",
-+ "VN", samtools_version(),
-+ g->arg_list ? "CL": NULL,
-+ g->arg_list ? g->arg_list : NULL,
-+ NULL)) {
-+ print_error("phase", "failed to add PG line to header");
-+ return -1;
-+ }
- if (sam_hdr_write(g->out[c], g->out_hdr[c]) < 0) {
- print_error_errno("phase", "Failed to write header for '%s'", g->out_name[c]);
- return -1;
-@@ -584,6 +598,7 @@
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 0, 0, 0, '-'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -603,6 +618,7 @@
- case 'A': g.flag |= FLAG_DROP_AMBI; break;
- case 'b': g.pre = strdup(optarg); break;
- case 'l': fn_list = strdup(optarg); break;
-+ case 1: g.no_pg = 1; break;
- default: if (parse_sam_global_opt(c, optarg, lopts, &ga) == 0) break;
- /* else fall-through */
- case '?': usage=1; break;
-@@ -620,10 +636,11 @@
- // fprintf(samtools_stderr, " -l FILE list of sites to phase [null]\n");
- fprintf(samtools_stderr, " -F do not attempt to fix chimeras\n");
- fprintf(samtools_stderr, " -A drop reads with ambiguous phase\n");
-+ fprintf(samtools_stderr, " --no-PG do not add a PG line\n");
- // fprintf(samtools_stderr, " -e do not discover SNPs (effective with -l)\n");
- fprintf(samtools_stderr, "\n");
-
-- sam_global_opt_help(samtools_stderr, "-....-");
-+ sam_global_opt_help(samtools_stderr, "-....--.");
-
- return 1;
- }
-@@ -638,8 +655,13 @@
- __func__, argv[optind]);
- return 1;
- }
-+ if (!g.no_pg && !(g.arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("phase", "failed to create arg_list");
-+ return 1;
-+ }
- if (fn_list) { // read the list of sites to phase
- set = loadpos(fn_list, g.fp_hdr);
-+ if (set == NULL) return 1;
- free(fn_list);
- } else g.flag &= ~FLAG_LIST_EXCL;
- if (g.pre) { // open BAMs to write
-@@ -679,7 +701,7 @@
- g.vpos_shift = 0;
- if (lasttid >= 0) {
- seqs = shrink_hash(seqs);
-- if (phase(&g, g.fp_hdr->target_name[lasttid],
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, lasttid),
- vpos, cns, seqs) < 0) {
- return 1;
- }
-@@ -751,7 +773,7 @@
- }
- if (dophase) {
- seqs = shrink_hash(seqs);
-- if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) {
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, tid), vpos, cns, seqs) < 0) {
- return 1;
- }
- update_vpos(vpos, seqs);
-@@ -761,11 +783,11 @@
- ++vpos;
- }
- if (tid >= 0) {
-- if (phase(&g, g.fp_hdr->target_name[tid], vpos, cns, seqs) < 0) {
-+ if (phase(&g, sam_hdr_tid2name(g.fp_hdr, tid), vpos, cns, seqs) < 0) {
- return 1;
- }
- }
-- bam_hdr_destroy(g.fp_hdr);
-+ sam_hdr_destroy(g.fp_hdr);
- bam_plp_destroy(iter);
- sam_close(g.fp);
- kh_destroy(64, seqs);
-@@ -781,12 +803,13 @@
- __func__, g.out_name[c]);
- res = 1;
- }
-- bam_hdr_destroy(g.out_hdr[c]);
-+ sam_hdr_destroy(g.out_hdr[c]);
- free(g.out_name[c]);
- }
- free(g.pre); free(g.b);
- if (res) return 1;
- }
-+ free(g.arg_list);
- sam_global_args_free(&ga);
- return 0;
- }
---- python-pysam.orig/samtools/sam.c
-+++ python-pysam/samtools/sam.c
-@@ -1,6 +1,6 @@
- /* sam.c -- format-neutral SAM/BAM API.
-
-- Copyright (C) 2009, 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2012-2016 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -65,12 +65,12 @@
- return NULL;
- }
- fp->is_write = 0;
-- if (fp->header->n_targets == 0 && bam_verbose >= 1)
-+ if (sam_hdr_nref(fp->header) == 0 && bam_verbose >= 1)
- fprintf(stderr, "[samopen] no @SQ lines in the header.\n");
- }
- else {
- enum htsExactFormat fmt = hts_get_format(fp->file)->format;
-- fp->header = (bam_hdr_t *)aux; // For writing, we won't free it
-+ fp->header = (sam_hdr_t *)aux; // For writing, we won't free it
- fp->is_write = 1;
- if (!(fmt == text_format || fmt == sam) || strchr(mode, 'h')) {
- if (sam_hdr_write(fp->file, fp->header) < 0) {
-@@ -89,7 +89,7 @@
- void samclose(samfile_t *fp)
- {
- if (fp) {
-- if (!fp->is_write && fp->header) bam_hdr_destroy(fp->header);
-+ if (!fp->is_write && fp->header) sam_hdr_destroy(fp->header);
- sam_close(fp->file);
- free(fp);
- }
---- python-pysam.orig/samtools/sam.c.pysam.c
-+++ python-pysam/samtools/sam.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* sam.c -- format-neutral SAM/BAM API.
-
-- Copyright (C) 2009, 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2012-2016 Genome Research Ltd.
- Portions copyright (C) 2011 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -67,12 +67,12 @@
- return NULL;
- }
- fp->is_write = 0;
-- if (fp->header->n_targets == 0 && bam_verbose >= 1)
-+ if (sam_hdr_nref(fp->header) == 0 && bam_verbose >= 1)
- fprintf(samtools_stderr, "[samopen] no @SQ lines in the header.\n");
- }
- else {
- enum htsExactFormat fmt = hts_get_format(fp->file)->format;
-- fp->header = (bam_hdr_t *)aux; // For writing, we won't free it
-+ fp->header = (sam_hdr_t *)aux; // For writing, we won't free it
- fp->is_write = 1;
- if (!(fmt == text_format || fmt == sam) || strchr(mode, 'h')) {
- if (sam_hdr_write(fp->file, fp->header) < 0) {
-@@ -91,7 +91,7 @@
- void samclose(samfile_t *fp)
- {
- if (fp) {
-- if (!fp->is_write && fp->header) bam_hdr_destroy(fp->header);
-+ if (!fp->is_write && fp->header) sam_hdr_destroy(fp->header);
- sam_close(fp->file);
- free(fp);
- }
---- python-pysam.orig/samtools/sam.h
-+++ python-pysam/samtools/sam.h
-@@ -1,6 +1,6 @@
- /* sam.h -- format-neutral SAM/BAM API.
-
-- Copyright (C) 2009, 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2009, 2013-2015, 2019 Genome Research Ltd.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-
-@@ -49,7 +49,7 @@
- typedef struct {
- samFile *file;
- struct { BGZF *bam; } x; // Hack so that fp->x.bam still works
-- bam_hdr_t *header;
-+ sam_hdr_t *header;
- unsigned short is_write:1;
- } samfile_t;
-
-@@ -103,14 +103,20 @@
- static inline int samwrite(samfile_t *fp, const bam1_t *b) { return sam_write1(fp->file, fp->header, b); }
-
- /*!
-- @abstract Load BAM/CRAM index for use with samfetch()
-+ @abstract Load BAM/CRAM index for use with samfetch() with supporting the use of index file
- @param fp file handler
- @param fn name of the BAM or CRAM file (NOT the index file)
-+ @param fnidx name of the index file
- @return pointer to the index structure
- */
-- static inline bam_index_t *samtools_sam_index_load(samfile_t *fp, const char *fn) { return sam_index_load(fp->file, fn); }
-+ static inline bam_index_t *samtools_sam_index_load(samfile_t *fp, const char *fn, const char *fnidx) {
-+ if (fnidx != NULL) {
-+ return sam_index_load2(fp->file, fn, fnidx);
-+ }
-+ return sam_index_load(fp->file, fn);
-+ }
- #undef sam_index_load
-- #define sam_index_load(fp,fn) (samtools_sam_index_load((fp), (fn)))
-+ #define sam_index_load(fp,fn,fnidx) (samtools_sam_index_load((fp), (fn), (fnidx)))
-
- /*!
- @abstract Retrieve the alignments overlapping the specified region.
---- python-pysam.orig/samtools/sam_header.c
-+++ /dev/null
-@@ -1,836 +0,0 @@
--/* sam_header.c -- basic SAM/BAM header API.
--
-- Copyright (C) 2009-2013 Genome Research Ltd.
--
-- Author: Petr Danecek <pd3@sanger.ac.uk>
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE. */
--
--#include <config.h>
--
--#include "sam_header.h"
--#include <stdio.h>
--#include <string.h>
--#include <ctype.h>
--#include <stdlib.h>
--#include <stdarg.h>
--
--#include "htslib/khash.h"
--KHASH_MAP_INIT_STR(str, const char *)
--
--struct _HeaderList
--{
-- struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only.
-- struct _HeaderList *next;
-- void *data;
--};
--typedef struct _HeaderList list_t;
--typedef list_t HeaderDict;
--
--typedef struct
--{
-- char key[2];
-- char *value;
--}
--HeaderTag;
--
--typedef struct
--{
-- char type[2];
-- list_t *tags;
--}
--HeaderLine;
--
--const char *o_hd_tags[] = {"SO","GO",NULL};
--const char *r_hd_tags[] = {"VN",NULL};
--
--const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL};
--const char *r_sq_tags[] = {"SN","LN",NULL};
--const char *u_sq_tags[] = {"SN",NULL};
--
--const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL};
--const char *r_rg_tags[] = {"ID",NULL};
--const char *u_rg_tags[] = {"ID",NULL};
--
--const char *o_pg_tags[] = {"VN","CL",NULL};
--const char *r_pg_tags[] = {"ID",NULL};
--
--const char *types[] = {"HD","SQ","RG","PG","CO",NULL};
--const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL};
--const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL};
--const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL};
--
--
--static void debug(const char *format, ...)
--{
-- va_list ap;
-- va_start(ap, format);
-- vfprintf(stderr, format, ap);
-- va_end(ap);
--}
--
--#if 0
--// Replaced by list_append_to_end
--static list_t *list_prepend(list_t *root, void *data)
--{
-- list_t *l = malloc(sizeof(list_t));
-- l->next = root;
-- l->data = data;
-- return l;
--}
--#endif
--
--// Relies on the root->last being correct. Do not use with the other list_*
--// routines unless they are fixed to modify root->last as well.
--static list_t *list_append_to_end(list_t *root, void *data)
--{
-- list_t *l = malloc(sizeof(list_t));
-- l->last = l;
-- l->next = NULL;
-- l->data = data;
--
-- if ( !root )
-- return l;
--
-- root->last->next = l;
-- root->last = l;
-- return root;
--}
--
--static list_t *list_append(list_t *root, void *data)
--{
-- list_t *l = root;
-- while (l && l->next)
-- l = l->next;
-- if ( l )
-- {
-- l->next = malloc(sizeof(list_t));
-- l = l->next;
-- }
-- else
-- {
-- l = malloc(sizeof(list_t));
-- root = l;
-- }
-- l->data = data;
-- l->next = NULL;
-- return root;
--}
--
--static void list_free(list_t *root)
--{
-- list_t *l = root;
-- while (root)
-- {
-- l = root;
-- root = root->next;
-- free(l);
-- }
--}
--
--
--
--// Look for a tag "XY" in a predefined const char *[] array.
--static int tag_exists(const char *tag, const char **tags)
--{
-- int itag=0;
-- if ( !tags ) return -1;
-- while ( tags[itag] )
-- {
-- if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag;
-- itag++;
-- }
-- return -1;
--}
--
--
--
--// Mimics the behaviour of getline, except it returns pointer to the next chunk of the text
--// or NULL if everything has been read. The lineptr should be freed by the caller. The
--// newline character is stripped.
--static const char *nextline(char **lineptr, size_t *n, const char *text)
--{
-- int len;
-- const char *to = text;
--
-- if ( !*to ) return NULL;
--
-- while ( *to && *to!='\n' && *to!='\r' ) to++;
-- len = to - text + 1;
--
-- if ( *to )
-- {
-- // Advance the pointer for the next call
-- if ( *to=='\n' ) to++;
-- else if ( *to=='\r' && *(to+1)=='\n' ) to+=2;
-- }
-- if ( !len )
-- return to;
--
-- if ( !*lineptr )
-- {
-- *lineptr = malloc(len);
-- *n = len;
-- }
-- else if ( *n<len )
-- {
-- *lineptr = realloc(*lineptr, len);
-- *n = len;
-- }
-- if ( !*lineptr ) {
-- debug("[nextline] Insufficient memory!\n");
-- return 0;
-- }
--
-- memcpy(*lineptr,text,len);
-- (*lineptr)[len-1] = 0;
--
-- return to;
--}
--
--// name points to "XY", value_from points to the first character of the value string and
--// value_to points to the last character of the value string.
--static HeaderTag *new_tag(const char *name, const char *value_from, const char *value_to)
--{
-- HeaderTag *tag = malloc(sizeof(HeaderTag));
-- int len = value_to-value_from+1;
--
-- tag->key[0] = name[0];
-- tag->key[1] = name[1];
-- tag->value = malloc(len+1);
-- memcpy(tag->value,value_from,len+1);
-- tag->value[len] = 0;
-- return tag;
--}
--
--static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key)
--{
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag;
-- tags = tags->next;
-- }
-- return NULL;
--}
--
--
--// Return codes:
--// 0 .. different types or unique tags differ or conflicting tags, cannot be merged
--// 1 .. all tags identical -> no need to merge, drop one
--// 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated
--// 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line
--static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2)
--{
-- HeaderTag *t1, *t2;
--
-- if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] )
-- return 0;
--
-- int itype = tag_exists(hline1->type,types);
-- if ( itype==-1 ) {
-- debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]);
-- return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code
-- }
--
-- if ( unique_tags[itype] )
-- {
-- t1 = header_line_has_tag(hline1,unique_tags[itype][0]);
-- t2 = header_line_has_tag(hline2,unique_tags[itype][0]);
-- if ( !t1 || !t2 ) // this should never happen, the unique tags are required
-- return 2;
--
-- if ( strcmp(t1->value,t2->value) )
-- return 0; // the unique tags differ, cannot be merged
-- }
-- if ( !required_tags[itype] && !optional_tags[itype] )
-- {
-- t1 = hline1->tags->data;
-- t2 = hline2->tags->data;
-- if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments
-- return 0;
-- }
--
-- int missing=0, itag=0;
-- while ( required_tags[itype] && required_tags[itype][itag] )
-- {
-- t1 = header_line_has_tag(hline1,required_tags[itype][itag]);
-- t2 = header_line_has_tag(hline2,required_tags[itype][itag]);
-- if ( !t1 && !t2 )
-- return 2; // this should never happen
-- else if ( !t1 || !t2 )
-- missing = 1; // there is some tag missing in one of the hlines
-- else if ( strcmp(t1->value,t2->value) )
-- {
-- if ( unique_tags[itype] )
-- return 2; // the lines have a matching unique tag but have a conflicting tag
--
-- return 0; // the lines contain conflicting tags, cannot be merged
-- }
-- itag++;
-- }
-- itag = 0;
-- while ( optional_tags[itype] && optional_tags[itype][itag] )
-- {
-- t1 = header_line_has_tag(hline1,optional_tags[itype][itag]);
-- t2 = header_line_has_tag(hline2,optional_tags[itype][itag]);
-- if ( !t1 && !t2 )
-- {
-- itag++;
-- continue;
-- }
-- if ( !t1 || !t2 )
-- missing = 1; // there is some tag missing in one of the hlines
-- else if ( strcmp(t1->value,t2->value) )
-- {
-- if ( unique_tags[itype] )
-- return 2; // the lines have a matching unique tag but have a conflicting tag
--
-- return 0; // the lines contain conflicting tags, cannot be merged
-- }
-- itag++;
-- }
-- if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged
-- return 1;
--}
--
--
--static HeaderLine *sam_header_line_clone(const HeaderLine *hline)
--{
-- list_t *tags;
-- HeaderLine *out = malloc(sizeof(HeaderLine));
-- out->type[0] = hline->type[0];
-- out->type[1] = hline->type[1];
-- out->tags = NULL;
--
-- tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *old = tags->data;
--
-- HeaderTag *new = malloc(sizeof(HeaderTag));
-- new->key[0] = old->key[0];
-- new->key[1] = old->key[1];
-- new->value = strdup(old->value);
-- out->tags = list_append(out->tags, new);
--
-- tags = tags->next;
-- }
-- return out;
--}
--
--static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline)
--{
-- list_t *tmpl_tags;
--
-- if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] )
-- return 0;
--
-- tmpl_tags = tmpl_hline->tags;
-- while (tmpl_tags)
-- {
-- HeaderTag *tmpl_tag = tmpl_tags->data;
-- HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key);
-- if ( !out_tag )
-- {
-- HeaderTag *tag = malloc(sizeof(HeaderTag));
-- tag->key[0] = tmpl_tag->key[0];
-- tag->key[1] = tmpl_tag->key[1];
-- tag->value = strdup(tmpl_tag->value);
-- out_hline->tags = list_append(out_hline->tags,tag);
-- }
-- tmpl_tags = tmpl_tags->next;
-- }
-- return 1;
--}
--
--
--static HeaderLine *sam_header_line_parse(const char *headerLine)
--{
-- HeaderLine *hline;
-- HeaderTag *tag;
-- const char *from, *to;
-- from = headerLine;
--
-- if ( *from != '@' ) {
-- debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine);
-- return 0;
-- }
-- to = ++from;
--
-- while (*to && *to!='\t') to++;
-- if ( to-from != 2 ) {
-- debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine);
-- return 0;
-- }
--
-- hline = malloc(sizeof(HeaderLine));
-- hline->type[0] = from[0];
-- hline->type[1] = from[1];
-- hline->tags = NULL;
--
-- int itype = tag_exists(hline->type, types);
--
-- from = to;
-- while (*to && *to=='\t') to++;
-- if ( to-from != 1 ) {
-- debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from));
-- free(hline);
-- return 0;
-- }
-- from = to;
-- while (*from)
-- {
-- while (*to && *to!='\t') to++;
--
-- if ( !required_tags[itype] && !optional_tags[itype] )
-- {
-- // CO is a special case, it can contain anything, including tabs
-- if ( *to ) { to++; continue; }
-- tag = new_tag(" ",from,to-1);
-- }
-- else
-- tag = new_tag(from,from+3,to-1);
--
-- if ( header_line_has_tag(hline,tag->key) )
-- debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine);
-- hline->tags = list_append(hline->tags, tag);
--
-- from = to;
-- while (*to && *to=='\t') to++;
-- if ( *to && to-from != 1 ) {
-- debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from));
-- return 0;
-- }
--
-- from = to;
-- }
-- return hline;
--}
--
--
--// Must be of an existing type, all tags must be recognised and all required tags must be present
--static int sam_header_line_validate(HeaderLine *hline)
--{
-- list_t *tags;
-- HeaderTag *tag;
-- int itype, itag;
--
-- // Is the type correct?
-- itype = tag_exists(hline->type, types);
-- if ( itype==-1 )
-- {
-- debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]);
-- return 0;
-- }
--
-- // Has all required tags?
-- itag = 0;
-- while ( required_tags[itype] && required_tags[itype][itag] )
-- {
-- if ( !header_line_has_tag(hline,required_tags[itype][itag]) )
-- {
-- debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1],
-- hline->type[0],hline->type[1]);
-- return 0;
-- }
-- itag++;
-- }
--
-- // Are all tags recognised?
-- tags = hline->tags;
-- while ( tags )
-- {
-- tag = tags->data;
-- if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) )
-- {
-- // Lower case tags are user-defined values.
-- if( !(islower(tag->key[0]) || islower(tag->key[1])) )
-- {
-- // Neither is lower case, but tag was not recognized.
-- debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]);
-- // return 0; // Even unknown tags are allowed - for forward compatibility with new attributes
-- }
-- // else - allow user defined tag
-- }
-- tags = tags->next;
-- }
--
-- return 1;
--}
--
--
--static void print_header_line(FILE *fp, HeaderLine *hline)
--{
-- list_t *tags = hline->tags;
-- HeaderTag *tag;
--
-- fprintf(fp, "@%c%c", hline->type[0],hline->type[1]);
-- while (tags)
-- {
-- tag = tags->data;
--
-- fprintf(fp, "\t");
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- fprintf(fp, "%c%c:", tag->key[0],tag->key[1]);
-- fprintf(fp, "%s", tag->value);
--
-- tags = tags->next;
-- }
-- fprintf(fp,"\n");
--}
--
--
--static void sam_header_line_free(HeaderLine *hline)
--{
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- free(tag->value);
-- free(tag);
-- tags = tags->next;
-- }
-- list_free(hline->tags);
-- free(hline);
--}
--
--void sam_header_free(void *_header)
--{
-- HeaderDict *header = (HeaderDict*)_header;
-- list_t *hlines = header;
-- while (hlines)
-- {
-- sam_header_line_free(hlines->data);
-- hlines = hlines->next;
-- }
-- list_free(header);
--}
--
--HeaderDict *sam_header_clone(const HeaderDict *dict)
--{
-- HeaderDict *out = NULL;
-- while (dict)
-- {
-- HeaderLine *hline = dict->data;
-- out = list_append(out, sam_header_line_clone(hline));
-- dict = dict->next;
-- }
-- return out;
--}
--
--// Returns a newly allocated string
--char *sam_header_write(const void *_header)
--{
-- const HeaderDict *header = (const HeaderDict*)_header;
-- char *out = NULL;
-- int len=0, nout=0;
-- const list_t *hlines;
--
-- // Calculate the length of the string to allocate
-- hlines = header;
-- while (hlines)
-- {
-- len += 4; // @XY and \n
--
-- HeaderLine *hline = hlines->data;
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- len += strlen(tag->value) + 1; // \t
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- len += strlen(tag->value) + 3; // XY:
-- tags = tags->next;
-- }
-- hlines = hlines->next;
-- }
--
-- nout = 0;
-- out = malloc(len+1);
-- hlines = header;
-- while (hlines)
-- {
-- HeaderLine *hline = hlines->data;
--
-- nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]);
--
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- nout += sprintf(out+nout,"\t");
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]);
-- nout += sprintf(out+nout,"%s", tag->value);
-- tags = tags->next;
-- }
-- hlines = hlines->next;
-- nout += sprintf(out+nout,"\n");
-- }
-- out[len] = 0;
-- return out;
--}
--
--void *sam_header_parse2(const char *headerText)
--{
-- list_t *hlines = NULL;
-- HeaderLine *hline;
-- const char *text;
-- char *buf=NULL;
-- size_t nbuf = 0;
-- int tovalidate = 0;
--
-- if ( !headerText )
-- return 0;
--
-- text = headerText;
-- while ( (text=nextline(&buf, &nbuf, text)) )
-- {
-- hline = sam_header_line_parse(buf);
-- if ( hline && (!tovalidate || sam_header_line_validate(hline)) )
-- // With too many (~250,000) reference sequences the header parsing was too slow with list_append.
-- hlines = list_append_to_end(hlines, hline);
-- else
-- {
-- if (hline) sam_header_line_free(hline);
-- sam_header_free(hlines);
-- if ( buf ) free(buf);
-- return NULL;
-- }
-- }
-- if ( buf ) free(buf);
--
-- return hlines;
--}
--
--void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2])
--{
-- const HeaderDict *dict = (const HeaderDict*)_dict;
-- const list_t *l = dict;
-- khash_t(str) *tbl = kh_init(str);
-- khiter_t k;
-- int ret;
--
-- if (_dict == 0) return tbl; // return an empty (not null) hash table
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key, *value;
-- key = header_line_has_tag(hline,key_tag);
-- value = header_line_has_tag(hline,value_tag);
-- if ( !key || !value )
-- {
-- l = l->next;
-- continue;
-- }
--
-- k = kh_get(str, tbl, key->value);
-- if ( k != kh_end(tbl) )
-- debug("[sam_header_lookup_table] They key %s not unique.\n", key->value);
-- k = kh_put(str, tbl, key->value, &ret);
-- kh_value(tbl, k) = value->value;
--
-- l = l->next;
-- }
-- return tbl;
--}
--
--char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n)
--{
-- const HeaderDict *dict = (const HeaderDict*)_dict;
-- const list_t *l = dict;
-- int max, n;
-- char **ret;
--
-- ret = 0; *_n = max = n = 0;
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key;
-- key = header_line_has_tag(hline,key_tag);
-- if ( !key )
-- {
-- l = l->next;
-- continue;
-- }
--
-- if (n == max) {
-- max = max? max<<1 : 4;
-- ret = realloc(ret, max * sizeof(char*));
-- }
-- ret[n++] = key->value;
--
-- l = l->next;
-- }
-- *_n = n;
-- return ret;
--}
--
--void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **_key, const char **_value)
--{
-- list_t *l = iter;
-- if ( !l ) return NULL;
--
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key, *value;
-- key = header_line_has_tag(hline,key_tag);
-- value = header_line_has_tag(hline,value_tag);
-- if ( !key || !value )
-- {
-- l = l->next;
-- continue;
-- }
--
-- *_key = key->value;
-- *_value = value->value;
-- return l->next;
-- }
-- return l;
--}
--
--const char *sam_tbl_get(void *h, const char *key)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- khint_t k;
-- k = kh_get(str, tbl, key);
-- return k == kh_end(tbl)? 0 : kh_val(tbl, k);
--}
--
--int sam_tbl_size(void *h)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- return h? kh_size(tbl) : 0;
--}
--
--void sam_tbl_destroy(void *h)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- kh_destroy(str, tbl);
--}
--
--void *sam_header_merge(int n, const void **_dicts)
--{
-- const HeaderDict **dicts = (const HeaderDict**)_dicts;
-- HeaderDict *out_dict;
-- int idict, status;
--
-- if ( n<2 ) return NULL;
--
-- out_dict = sam_header_clone(dicts[0]);
--
-- for (idict=1; idict<n; idict++)
-- {
-- const list_t *tmpl_hlines = dicts[idict];
--
-- while ( tmpl_hlines )
-- {
-- list_t *out_hlines = out_dict;
-- int inserted = 0;
-- while ( out_hlines )
-- {
-- status = sam_header_compare_lines(tmpl_hlines->data, out_hlines->data);
-- if ( status==0 )
-- {
-- out_hlines = out_hlines->next;
-- continue;
-- }
--
-- if ( status==2 )
-- {
-- print_header_line(stderr,tmpl_hlines->data);
-- print_header_line(stderr,out_hlines->data);
-- debug("Conflicting lines, cannot merge the headers.\n");
-- return 0;
-- }
-- if ( status==3 )
-- sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data);
--
-- inserted = 1;
-- break;
-- }
-- if ( !inserted )
-- out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data));
--
-- tmpl_hlines = tmpl_hlines->next;
-- }
-- }
--
-- return out_dict;
--}
--
--char **sam_header2tbl_n(const void *dict, const char type[2], const char *tags[], int *n)
--{
-- int nout = 0;
-- char **out = NULL;
--
-- *n = 0;
-- list_t *l = (list_t *)dict;
-- if ( !l ) return NULL;
--
-- int i, ntags = 0;
-- while ( tags[ntags] ) ntags++;
--
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
-- out = (char**) realloc(out, sizeof(char*)*(nout+1)*ntags);
-- for (i=0; i<ntags; i++)
-- {
-- HeaderTag *key = header_line_has_tag(hline, tags[i]);
-- if ( !key )
-- {
-- out[nout*ntags+i] = NULL;
-- continue;
-- }
-- out[nout*ntags+i] = key->value;
-- }
-- nout++;
-- l = l->next;
-- }
-- *n = nout;
-- return out;
--}
--
---- python-pysam.orig/samtools/sam_header.c.pysam.c
-+++ /dev/null
-@@ -1,838 +0,0 @@
--#include "samtools.pysam.h"
--
--/* sam_header.c -- basic SAM/BAM header API.
--
-- Copyright (C) 2009-2013 Genome Research Ltd.
--
-- Author: Petr Danecek <pd3@sanger.ac.uk>
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE. */
--
--#include <config.h>
--
--#include "sam_header.h"
--#include <stdio.h>
--#include <string.h>
--#include <ctype.h>
--#include <stdlib.h>
--#include <stdarg.h>
--
--#include "htslib/khash.h"
--KHASH_MAP_INIT_STR(str, const char *)
--
--struct _HeaderList
--{
-- struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only.
-- struct _HeaderList *next;
-- void *data;
--};
--typedef struct _HeaderList list_t;
--typedef list_t HeaderDict;
--
--typedef struct
--{
-- char key[2];
-- char *value;
--}
--HeaderTag;
--
--typedef struct
--{
-- char type[2];
-- list_t *tags;
--}
--HeaderLine;
--
--const char *o_hd_tags[] = {"SO","GO",NULL};
--const char *r_hd_tags[] = {"VN",NULL};
--
--const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL};
--const char *r_sq_tags[] = {"SN","LN",NULL};
--const char *u_sq_tags[] = {"SN",NULL};
--
--const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL};
--const char *r_rg_tags[] = {"ID",NULL};
--const char *u_rg_tags[] = {"ID",NULL};
--
--const char *o_pg_tags[] = {"VN","CL",NULL};
--const char *r_pg_tags[] = {"ID",NULL};
--
--const char *types[] = {"HD","SQ","RG","PG","CO",NULL};
--const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL};
--const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL};
--const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL};
--
--
--static void debug(const char *format, ...)
--{
-- va_list ap;
-- va_start(ap, format);
-- vfprintf(samtools_stderr, format, ap);
-- va_end(ap);
--}
--
--#if 0
--// Replaced by list_append_to_end
--static list_t *list_prepend(list_t *root, void *data)
--{
-- list_t *l = malloc(sizeof(list_t));
-- l->next = root;
-- l->data = data;
-- return l;
--}
--#endif
--
--// Relies on the root->last being correct. Do not use with the other list_*
--// routines unless they are fixed to modify root->last as well.
--static list_t *list_append_to_end(list_t *root, void *data)
--{
-- list_t *l = malloc(sizeof(list_t));
-- l->last = l;
-- l->next = NULL;
-- l->data = data;
--
-- if ( !root )
-- return l;
--
-- root->last->next = l;
-- root->last = l;
-- return root;
--}
--
--static list_t *list_append(list_t *root, void *data)
--{
-- list_t *l = root;
-- while (l && l->next)
-- l = l->next;
-- if ( l )
-- {
-- l->next = malloc(sizeof(list_t));
-- l = l->next;
-- }
-- else
-- {
-- l = malloc(sizeof(list_t));
-- root = l;
-- }
-- l->data = data;
-- l->next = NULL;
-- return root;
--}
--
--static void list_free(list_t *root)
--{
-- list_t *l = root;
-- while (root)
-- {
-- l = root;
-- root = root->next;
-- free(l);
-- }
--}
--
--
--
--// Look for a tag "XY" in a predefined const char *[] array.
--static int tag_exists(const char *tag, const char **tags)
--{
-- int itag=0;
-- if ( !tags ) return -1;
-- while ( tags[itag] )
-- {
-- if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag;
-- itag++;
-- }
-- return -1;
--}
--
--
--
--// Mimics the behaviour of getline, except it returns pointer to the next chunk of the text
--// or NULL if everything has been read. The lineptr should be freed by the caller. The
--// newline character is stripped.
--static const char *nextline(char **lineptr, size_t *n, const char *text)
--{
-- int len;
-- const char *to = text;
--
-- if ( !*to ) return NULL;
--
-- while ( *to && *to!='\n' && *to!='\r' ) to++;
-- len = to - text + 1;
--
-- if ( *to )
-- {
-- // Advance the pointer for the next call
-- if ( *to=='\n' ) to++;
-- else if ( *to=='\r' && *(to+1)=='\n' ) to+=2;
-- }
-- if ( !len )
-- return to;
--
-- if ( !*lineptr )
-- {
-- *lineptr = malloc(len);
-- *n = len;
-- }
-- else if ( *n<len )
-- {
-- *lineptr = realloc(*lineptr, len);
-- *n = len;
-- }
-- if ( !*lineptr ) {
-- debug("[nextline] Insufficient memory!\n");
-- return 0;
-- }
--
-- memcpy(*lineptr,text,len);
-- (*lineptr)[len-1] = 0;
--
-- return to;
--}
--
--// name points to "XY", value_from points to the first character of the value string and
--// value_to points to the last character of the value string.
--static HeaderTag *new_tag(const char *name, const char *value_from, const char *value_to)
--{
-- HeaderTag *tag = malloc(sizeof(HeaderTag));
-- int len = value_to-value_from+1;
--
-- tag->key[0] = name[0];
-- tag->key[1] = name[1];
-- tag->value = malloc(len+1);
-- memcpy(tag->value,value_from,len+1);
-- tag->value[len] = 0;
-- return tag;
--}
--
--static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key)
--{
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag;
-- tags = tags->next;
-- }
-- return NULL;
--}
--
--
--// Return codes:
--// 0 .. different types or unique tags differ or conflicting tags, cannot be merged
--// 1 .. all tags identical -> no need to merge, drop one
--// 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated
--// 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line
--static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2)
--{
-- HeaderTag *t1, *t2;
--
-- if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] )
-- return 0;
--
-- int itype = tag_exists(hline1->type,types);
-- if ( itype==-1 ) {
-- debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]);
-- return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code
-- }
--
-- if ( unique_tags[itype] )
-- {
-- t1 = header_line_has_tag(hline1,unique_tags[itype][0]);
-- t2 = header_line_has_tag(hline2,unique_tags[itype][0]);
-- if ( !t1 || !t2 ) // this should never happen, the unique tags are required
-- return 2;
--
-- if ( strcmp(t1->value,t2->value) )
-- return 0; // the unique tags differ, cannot be merged
-- }
-- if ( !required_tags[itype] && !optional_tags[itype] )
-- {
-- t1 = hline1->tags->data;
-- t2 = hline2->tags->data;
-- if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments
-- return 0;
-- }
--
-- int missing=0, itag=0;
-- while ( required_tags[itype] && required_tags[itype][itag] )
-- {
-- t1 = header_line_has_tag(hline1,required_tags[itype][itag]);
-- t2 = header_line_has_tag(hline2,required_tags[itype][itag]);
-- if ( !t1 && !t2 )
-- return 2; // this should never happen
-- else if ( !t1 || !t2 )
-- missing = 1; // there is some tag missing in one of the hlines
-- else if ( strcmp(t1->value,t2->value) )
-- {
-- if ( unique_tags[itype] )
-- return 2; // the lines have a matching unique tag but have a conflicting tag
--
-- return 0; // the lines contain conflicting tags, cannot be merged
-- }
-- itag++;
-- }
-- itag = 0;
-- while ( optional_tags[itype] && optional_tags[itype][itag] )
-- {
-- t1 = header_line_has_tag(hline1,optional_tags[itype][itag]);
-- t2 = header_line_has_tag(hline2,optional_tags[itype][itag]);
-- if ( !t1 && !t2 )
-- {
-- itag++;
-- continue;
-- }
-- if ( !t1 || !t2 )
-- missing = 1; // there is some tag missing in one of the hlines
-- else if ( strcmp(t1->value,t2->value) )
-- {
-- if ( unique_tags[itype] )
-- return 2; // the lines have a matching unique tag but have a conflicting tag
--
-- return 0; // the lines contain conflicting tags, cannot be merged
-- }
-- itag++;
-- }
-- if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged
-- return 1;
--}
--
--
--static HeaderLine *sam_header_line_clone(const HeaderLine *hline)
--{
-- list_t *tags;
-- HeaderLine *out = malloc(sizeof(HeaderLine));
-- out->type[0] = hline->type[0];
-- out->type[1] = hline->type[1];
-- out->tags = NULL;
--
-- tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *old = tags->data;
--
-- HeaderTag *new = malloc(sizeof(HeaderTag));
-- new->key[0] = old->key[0];
-- new->key[1] = old->key[1];
-- new->value = strdup(old->value);
-- out->tags = list_append(out->tags, new);
--
-- tags = tags->next;
-- }
-- return out;
--}
--
--static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline)
--{
-- list_t *tmpl_tags;
--
-- if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] )
-- return 0;
--
-- tmpl_tags = tmpl_hline->tags;
-- while (tmpl_tags)
-- {
-- HeaderTag *tmpl_tag = tmpl_tags->data;
-- HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key);
-- if ( !out_tag )
-- {
-- HeaderTag *tag = malloc(sizeof(HeaderTag));
-- tag->key[0] = tmpl_tag->key[0];
-- tag->key[1] = tmpl_tag->key[1];
-- tag->value = strdup(tmpl_tag->value);
-- out_hline->tags = list_append(out_hline->tags,tag);
-- }
-- tmpl_tags = tmpl_tags->next;
-- }
-- return 1;
--}
--
--
--static HeaderLine *sam_header_line_parse(const char *headerLine)
--{
-- HeaderLine *hline;
-- HeaderTag *tag;
-- const char *from, *to;
-- from = headerLine;
--
-- if ( *from != '@' ) {
-- debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine);
-- return 0;
-- }
-- to = ++from;
--
-- while (*to && *to!='\t') to++;
-- if ( to-from != 2 ) {
-- debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine);
-- return 0;
-- }
--
-- hline = malloc(sizeof(HeaderLine));
-- hline->type[0] = from[0];
-- hline->type[1] = from[1];
-- hline->tags = NULL;
--
-- int itype = tag_exists(hline->type, types);
--
-- from = to;
-- while (*to && *to=='\t') to++;
-- if ( to-from != 1 ) {
-- debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from));
-- free(hline);
-- return 0;
-- }
-- from = to;
-- while (*from)
-- {
-- while (*to && *to!='\t') to++;
--
-- if ( !required_tags[itype] && !optional_tags[itype] )
-- {
-- // CO is a special case, it can contain anything, including tabs
-- if ( *to ) { to++; continue; }
-- tag = new_tag(" ",from,to-1);
-- }
-- else
-- tag = new_tag(from,from+3,to-1);
--
-- if ( header_line_has_tag(hline,tag->key) )
-- debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine);
-- hline->tags = list_append(hline->tags, tag);
--
-- from = to;
-- while (*to && *to=='\t') to++;
-- if ( *to && to-from != 1 ) {
-- debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from));
-- return 0;
-- }
--
-- from = to;
-- }
-- return hline;
--}
--
--
--// Must be of an existing type, all tags must be recognised and all required tags must be present
--static int sam_header_line_validate(HeaderLine *hline)
--{
-- list_t *tags;
-- HeaderTag *tag;
-- int itype, itag;
--
-- // Is the type correct?
-- itype = tag_exists(hline->type, types);
-- if ( itype==-1 )
-- {
-- debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]);
-- return 0;
-- }
--
-- // Has all required tags?
-- itag = 0;
-- while ( required_tags[itype] && required_tags[itype][itag] )
-- {
-- if ( !header_line_has_tag(hline,required_tags[itype][itag]) )
-- {
-- debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1],
-- hline->type[0],hline->type[1]);
-- return 0;
-- }
-- itag++;
-- }
--
-- // Are all tags recognised?
-- tags = hline->tags;
-- while ( tags )
-- {
-- tag = tags->data;
-- if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) )
-- {
-- // Lower case tags are user-defined values.
-- if( !(islower(tag->key[0]) || islower(tag->key[1])) )
-- {
-- // Neither is lower case, but tag was not recognized.
-- debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]);
-- // return 0; // Even unknown tags are allowed - for forward compatibility with new attributes
-- }
-- // else - allow user defined tag
-- }
-- tags = tags->next;
-- }
--
-- return 1;
--}
--
--
--static void print_header_line(FILE *fp, HeaderLine *hline)
--{
-- list_t *tags = hline->tags;
-- HeaderTag *tag;
--
-- fprintf(fp, "@%c%c", hline->type[0],hline->type[1]);
-- while (tags)
-- {
-- tag = tags->data;
--
-- fprintf(fp, "\t");
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- fprintf(fp, "%c%c:", tag->key[0],tag->key[1]);
-- fprintf(fp, "%s", tag->value);
--
-- tags = tags->next;
-- }
-- fprintf(fp,"\n");
--}
--
--
--static void sam_header_line_free(HeaderLine *hline)
--{
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- free(tag->value);
-- free(tag);
-- tags = tags->next;
-- }
-- list_free(hline->tags);
-- free(hline);
--}
--
--void sam_header_free(void *_header)
--{
-- HeaderDict *header = (HeaderDict*)_header;
-- list_t *hlines = header;
-- while (hlines)
-- {
-- sam_header_line_free(hlines->data);
-- hlines = hlines->next;
-- }
-- list_free(header);
--}
--
--HeaderDict *sam_header_clone(const HeaderDict *dict)
--{
-- HeaderDict *out = NULL;
-- while (dict)
-- {
-- HeaderLine *hline = dict->data;
-- out = list_append(out, sam_header_line_clone(hline));
-- dict = dict->next;
-- }
-- return out;
--}
--
--// Returns a newly allocated string
--char *sam_header_write(const void *_header)
--{
-- const HeaderDict *header = (const HeaderDict*)_header;
-- char *out = NULL;
-- int len=0, nout=0;
-- const list_t *hlines;
--
-- // Calculate the length of the string to allocate
-- hlines = header;
-- while (hlines)
-- {
-- len += 4; // @XY and \n
--
-- HeaderLine *hline = hlines->data;
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- len += strlen(tag->value) + 1; // \t
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- len += strlen(tag->value) + 3; // XY:
-- tags = tags->next;
-- }
-- hlines = hlines->next;
-- }
--
-- nout = 0;
-- out = malloc(len+1);
-- hlines = header;
-- while (hlines)
-- {
-- HeaderLine *hline = hlines->data;
--
-- nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]);
--
-- list_t *tags = hline->tags;
-- while (tags)
-- {
-- HeaderTag *tag = tags->data;
-- nout += sprintf(out+nout,"\t");
-- if ( tag->key[0]!=' ' || tag->key[1]!=' ' )
-- nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]);
-- nout += sprintf(out+nout,"%s", tag->value);
-- tags = tags->next;
-- }
-- hlines = hlines->next;
-- nout += sprintf(out+nout,"\n");
-- }
-- out[len] = 0;
-- return out;
--}
--
--void *sam_header_parse2(const char *headerText)
--{
-- list_t *hlines = NULL;
-- HeaderLine *hline;
-- const char *text;
-- char *buf=NULL;
-- size_t nbuf = 0;
-- int tovalidate = 0;
--
-- if ( !headerText )
-- return 0;
--
-- text = headerText;
-- while ( (text=nextline(&buf, &nbuf, text)) )
-- {
-- hline = sam_header_line_parse(buf);
-- if ( hline && (!tovalidate || sam_header_line_validate(hline)) )
-- // With too many (~250,000) reference sequences the header parsing was too slow with list_append.
-- hlines = list_append_to_end(hlines, hline);
-- else
-- {
-- if (hline) sam_header_line_free(hline);
-- sam_header_free(hlines);
-- if ( buf ) free(buf);
-- return NULL;
-- }
-- }
-- if ( buf ) free(buf);
--
-- return hlines;
--}
--
--void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2])
--{
-- const HeaderDict *dict = (const HeaderDict*)_dict;
-- const list_t *l = dict;
-- khash_t(str) *tbl = kh_init(str);
-- khiter_t k;
-- int ret;
--
-- if (_dict == 0) return tbl; // return an empty (not null) hash table
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key, *value;
-- key = header_line_has_tag(hline,key_tag);
-- value = header_line_has_tag(hline,value_tag);
-- if ( !key || !value )
-- {
-- l = l->next;
-- continue;
-- }
--
-- k = kh_get(str, tbl, key->value);
-- if ( k != kh_end(tbl) )
-- debug("[sam_header_lookup_table] They key %s not unique.\n", key->value);
-- k = kh_put(str, tbl, key->value, &ret);
-- kh_value(tbl, k) = value->value;
--
-- l = l->next;
-- }
-- return tbl;
--}
--
--char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n)
--{
-- const HeaderDict *dict = (const HeaderDict*)_dict;
-- const list_t *l = dict;
-- int max, n;
-- char **ret;
--
-- ret = 0; *_n = max = n = 0;
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key;
-- key = header_line_has_tag(hline,key_tag);
-- if ( !key )
-- {
-- l = l->next;
-- continue;
-- }
--
-- if (n == max) {
-- max = max? max<<1 : 4;
-- ret = realloc(ret, max * sizeof(char*));
-- }
-- ret[n++] = key->value;
--
-- l = l->next;
-- }
-- *_n = n;
-- return ret;
--}
--
--void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **_key, const char **_value)
--{
-- list_t *l = iter;
-- if ( !l ) return NULL;
--
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
--
-- HeaderTag *key, *value;
-- key = header_line_has_tag(hline,key_tag);
-- value = header_line_has_tag(hline,value_tag);
-- if ( !key || !value )
-- {
-- l = l->next;
-- continue;
-- }
--
-- *_key = key->value;
-- *_value = value->value;
-- return l->next;
-- }
-- return l;
--}
--
--const char *sam_tbl_get(void *h, const char *key)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- khint_t k;
-- k = kh_get(str, tbl, key);
-- return k == kh_end(tbl)? 0 : kh_val(tbl, k);
--}
--
--int sam_tbl_size(void *h)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- return h? kh_size(tbl) : 0;
--}
--
--void sam_tbl_destroy(void *h)
--{
-- khash_t(str) *tbl = (khash_t(str)*)h;
-- kh_destroy(str, tbl);
--}
--
--void *sam_header_merge(int n, const void **_dicts)
--{
-- const HeaderDict **dicts = (const HeaderDict**)_dicts;
-- HeaderDict *out_dict;
-- int idict, status;
--
-- if ( n<2 ) return NULL;
--
-- out_dict = sam_header_clone(dicts[0]);
--
-- for (idict=1; idict<n; idict++)
-- {
-- const list_t *tmpl_hlines = dicts[idict];
--
-- while ( tmpl_hlines )
-- {
-- list_t *out_hlines = out_dict;
-- int inserted = 0;
-- while ( out_hlines )
-- {
-- status = sam_header_compare_lines(tmpl_hlines->data, out_hlines->data);
-- if ( status==0 )
-- {
-- out_hlines = out_hlines->next;
-- continue;
-- }
--
-- if ( status==2 )
-- {
-- print_header_line(samtools_stderr,tmpl_hlines->data);
-- print_header_line(samtools_stderr,out_hlines->data);
-- debug("Conflicting lines, cannot merge the headers.\n");
-- return 0;
-- }
-- if ( status==3 )
-- sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data);
--
-- inserted = 1;
-- break;
-- }
-- if ( !inserted )
-- out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data));
--
-- tmpl_hlines = tmpl_hlines->next;
-- }
-- }
--
-- return out_dict;
--}
--
--char **sam_header2tbl_n(const void *dict, const char type[2], const char *tags[], int *n)
--{
-- int nout = 0;
-- char **out = NULL;
--
-- *n = 0;
-- list_t *l = (list_t *)dict;
-- if ( !l ) return NULL;
--
-- int i, ntags = 0;
-- while ( tags[ntags] ) ntags++;
--
-- while (l)
-- {
-- HeaderLine *hline = l->data;
-- if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] )
-- {
-- l = l->next;
-- continue;
-- }
-- out = (char**) realloc(out, sizeof(char*)*(nout+1)*ntags);
-- for (i=0; i<ntags; i++)
-- {
-- HeaderTag *key = header_line_has_tag(hline, tags[i]);
-- if ( !key )
-- {
-- out[nout*ntags+i] = NULL;
-- continue;
-- }
-- out[nout*ntags+i] = key->value;
-- }
-- nout++;
-- l = l->next;
-- }
-- *n = nout;
-- return out;
--}
--
---- python-pysam.orig/samtools/sam_header.h
-+++ /dev/null
-@@ -1,72 +0,0 @@
--/* sam_header.h -- basic SAM/BAM header API.
--
-- Copyright (C) 2009, 2012, 2013 Genome Research Ltd.
--
-- Author: Petr Danecek <pd3@sanger.ac.uk>
--
--Permission is hereby granted, free of charge, to any person obtaining a copy
--of this software and associated documentation files (the "Software"), to deal
--in the Software without restriction, including without limitation the rights
--to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--copies of the Software, and to permit persons to whom the Software is
--furnished to do so, subject to the following conditions:
--
--The above copyright notice and this permission notice shall be included in
--all copies or substantial portions of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
--THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
--FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE. */
--
--#ifndef __SAM_HEADER_H__
--#define __SAM_HEADER_H__
--
--#ifdef __cplusplus
--extern "C" {
--#endif
--
-- void *sam_header_parse2(const char *headerText);
-- void *sam_header_merge(int n, const void **dicts);
-- void sam_header_free(void *header);
-- char *sam_header_write(const void *headerDict); // returns a newly allocated string
--
-- /*
-- // Usage example
-- const char *key, *val;
-- void *iter = sam_header_parse2(bam->header->text);
-- while ( iter = sam_header_key_val(iter, "RG","ID","SM" &key,&val) ) printf("%s\t%s\n", key,val);
-- */
-- void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **key, const char **value);
-- char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n);
--
-- /*
-- // Usage example
-- int i, j, n;
-- const char *tags[] = {"SN","LN","UR","M5",NULL};
-- void *dict = sam_header_parse2(bam->header->text);
-- char **tbl = sam_header2tbl_n(h->dict, "SQ", tags, &n);
-- for (i=0; i<n; i++)
-- {
-- for (j=0; j<4; j++)
-- if ( tbl[4*i+j] ) printf("\t%s", tbl[4*i+j]);
-- else printf("-");
-- printf("\n");
-- }
-- if (tbl) free(tbl);
-- */
-- char **sam_header2tbl_n(const void *dict, const char type[2], const char *tags[], int *n);
--
-- void *sam_header2tbl(const void *dict, char type[2], char key_tag[2], char value_tag[2]);
-- const char *sam_tbl_get(void *h, const char *key);
-- int sam_tbl_size(void *h);
-- void sam_tbl_destroy(void *h);
--
--#ifdef __cplusplus
--}
--#endif
--
--#endif
---- python-pysam.orig/samtools/sam_opts.c
-+++ python-pysam/samtools/sam_opts.c
-@@ -1,6 +1,6 @@
- /* sam_opts.c -- utilities to aid parsing common command line options.
-
-- Copyright (C) 2015 Genome Research Ltd.
-+ Copyright (C) 2015, 2019 Genome Research Ltd.
-
- Author: James Bonfield <jkb@sanger.ac.uk>
-
-@@ -66,8 +66,23 @@
- break;
- } else if (strcmp(lopt->name, "reference") == 0) {
- char *ref = malloc(10 + strlen(optarg) + 1);
-+
-+ if (!ref) {
-+ fprintf(stderr, "Unable to allocate memory in "
-+ "parse_sam_global_opt.\n");
-+
-+ return -1;
-+ }
-+
- sprintf(ref, "reference=%s", optarg);
-- ga->reference = strdup(optarg);
-+
-+ if (!(ga->reference = strdup(optarg))) {
-+ fprintf(stderr, "Unable to allocate memory in "
-+ "parse_sam_global_opt.\n");
-+
-+ return -1;
-+ }
-+
- r = hts_opt_add((hts_opt **)&ga->in.specific, ref);
- r |= hts_opt_add((hts_opt **)&ga->out.specific, ref);
- free(ref);
-@@ -75,17 +90,32 @@
- } else if (strcmp(lopt->name, "threads") == 0) {
- ga->nthreads = atoi(optarg);
- break;
--// } else if (strcmp(lopt->name, "verbose") == 0) {
--// ga->verbosity++;
--// break;
-+ } else if (strcmp(lopt->name, "write-index") == 0) {
-+ ga->write_index = 1;
-+ break;
-+ } else if (strcmp(lopt->name, "verbosity") == 0) {
-+ hts_verbose = atoi(optarg);
-+ break;
- }
- }
-
- if (!lopt->name) {
-- fprintf(stderr, "Unexpected global option: %s\n", lopt->name);
-+ fprintf(stderr, "Unexpected global option.\n");
- return -1;
- }
-
-+ /*
-+ * SAM format with compression enabled implies SAM.bgzf
-+ */
-+ if (ga->out.format == sam) {
-+ hts_opt *opts = (hts_opt *)ga->out.specific;
-+ while (opts) {
-+ if (opts->opt == HTS_OPT_COMPRESSION_LEVEL)
-+ ga->out.compression = bgzf;
-+ opts = opts->next;
-+ }
-+ }
-+
- return r;
- }
-
-@@ -136,9 +166,12 @@
- else if (strcmp(lopts[i].name, "threads") == 0)
- fprintf(fp,"threads INT\n"
- " Number of additional threads to use [0]\n");
--// else if (strcmp(lopts[i].name, "verbose") == 0)
--// fprintf(fp,"verbose\n"
--// " Increment level of verbosity\n");
-+ else if (strcmp(lopts[i].name, "write-index") == 0)
-+ fprintf(fp,"write-index\n"
-+ " Automatically index the output files [off]\n");
-+ else if (strcmp(lopts[i].name, "verbosity") == 0)
-+ fprintf(fp,"verbosity INT\n"
-+ " Set level of verbosity\n");
- }
- }
-
---- python-pysam.orig/samtools/sam_opts.c.pysam.c
-+++ python-pysam/samtools/sam_opts.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* sam_opts.c -- utilities to aid parsing common command line options.
-
-- Copyright (C) 2015 Genome Research Ltd.
-+ Copyright (C) 2015, 2019 Genome Research Ltd.
-
- Author: James Bonfield <jkb@sanger.ac.uk>
-
-@@ -68,8 +68,23 @@
- break;
- } else if (strcmp(lopt->name, "reference") == 0) {
- char *ref = malloc(10 + strlen(optarg) + 1);
-+
-+ if (!ref) {
-+ fprintf(samtools_stderr, "Unable to allocate memory in "
-+ "parse_sam_global_opt.\n");
-+
-+ return -1;
-+ }
-+
- sprintf(ref, "reference=%s", optarg);
-- ga->reference = strdup(optarg);
-+
-+ if (!(ga->reference = strdup(optarg))) {
-+ fprintf(samtools_stderr, "Unable to allocate memory in "
-+ "parse_sam_global_opt.\n");
-+
-+ return -1;
-+ }
-+
- r = hts_opt_add((hts_opt **)&ga->in.specific, ref);
- r |= hts_opt_add((hts_opt **)&ga->out.specific, ref);
- free(ref);
-@@ -77,17 +92,32 @@
- } else if (strcmp(lopt->name, "threads") == 0) {
- ga->nthreads = atoi(optarg);
- break;
--// } else if (strcmp(lopt->name, "verbose") == 0) {
--// ga->verbosity++;
--// break;
-+ } else if (strcmp(lopt->name, "write-index") == 0) {
-+ ga->write_index = 1;
-+ break;
-+ } else if (strcmp(lopt->name, "verbosity") == 0) {
-+ hts_verbose = atoi(optarg);
-+ break;
- }
- }
-
- if (!lopt->name) {
-- fprintf(samtools_stderr, "Unexpected global option: %s\n", lopt->name);
-+ fprintf(samtools_stderr, "Unexpected global option.\n");
- return -1;
- }
-
-+ /*
-+ * SAM format with compression enabled implies SAM.bgzf
-+ */
-+ if (ga->out.format == sam) {
-+ hts_opt *opts = (hts_opt *)ga->out.specific;
-+ while (opts) {
-+ if (opts->opt == HTS_OPT_COMPRESSION_LEVEL)
-+ ga->out.compression = bgzf;
-+ opts = opts->next;
-+ }
-+ }
-+
- return r;
- }
-
-@@ -138,9 +168,12 @@
- else if (strcmp(lopts[i].name, "threads") == 0)
- fprintf(fp,"threads INT\n"
- " Number of additional threads to use [0]\n");
--// else if (strcmp(lopts[i].name, "verbose") == 0)
--// fprintf(fp,"verbose\n"
--// " Increment level of verbosity\n");
-+ else if (strcmp(lopts[i].name, "write-index") == 0)
-+ fprintf(fp,"write-index\n"
-+ " Automatically index the output files [off]\n");
-+ else if (strcmp(lopts[i].name, "verbosity") == 0)
-+ fprintf(fp,"verbosity INT\n"
-+ " Set level of verbosity\n");
- }
- }
-
---- python-pysam.orig/samtools/sam_opts.h
-+++ python-pysam/samtools/sam_opts.h
-@@ -1,6 +1,6 @@
- /* sam_opts.h -- utilities to aid parsing common command line options.
-
-- Copyright (C) 2015 Genome Research Ltd.
-+ Copyright (C) 2015, 2019 Genome Research Ltd.
-
- Author: James Bonfield <jkb@sanger.ac.uk>
-
-@@ -35,7 +35,7 @@
- htsFormat out;
- char *reference;
- int nthreads;
-- //int verbosity;
-+ int write_index;
- } sam_global_args;
-
- #define SAM_GLOBAL_ARGS_INIT {{0},{0}}
-@@ -47,7 +47,8 @@
- SAM_OPT_OUTPUT_FMT_OPTION,
- SAM_OPT_REFERENCE,
- SAM_OPT_NTHREADS,
-- //SAM_OPT_VERBOSE
-+ SAM_OPT_WRITE_INDEX,
-+ SAM_OPT_VERBOSITY,
- };
-
- #define SAM_OPT_VAL(val, defval) ((val) == '-')? '?' : (val)? (val) : (defval)
-@@ -64,8 +65,9 @@
- {"output-fmt", required_argument, NULL, SAM_OPT_VAL(o3, SAM_OPT_OUTPUT_FMT)}, \
- {"output-fmt-option", required_argument, NULL, SAM_OPT_VAL(o4, SAM_OPT_OUTPUT_FMT_OPTION)}, \
- {"reference", required_argument, NULL, SAM_OPT_VAL(o5, SAM_OPT_REFERENCE)}, \
-- {"threads", required_argument, NULL, SAM_OPT_VAL(o6, SAM_OPT_NTHREADS)}
-- //{"verbose", no_argument, NULL, SAM_OPT_VERBOSE}
-+ {"threads", required_argument, NULL, SAM_OPT_VAL(o6, SAM_OPT_NTHREADS)}, \
-+ {"write-index", no_argument, NULL, SAM_OPT_WRITE_INDEX}, \
-+ {"verbosity", required_argument, NULL, SAM_OPT_VERBOSITY}
-
- /*
- * Processes a standard "global" samtools long option.
---- python-pysam.orig/samtools/sam_utils.c
-+++ python-pysam/samtools/sam_utils.c
-@@ -1,6 +1,6 @@
- /* sam_utils.c -- various utilities internal to samtools.
-
-- Copyright (C) 2014-2016 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2018, 2019 Genome Research Ltd.
-
- Author: John Marshall <jm18@sanger.ac.uk>
-
-@@ -23,6 +23,7 @@
- DEALINGS IN THE SOFTWARE. */
-
- #include <config.h>
-+#include <stdlib.h>
-
- #include <stdio.h>
- #include <stdarg.h>
-@@ -58,3 +59,80 @@
- vprint_error_core(subcommand, format, args, err? strerror(err) : NULL);
- va_end(args);
- }
-+
-+void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp)
-+{
-+ int r = sam_close(fp);
-+ if (r >= 0) return;
-+
-+ // TODO Need error infrastructure so we can print a message instead of r
-+ if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r);
-+ else print_error(subcmd, "error closing %s: %d", null_fname, r);
-+
-+ *retp = EXIT_FAILURE;
-+}
-+
-+/* Pick an index suffix based on the output file descriptor type. */
-+static char *idx_suffix(htsFile *fp) {
-+ switch (fp->format.format) {
-+ case sam:
-+ case bam:
-+ // Tough cheese if you wanted bai!
-+ // New feature => mandatory new index too, for simplicity of CLI.
-+ return "csi";
-+
-+ case cram:
-+ return "crai";
-+
-+ default:
-+ return NULL;
-+ }
-+}
-+
-+/*
-+ * Utility function to add an index to a file we've opened for write.
-+ * NB: Call this after writing the header and before writing sequences.
-+ *
-+ * The returned index filename should be freed by the caller, but only
-+ * after sam_idx_save has been called.
-+ *
-+ * Returns index filename on success,
-+ * NULL on failure.
-+ */
-+char *auto_index(htsFile *fp, const char *fn, bam_hdr_t *header) {
-+ char *fn_idx;
-+ int min_shift = 14; /* CSI */
-+ if (!fn || !*fn || strcmp(fn, "-") == 0)
-+ return NULL;
-+
-+ char *delim = strstr(fn, HTS_IDX_DELIM);
-+ if (delim != NULL) {
-+ delim += strlen(HTS_IDX_DELIM);
-+
-+ fn_idx = strdup(delim);
-+ if (!fn_idx)
-+ return NULL;
-+
-+ size_t l = strlen(fn_idx);
-+ if (l >= 4 && strcmp(fn_idx + l - 4, ".bai") == 0)
-+ min_shift = 0;
-+ } else {
-+ char *suffix = idx_suffix(fp);
-+ if (!suffix)
-+ return NULL;
-+
-+ fn_idx = malloc(strlen(fn)+6);
-+ if (!fn_idx)
-+ return NULL;
-+
-+ sprintf(fn_idx, "%s.%s", fn, suffix);
-+ }
-+
-+ if (sam_idx_init(fp, header, min_shift, fn_idx) < 0) {
-+ print_error_errno("auto_index", "failed to open index \"%s\" for writing", fn_idx);
-+ free(fn_idx);
-+ return NULL;
-+ }
-+
-+ return fn_idx;
-+}
---- python-pysam.orig/samtools/sam_utils.c.pysam.c
-+++ python-pysam/samtools/sam_utils.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* sam_utils.c -- various utilities internal to samtools.
-
-- Copyright (C) 2014-2016 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2018, 2019 Genome Research Ltd.
-
- Author: John Marshall <jm18@sanger.ac.uk>
-
-@@ -25,6 +25,7 @@
- DEALINGS IN THE SOFTWARE. */
-
- #include <config.h>
-+#include <stdlib.h>
-
- #include <stdio.h>
- #include <stdarg.h>
-@@ -60,3 +61,80 @@
- vprint_error_core(subcommand, format, args, err? strerror(err) : NULL);
- va_end(args);
- }
-+
-+void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp)
-+{
-+ int r = sam_close(fp);
-+ if (r >= 0) return;
-+
-+ // TODO Need error infrastructure so we can print a message instead of r
-+ if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r);
-+ else print_error(subcmd, "error closing %s: %d", null_fname, r);
-+
-+ *retp = EXIT_FAILURE;
-+}
-+
-+/* Pick an index suffix based on the output file descriptor type. */
-+static char *idx_suffix(htsFile *fp) {
-+ switch (fp->format.format) {
-+ case sam:
-+ case bam:
-+ // Tough cheese if you wanted bai!
-+ // New feature => mandatory new index too, for simplicity of CLI.
-+ return "csi";
-+
-+ case cram:
-+ return "crai";
-+
-+ default:
-+ return NULL;
-+ }
-+}
-+
-+/*
-+ * Utility function to add an index to a file we've opened for write.
-+ * NB: Call this after writing the header and before writing sequences.
-+ *
-+ * The returned index filename should be freed by the caller, but only
-+ * after sam_idx_save has been called.
-+ *
-+ * Returns index filename on success,
-+ * NULL on failure.
-+ */
-+char *auto_index(htsFile *fp, const char *fn, bam_hdr_t *header) {
-+ char *fn_idx;
-+ int min_shift = 14; /* CSI */
-+ if (!fn || !*fn || strcmp(fn, "-") == 0)
-+ return NULL;
-+
-+ char *delim = strstr(fn, HTS_IDX_DELIM);
-+ if (delim != NULL) {
-+ delim += strlen(HTS_IDX_DELIM);
-+
-+ fn_idx = strdup(delim);
-+ if (!fn_idx)
-+ return NULL;
-+
-+ size_t l = strlen(fn_idx);
-+ if (l >= 4 && strcmp(fn_idx + l - 4, ".bai") == 0)
-+ min_shift = 0;
-+ } else {
-+ char *suffix = idx_suffix(fp);
-+ if (!suffix)
-+ return NULL;
-+
-+ fn_idx = malloc(strlen(fn)+6);
-+ if (!fn_idx)
-+ return NULL;
-+
-+ sprintf(fn_idx, "%s.%s", fn, suffix);
-+ }
-+
-+ if (sam_idx_init(fp, header, min_shift, fn_idx) < 0) {
-+ print_error_errno("auto_index", "failed to open index \"%s\" for writing", fn_idx);
-+ free(fn_idx);
-+ return NULL;
-+ }
-+
-+ return fn_idx;
-+}
---- python-pysam.orig/samtools/sam_view.c
-+++ python-pysam/samtools/sam_view.c
-@@ -1,6 +1,6 @@
- /* sam_view.c -- SAM<->BAM<->CRAM conversion.
-
-- Copyright (C) 2009-2017 Genome Research Ltd.
-+ Copyright (C) 2009-2019 Genome Research Ltd.
- Portions copyright (C) 2009, 2011, 2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -32,33 +32,25 @@
- #include <unistd.h>
- #include <math.h>
- #include <inttypes.h>
--#include <stdbool.h>
--#include <assert.h>
- #include <getopt.h>
--#include <ctype.h>
- #include "htslib/sam.h"
- #include "htslib/faidx.h"
--#include "htslib/kstring.h"
- #include "htslib/khash.h"
--#include "htslib/klist.h"
- #include "htslib/thread_pool.h"
--#include "htslib/bgzf.h"
- #include "samtools.h"
- #include "sam_opts.h"
- #include "bedidx.h"
-
--#define DEFAULT_BARCODE_TAG "BC"
--#define DEFAULT_QUALITY_TAG "QT"
--
- KHASH_SET_INIT_STR(rg)
--#define taglist_free(p)
--KLIST_INIT(ktaglist, char*, taglist_free)
-+KHASH_SET_INIT_STR(tv)
-
- typedef khash_t(rg) *rghash_t;
-+typedef khash_t(tv) *tvhash_t;
-
- // This structure contains the settings for a samview run
- typedef struct samview_settings {
- rghash_t rghash;
-+ tvhash_t tvhash;
- int min_mapQ;
- int flag_on;
- int flag_off;
-@@ -72,16 +64,17 @@
- size_t remove_aux_len;
- char** remove_aux;
- int multi_region;
-+ char* tag;
- } samview_settings_t;
-
-
- // TODO Add declarations of these to a viable htslib or samtools header
--extern const char *bam_get_library(bam_hdr_t *header, const bam1_t *b);
-+extern const char *bam_get_library(sam_hdr_t *header, const bam1_t *b);
- extern int bam_remove_B(bam1_t *b);
- extern char *samfaipath(const char *fn_ref);
-
- // Returns 0 to indicate read should be output 1 otherwise
--static int process_aln(const bam_hdr_t *h, bam1_t *b, samview_settings_t* settings)
-+static int process_aln(const sam_hdr_t *h, bam1_t *b, samview_settings_t* settings)
- {
- if (settings->remove_B) bam_remove_B(b);
- if (settings->min_qlen > 0) {
-@@ -96,7 +89,7 @@
- return 1;
- if (settings->flag_alloff && ((b->core.flag & settings->flag_alloff) == settings->flag_alloff))
- return 1;
-- if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, h->target_name[b->core.tid], b->core.pos, bam_endpos(b))))
-+ if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, sam_hdr_tid2name(h, b->core.tid), b->core.pos, bam_endpos(b))))
- return 1;
- if (settings->subsam_frac > 0.) {
- uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(bam_get_qname(b)) ^ settings->subsam_seed);
-@@ -109,8 +102,17 @@
- if (k == kh_end(settings->rghash)) return 1;
- }
- }
-+ if (settings->tvhash && settings->tag) {
-+ uint8_t *s = bam_aux_get(b, settings->tag);
-+ if (s) {
-+ khint_t k = kh_get(tv, settings->tvhash, (char*)(s + 1));
-+ if (k == kh_end(settings->tvhash)) return 1;
-+ } else {
-+ return 1;
-+ }
-+ }
- if (settings->library) {
-- const char *p = bam_get_library((bam_hdr_t*)h, b);
-+ const char *p = bam_get_library((sam_hdr_t*)h, b);
- if (!p || strcmp(p, settings->library) != 0) return 1;
- }
- if (settings->remove_aux_len) {
-@@ -125,37 +127,6 @@
- return 0;
- }
-
--static char *drop_rg(char *hdtxt, rghash_t h, int *len)
--{
-- char *p = hdtxt, *q, *r, *s;
-- kstring_t str;
-- memset(&str, 0, sizeof(kstring_t));
-- while (1) {
-- int toprint = 0;
-- q = strchr(p, '\n');
-- if (q == 0) q = p + strlen(p);
-- if (q - p < 3) break; // the line is too short; then stop
-- if (strncmp(p, "@RG\t", 4) == 0) {
-- int c;
-- khint_t k;
-- if ((r = strstr(p, "\tID:")) != 0) {
-- r += 4;
-- for (s = r; *s != '\0' && *s != '\n' && *s != '\t'; ++s);
-- c = *s; *s = '\0';
-- k = kh_get(rg, h, r);
-- *s = c;
-- if (k != kh_end(h)) toprint = 1;
-- }
-- } else toprint = 1;
-- if (toprint) {
-- kputsn(p, q - p, &str); kputc('\n', &str);
-- }
-- p = q + 1;
-- }
-- *len = str.l;
-- return str.s;
--}
--
- static int usage(FILE *fp, int exit_status, int is_long_help);
-
- static int add_read_group_single(const char *subcmd, samview_settings_t *settings, char *name)
-@@ -217,39 +188,87 @@
- return (ret != -1) ? 0 : -1;
- }
-
--static inline int check_sam_write1(samFile *fp, const bam_hdr_t *h, const bam1_t *b, const char *fname, int *retp)
-+static int add_tag_value_single(const char *subcmd, samview_settings_t *settings, char *name)
- {
-- int r = sam_write1(fp, h, b);
-- if (r >= 0) return r;
-+ char *d = strdup(name);
-+ int ret = 0;
-
-- if (fname) print_error_errno("view", "writing to \"%s\" failed", fname);
-- else print_error_errno("view", "writing to standard output failed");
-+ if (d == NULL) goto err;
-
-- *retp = EXIT_FAILURE;
-- return r;
-+ if (settings->tvhash == NULL) {
-+ settings->tvhash = kh_init(tv);
-+ if (settings->tvhash == NULL) goto err;
-+ }
-+
-+ kh_put(tv, settings->tvhash, d, &ret);
-+ if (ret == -1) goto err;
-+ if (ret == 0) free(d); /* Duplicate */
-+ return 0;
-+
-+ err:
-+ print_error(subcmd, "Couldn't add \"%s\" to tag values list: memory exhausted?", name);
-+ free(d);
-+ return -1;
-+}
-+
-+static int add_tag_values_file(const char *subcmd, samview_settings_t *settings, char *fn)
-+{
-+ FILE *fp;
-+ char buf[1024];
-+ int ret = 0;
-+ if (settings->tvhash == NULL) {
-+ settings->tvhash = kh_init(tv);
-+ if (settings->tvhash == NULL) {
-+ perror(NULL);
-+ return -1;
-+ }
-+ }
-+
-+ fp = fopen(fn, "r");
-+ if (fp == NULL) {
-+ print_error_errno(subcmd, "failed to open \"%s\" for reading", fn);
-+ return -1;
-+ }
-+
-+ while (ret != -1 && !feof(fp) && fscanf(fp, "%1023s", buf) > 0) {
-+ char *d = strdup(buf);
-+ if (d != NULL) {
-+ kh_put(tv, settings->tvhash, d, &ret);
-+ if (ret == 0) free(d); /* Duplicate */
-+ } else {
-+ ret = -1;
-+ }
-+ }
-+ if (ferror(fp)) ret = -1;
-+ if (ret == -1) {
-+ print_error_errno(subcmd, "failed to read \"%s\"", fn);
-+ }
-+ fclose(fp);
-+ return (ret != -1) ? 0 : -1;
- }
-
--static void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp)
-+static inline int check_sam_write1(samFile *fp, const sam_hdr_t *h, const bam1_t *b, const char *fname, int *retp)
- {
-- int r = sam_close(fp);
-- if (r >= 0) return;
-+ int r = sam_write1(fp, h, b);
-+ if (r >= 0) return r;
-
-- // TODO Need error infrastructure so we can print a message instead of r
-- if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r);
-- else print_error(subcmd, "error closing %s: %d", null_fname, r);
-+ if (fname) print_error_errno("view", "writing to \"%s\" failed", fname);
-+ else print_error_errno("view", "writing to standard output failed");
-
- *retp = EXIT_FAILURE;
-+ return r;
- }
-
- int main_samview(int argc, char *argv[])
- {
-- int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0;
-+ int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0, has_index_file = 0, no_pg = 0;
- int64_t count = 0;
- samFile *in = 0, *out = 0, *un_out=0;
- FILE *fp_out = NULL;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- char out_mode[5], out_un_mode[5], *out_format = "";
-- char *fn_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0;
-+ char *fn_in = 0, *fn_idx_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0;
-+ char *fn_out_idx = NULL, *fn_un_out_idx = NULL, *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- htsThreadPool p = {NULL, 0};
- int filter_state = ALL, filter_op = 0;
-@@ -257,6 +276,7 @@
-
- samview_settings_t settings = {
- .rghash = NULL,
-+ .tvhash = NULL,
- .min_mapQ = 0,
- .flag_on = 0,
- .flag_off = 0,
-@@ -267,11 +287,13 @@
- .subsam_frac = -1.,
- .library = NULL,
- .bed = NULL,
-- .multi_region = 0
-+ .multi_region = 0,
-+ .tag = NULL
- };
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 'T', '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -288,7 +310,7 @@
- opterr = 0;
-
- while ((c = getopt_long(argc, argv,
-- "SbBcCt:h1Ho:O:q:f:F:G:ul:r:T:R:L:s:@:m:x:U:M",
-+ "SbBcCt:h1Ho:O:q:f:F:G:ul:r:T:R:d:D:L:s:@:m:x:U:MX",
- lopts, NULL)) >= 0) {
- switch (c) {
- case 's':
-@@ -298,7 +320,6 @@
- srand(settings.subsam_seed);
- settings.subsam_seed = rand();
- }
--
- if (q && *q == '.') {
- settings.subsam_frac = strtod(q, &q);
- if (*q) ret = 1;
-@@ -321,6 +342,7 @@
- case 'H': is_header_only = 1; break;
- case 'o': fn_out = strdup(optarg); break;
- case 'U': fn_un_out = strdup(optarg); break;
-+ case 'X': has_index_file = 1; break;
- case 'f': settings.flag_on |= strtol(optarg, 0, 0); break;
- case 'F': settings.flag_off |= strtol(optarg, 0, 0); break;
- case 'G': settings.flag_alloff |= strtol(optarg, 0, 0); break;
-@@ -347,6 +369,63 @@
- goto view_end;
- }
- break;
-+ case 'd':
-+ if (strlen(optarg) < 4 || optarg[2] != ':') {
-+ print_error_errno("view", "Invalid \"tag:value\" option: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+
-+ if (settings.tag) {
-+ if (settings.tag[0] != optarg[0] || settings.tag[1] != optarg[1]) {
-+ print_error("view", "Different tag \"%s\" was specified before: \"%s\"", settings.tag, optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ } else {
-+ if (!(settings.tag = calloc(3, 1))) {
-+ print_error("view", "Could not allocate memory for tag: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ memcpy(settings.tag, optarg, 2);
-+ }
-+
-+ if (add_tag_value_single("view", &settings, optarg+3) != 0) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ break;
-+ case 'D':
-+ // Allow ";" as delimiter besides ":" to support MinGW CLI POSIX
-+ // path translation as described at:
-+ // http://www.mingw.org/wiki/Posix_path_conversion
-+ if (strlen(optarg) < 4 || (optarg[2] != ':' && optarg[2] != ';')) {
-+ print_error_errno("view", "Invalid \"tag:file\" option: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+
-+ if (settings.tag) {
-+ if (settings.tag[0] != optarg[0] || settings.tag[1] != optarg[1]) {
-+ print_error("view", "Different tag \"%s\" was specified before: \"%s\"", settings.tag, optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ } else {
-+ if (!(settings.tag = calloc(3, 1))) {
-+ print_error("view", "Could not allocate memory for tag: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ memcpy(settings.tag, optarg, 2);
-+ }
-+
-+ if (add_tag_values_file("view", &settings, optarg+3) != 0) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ break;
- /* REMOVED as htslib doesn't support this
- //case 'x': out_format = "x"; break;
- //case 'X': out_format = "X"; break;
-@@ -380,6 +459,7 @@
- }
- break;
- case 'M': settings.multi_region = 1; break;
-+ case 1: no_pg = 1; break;
- default:
- if (parse_sam_global_opt(c, optarg, lopts, &ga) != 0)
- return usage(stderr, EXIT_FAILURE, 0);
-@@ -429,13 +509,8 @@
- ret = 1;
- goto view_end;
- }
-- if (settings.rghash) { // FIXME: I do not know what "bam_header_t::n_text" is for...
-- char *tmp;
-- int l;
-- tmp = drop_rg(header->text, settings.rghash, &l);
-- free(header->text);
-- header->text = tmp;
-- header->l_text = l;
-+ if (settings.rghash) {
-+ sam_hdr_remove_lines(header, "RG", "ID", settings.rghash);
- }
- if (!is_count) {
- if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) {
-@@ -450,7 +525,25 @@
- goto view_end;
- }
- }
-- if (*out_format || is_header ||
-+
-+ if (!no_pg) {
-+ if (!(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("view", "failed to create arg_list");
-+ ret = 1;
-+ goto view_end;
-+ }
-+ if (sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("view", "failed to add PG line to the header");
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
-+
-+ if (*out_format || ga.write_index || is_header ||
- out_mode[1] == 'b' || out_mode[1] == 'c' ||
- (ga.out.format != sam && ga.out.format != unknown_format)) {
- if (sam_hdr_write(out, header) != 0) {
-@@ -459,6 +552,13 @@
- goto view_end;
- }
- }
-+ if (ga.write_index) {
-+ if (!(fn_out_idx = auto_index(out, fn_out, header))) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
-+
- if (fn_un_out) {
- if ((un_out = sam_open_format(fn_un_out, out_un_mode, &ga.out)) == 0) {
- print_error_errno("view", "failed to open \"%s\" for writing", fn_un_out);
-@@ -481,6 +581,12 @@
- goto view_end;
- }
- }
-+ if (ga.write_index) {
-+ if (!(fn_un_out_idx = auto_index(un_out, fn_un_out, header))) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
- }
- }
- else {
-@@ -505,11 +611,23 @@
- }
- if (is_header_only) goto view_end; // no need to print alignments
-
-+ if (has_index_file) {
-+ fn_idx_in = (optind+1 < argc)? argv[optind+1] : 0;
-+ if (fn_idx_in == 0) {
-+ fprintf(stderr, "[main_samview] incorrect number of arguments for -X option. Aborting.\n");
-+ return 1;
-+ }
-+ }
-+
- if (settings.multi_region) {
-- if (optind < argc - 1) { //regions have been specified in the command line
-+ if (!has_index_file && optind < argc - 1) { //regions have been specified in the command line
- settings.bed = bed_hash_regions(settings.bed, argv, optind+1, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file
- if (!filter_op)
- filter_state = FILTERED;
-+ } else if (has_index_file && optind < argc - 2) {
-+ settings.bed = bed_hash_regions(settings.bed, argv, optind+2, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file
-+ if (!filter_op)
-+ filter_state = FILTERED;
- } else {
- bed_unify(settings.bed);
- }
-@@ -518,7 +636,13 @@
- if (settings.bed == NULL) { // index is unavailable or no regions have been specified
- fprintf(stderr, "[main_samview] no regions or BED file have been provided. Aborting.\n");
- } else {
-- hts_idx_t *idx = sam_index_load(in, fn_in); // load index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx_in != 0) {
-+ idx = sam_index_load2(in, fn_in, fn_idx_in); // load index
-+ } else {
-+ idx = sam_index_load(in, fn_in);
-+ }
- if (idx != NULL) {
-
- int regcount = 0;
-@@ -555,7 +679,7 @@
- }
- bam_destroy1(b);
- } else {
-- if (optind + 1 >= argc) { // convert/print the entire file
-+ if ((has_index_file && optind >= argc - 2) || (!has_index_file && optind >= argc - 1)) { // convert/print the entire file
- bam1_t *b = bam_init1();
- int r;
- while ((r = sam_read1(in, header, b)) >= 0) { // read one alignment from `in'
-@@ -574,22 +698,25 @@
- } else { // retrieve alignments in specified regions
- int i;
- bam1_t *b;
-- hts_idx_t *idx = sam_index_load(in, fn_in); // load index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx_in != NULL) {
-+ idx = sam_index_load2(in, fn_in, fn_idx_in); // load index
-+ } else {
-+ idx = sam_index_load(in, fn_in);
-+ }
- if (idx == 0) { // index is unavailable
- fprintf(stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n");
- ret = 1;
- goto view_end;
- }
- b = bam_init1();
-- for (i = optind + 1; i < argc; ++i) {
-+
-+ for (i = (has_index_file)? optind+2 : optind+1; i < argc; ++i) {
- int result;
- hts_itr_t *iter = sam_itr_querys(idx, header, argv[i]); // parse a region in the format like `chr2:100-200'
- if (iter == NULL) { // region invalid or reference name not found
-- int beg, end;
-- if (hts_parse_reg(argv[i], &beg, &end))
-- fprintf(stderr, "[main_samview] region \"%s\" specifies an unknown reference name. Continue anyway.\n", argv[i]);
-- else
-- fprintf(stderr, "[main_samview] region \"%s\" could not be parsed. Continue anyway.\n", argv[i]);
-+ fprintf(stderr, "[main_samview] region \"%s\" specifies an invalid region or unknown reference. Continue anyway.\n", argv[i]);
- continue;
- }
- // fetch alignments
-@@ -613,6 +740,17 @@
- }
- }
-
-+ if (ga.write_index) {
-+ if (sam_idx_save(out) < 0) {
-+ print_error_errno("view", "writing index failed");
-+ ret = 1;
-+ }
-+ if (un_out && sam_idx_save(un_out) < 0) {
-+ print_error_errno("view", "writing index failed");
-+ ret = 1;
-+ }
-+ }
-+
- view_end:
- if (is_count && ret == 0) {
- if (fprintf(fn_out? fp_out : stdout, "%" PRId64 "\n", count) < 0) {
-@@ -630,7 +768,7 @@
-
- free(fn_list); free(fn_out); free(settings.library); free(fn_un_out);
- sam_global_args_free(&ga);
-- if ( header ) bam_hdr_destroy(header);
-+ if ( header ) sam_hdr_destroy(header);
- if (settings.bed) bed_destroy(settings.bed);
- if (settings.rghash) {
- khint_t k;
-@@ -638,13 +776,28 @@
- if (kh_exist(settings.rghash, k)) free((char*)kh_key(settings.rghash, k));
- kh_destroy(rg, settings.rghash);
- }
-+ if (settings.tvhash) {
-+ khint_t k;
-+ for (k = 0; k < kh_end(settings.tvhash); ++k)
-+ if (kh_exist(settings.tvhash, k)) free((char*)kh_key(settings.tvhash, k));
-+ kh_destroy(tv, settings.tvhash);
-+ }
- if (settings.remove_aux_len) {
- free(settings.remove_aux);
- }
-+ if (settings.tag) {
-+ free(settings.tag);
-+ }
-
- if (p.pool)
- hts_tpool_destroy(p.pool);
-
-+ if (fn_out_idx)
-+ free(fn_out_idx);
-+ if (fn_un_out_idx)
-+ free(fn_un_out_idx);
-+ free(arg_list);
-+
- return ret;
- }
-
-@@ -667,10 +820,16 @@
- " -U FILE output reads not selected by filters to FILE [null]\n"
- // extra input
- " -t FILE FILE listing reference names and lengths (see long help) [null]\n"
-+" -X include customized index file\n"
- // read filters
- " -L FILE only include reads overlapping this BED FILE [null]\n"
- " -r STR only include reads in read group STR [null]\n"
- " -R FILE only include reads with read group listed in FILE [null]\n"
-+" -d STR:STR\n"
-+" only include reads with tag STR and associated value STR [null]\n"
-+" -D STR:FILE\n"
-+" only include reads with tag STR and associated values listed in\n"
-+" FILE [null]\n"
- " -q INT only include reads with mapping quality >= INT [0]\n"
- " -l STR only include reads in library STR [null]\n"
- " -m INT only include reads with number of CIGAR operations consuming\n"
-@@ -687,9 +846,10 @@
- " -B collapse the backward CIGAR operation\n"
- // general options
- " -? print long help, including note about region specification\n"
--" -S ignored (input format is auto-detected)\n");
-+" -S ignored (input format is auto-detected)\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(fp, "-.O.T@");
-+ sam_global_opt_help(fp, "-.O.T@..");
- fprintf(fp, "\n");
-
- if (is_long_help)
-@@ -747,903 +907,3 @@
- free(argv2);
- return ret;
- }
--
--int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
--static const char *copied_tags[] = { "RG", "BC", "QT", NULL };
--
--static void bam2fq_usage(FILE *to, const char *command)
--{
-- int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0;
-- fprintf(to,
--"Usage: samtools %s [options...] <in.bam>\n", command);
-- fprintf(to,
--"Options:\n"
--" -0 FILE write reads designated READ_OTHER to FILE\n"
--" -1 FILE write reads designated READ1 to FILE\n"
--" -2 FILE write reads designated READ2 to FILE\n"
--" note: if a singleton file is specified with -s, only\n"
--" paired reads will be written to the -1 and -2 files.\n"
--" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x
--" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0
--" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x)
--" -n don't append /1 and /2 to the read name\n"
--" -N always append /1 and /2 to the read name\n");
-- if (fq) fprintf(to,
--" -O output quality in the OQ tag if present\n");
-- fprintf(to,
--" -s FILE write singleton reads designated READ1 or READ2 to FILE\n"
--" -t copy RG, BC and QT tags to the %s header line\n",
-- fq ? "FASTQ" : "FASTA");
-- fprintf(to,
--" -T TAGLIST copy arbitrary tags to the %s header line\n",
-- fq ? "FASTQ" : "FASTA");
-- if (fq) fprintf(to,
--" -v INT default quality score if not given in file [1]\n"
--" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n"
--" -c compression level [0..9] to use when creating gz or bgzf fastq files\n"
--" --i1 FILE write first index reads to FILE\n"
--" --i2 FILE write second index reads to FILE\n"
--" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n"
--" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n"
--" --index-format STR How to parse barcode and quality tags\n\n");
-- sam_global_opt_help(to, "-.--.@");
-- fprintf(to,
--"\n"
--"Reads are designated READ1 if FLAG READ1 is set and READ2 is not set.\n"
--"Reads are designated READ2 if FLAG READ1 is not set and READ2 is set.\n"
--"Reads are designated READ_OTHER if FLAGs READ1 and READ2 are either both set\n"
--"or both unset.\n"
--"Run 'samtools flags' for more information on flag codes and meanings.\n");
-- fprintf(to,
--"\n"
--"The index-format string describes how to parse the barcode and quality tags, for example:\n"
--" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n"
--" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n"
--"If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n"
--"'read until the separator or end of tag', for example:\n"
--" n*i* ignore the left part of the tag until the separator, then use the second part\n"
--" of the tag as index 1\n");
-- fprintf(to,
--"\n"
--"Examples:\n"
--" To get just the paired reads in separate files, use:\n"
--" samtools %s -1 paired1.%s -2 paired2.%s -0 /dev/null -s /dev/null -n -F 0x900 in.bam\n"
--"\n To get all non-supplementary/secondary reads in a single file, redirect the output:\n"
--" samtools %s -F 0x900 in.bam > all_reads.%s\n",
-- command, fq ? "fq" : "fa", fq ? "fq" : "fa",
-- command, fq ? "fq" : "fa");
--}
--
--typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart;
--typedef enum { FASTA, FASTQ } fastfile;
--typedef struct bam2fq_opts {
-- char *fnse;
-- char *fnr[3];
-- char *fn_input; // pointer to input filename in argv do not free
-- bool has12, has12always, use_oq, copy_tags, illumina_tag;
-- int flag_on, flag_off, flag_alloff;
-- sam_global_args ga;
-- fastfile filetype;
-- int def_qual;
-- char *barcode_tag;
-- char *quality_tag;
-- char *index_file[2];
-- char *index_format;
-- char *extra_tags;
-- char compression_level;
--} bam2fq_opts_t;
--
--typedef struct bam2fq_state {
-- samFile *fp;
-- BGZF *fpse;
-- BGZF *fpr[3];
-- BGZF *fpi[2];
-- BGZF *hstdout;
-- bam_hdr_t *h;
-- bool has12, use_oq, copy_tags, illumina_tag;
-- int flag_on, flag_off, flag_alloff;
-- fastfile filetype;
-- int def_qual;
-- klist_t(ktaglist) *taglist;
-- char *index_sequence;
-- char compression_level;
--} bam2fq_state_t;
--
--/*
-- * Get and decode the read from a BAM record.
-- *
-- * TODO: htslib really needs an interface for this. Consider this or perhaps
-- * bam_get_seq_str (current vs original orientation) and bam_get_qual_str
-- * functions as string formatted equivalents to bam_get_{seq,qual}?
-- */
--
--/*
-- * Reverse a string in place.
-- * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux.
-- * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik
-- */
--static char *reverse(char *str)
--{
-- int i = strlen(str)-1,j=0;
-- char ch;
-- while (i>j) {
-- ch = str[i];
-- str[i]= str[j];
-- str[j] = ch;
-- i--;
-- j++;
-- }
-- return str;
--}
--
--/* return the read, reverse complemented if necessary */
--static char *get_read(const bam1_t *rec)
--{
-- int len = rec->core.l_qseq + 1;
-- char *read = calloc(1, len);
-- char *seq = (char *)bam_get_seq(rec);
-- int n;
--
-- if (!read) return NULL;
--
-- for (n=0; n < rec->core.l_qseq; n++) {
-- if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]];
-- else read[n] = seq_nt16_str[bam_seqi(seq,n)];
-- }
-- if (rec->core.flag & BAM_FREVERSE) reverse(read);
-- return read;
--}
--
--/*
-- * get and decode the quality from a BAM record
-- */
--static int get_quality(const bam1_t *rec, char **qual_out)
--{
-- char *quality = calloc(1, rec->core.l_qseq + 1);
-- char *q = (char *)bam_get_qual(rec);
-- int n;
--
-- if (!quality) return -1;
--
-- if (*q == '\xff') {
-- free(quality);
-- *qual_out = NULL;
-- return 0;
-- }
--
-- for (n=0; n < rec->core.l_qseq; n++) {
-- quality[n] = q[n]+33;
-- }
-- if (rec->core.flag & BAM_FREVERSE) reverse(quality);
-- *qual_out = quality;
-- return 0;
--}
--
--//
--// End of htslib complaints
--//
--
--
--static readpart which_readpart(const bam1_t *b)
--{
-- if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) {
-- return READ_1;
-- } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) {
-- return READ_2;
-- } else {
-- return READ_UNKNOWN;
-- }
--}
--
--/*
-- * parse the length part from the index-format string
-- */
--static int getLength(char **s)
--{
-- int n = 0;
-- while (**s) {
-- if (**s == '*') { n=-1; (*s)++; break; }
-- if ( !isdigit(**s)) break;
-- n = n*10 + ((**s)-'0');
-- (*s)++;
-- }
-- return n;
--}
--
--static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf)
--{
-- uint8_t *s = bam_aux_get(rec, tag);
-- if (s) {
-- char aux_type = *s;
-- switch (aux_type) {
-- case 'C':
-- case 'S': aux_type = 'I'; break;
-- case 'c':
-- case 's': aux_type = 'i'; break;
-- case 'd': aux_type = 'f'; break;
-- }
--
-- // Ensure space. Need 6 chars + length of tag. Max length of
-- // i is 16, A is 21, B currently 26, Z is unknown, so
-- // have to check that one later.
-- if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false;
--
-- kputc('\t', linebuf);
-- kputsn(tag, 2, linebuf);
-- kputc(':', linebuf);
-- kputc(aux_type=='I'? 'i': aux_type, linebuf);
-- kputc(':', linebuf);
-- switch (aux_type) {
-- case 'H':
-- case 'Z':
-- if (kputs(bam_aux2Z(s), linebuf) < 0) return false;
-- break;
-- case 'i': kputw(bam_aux2i(s), linebuf); break;
-- case 'I': kputuw(bam_aux2i(s), linebuf); break;
-- case 'A': kputc(bam_aux2A(s), linebuf); break;
-- case 'f': kputd(bam_aux2f(s), linebuf); break;
-- case 'B': kputs("*** Unhandled aux type ***", linebuf); return false;
-- default: kputs("*** Unknown aux type ***", linebuf); return false;
-- }
-- }
-- return true;
--}
--
--static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec)
--{
-- if (!index_sequence) return 0;
--
-- kstring_t new = {0,0,NULL};
-- if (linebuf->s) {
-- char *s = strchr(linebuf->s, '\n');
-- if (s) {
-- if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0)
-- return -1;
-- *s = 0;
-- kputs(linebuf->s, &new);
-- kputc(' ', &new);
-- readpart readpart = which_readpart(rec);
-- if (readpart == READ_1) kputc('1', &new);
-- else if (readpart == READ_2) kputc('2', &new);
-- else kputc('0', &new);
--
-- kputc(':', &new);
-- if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new);
-- else kputc('N', &new);
--
-- kputs(":0:", &new);
-- kputs(index_sequence, &new);
-- kputc('\n', &new);
-- kputs(s+1, &new);
-- free(ks_release(linebuf));
-- linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m;
-- }
-- }
-- return 0;
--}
--
--static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state)
--{
-- int i;
--
-- linebuf->l = 0;
-- // Write read name
-- if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false;
-- if (kputs(bam_get_qname(rec), linebuf) < 0) return false;
-- // Add the /1 /2 if requested
-- if (state->has12) {
-- readpart readpart = which_readpart(rec);
-- if (readpart == READ_1) {
-- if (kputs("/1", linebuf) < 0) return false;
-- } else if (readpart == READ_2) {
-- if (kputs("/2", linebuf) < 0) return false;
-- }
-- }
-- if (state->copy_tags) {
-- for (i = 0; copied_tags[i]; ++i) {
-- if (!copy_tag(copied_tags[i], rec, linebuf)) {
-- fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-- return false;
-- }
-- }
-- }
--
-- if (state->taglist->size) {
-- kliter_t(ktaglist) *p;
-- for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) {
-- if (!copy_tag(kl_val(p), rec, linebuf)) {
-- fprintf(stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-- return false;
-- }
-- }
-- }
--
-- if (kputc('\n', linebuf) < 0) return false;
-- if (kputs(seq, linebuf) < 0) return false;
-- if (kputc('\n', linebuf) < 0) return false;
--
-- if (state->filetype == FASTQ) {
-- // Write quality
-- if (kputs("+\n", linebuf) < 0) return false;
-- if (qual && *qual) {
-- if (kputs(qual, linebuf) < 0) return false;
-- } else {
-- int len = strlen(seq);
-- if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false;
-- for (i = 0; i < len; ++i) {
-- kputc(33 + state->def_qual, linebuf);
-- }
-- }
-- if (kputc('\n', linebuf) < 0) return false;
-- }
-- return true;
--}
--
--/*
-- * Create FASTQ lines from the barcode tag using the index-format
-- */
--static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts)
--{
-- uint8_t *p;
-- char *ifmt = opts->index_format;
-- char *tag = NULL;
-- char *qual = NULL;
-- char *sub_tag = NULL;
-- char *sub_qual = NULL;
-- size_t tag_len;
-- int file_number = 0;
-- kstring_t linebuf = { 0, 0, NULL }; // Buffer
--
--
-- // read barcode tag
-- p = bam_aux_get(rec,opts->barcode_tag);
-- if (p) tag = bam_aux2Z(p);
--
-- if (!tag) return true; // there is no tag
--
-- tag_len = strlen(tag);
-- sub_tag = calloc(1, tag_len + 1);
-- if (!sub_tag) goto fail;
-- sub_qual = calloc(1, tag_len + 1);
-- if (!sub_qual) goto fail;
--
-- // read quality tag
-- p = bam_aux_get(rec, opts->quality_tag);
-- if (p) qual = bam_aux2Z(p);
--
-- // Parse the index-format string
-- while (*ifmt) {
-- if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly
-- char action = *ifmt; // should be 'i' or 'n'
-- ifmt++; // skip over action
-- int index_len = getLength(&ifmt);
-- int n = 0;
--
-- if (index_len < 0) {
-- // read until separator
-- while (isalpha(*tag)) {
-- sub_tag[n] = *tag++;
-- if (qual) sub_qual[n] = *qual++;
-- n++;
-- }
-- if (*tag) { // skip separator
-- tag++;
-- if (qual) qual++;
-- }
-- } else {
-- // read index_len characters
-- while (index_len-- && *tag) {
-- sub_tag[n] = *tag++;
-- if (qual) sub_qual[n] = *qual++;
-- n++;
-- }
-- }
-- sub_tag[n] = '\0';
-- sub_qual[n] = '\0';
--
-- if (action=='i' && *sub_tag && state->fpi[file_number]) {
-- //if (file_number==0) state->index_sequence = strdup(sub_tag); // we're going to need this later...
-- state->index_sequence = strdup(sub_tag); // we're going to need this later...
-- if (!state->index_sequence) goto fail;
-- if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail;
-- if (state->illumina_tag) {
-- if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf, rec) < 0) {
-- goto fail;
-- }
-- }
-- if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0)
-- goto fail;
-- }
--
-- }
--
-- free(sub_qual); free(sub_tag);
-- free(linebuf.s);
-- return true;
--
-- fail:
-- perror(__func__);
-- free(sub_qual); free(sub_tag);
-- free(linebuf.s);
-- return true;
--}
--
--// Transform a bam1_t record into a string with the FASTQ representation of it
--// @returns false for error, true for success
--static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state)
--{
-- int32_t qlen = b->core.l_qseq;
-- assert(qlen >= 0);
-- const uint8_t *oq = NULL;
-- char *qual = NULL;
--
-- char *seq = get_read(b);
-- if (!seq) return false;
--
-- if (state->use_oq) oq = bam_aux_get(b, "OQ");
-- if (oq && *oq=='Z') {
-- qual = strdup(bam_aux2Z(oq));
-- if (!qual) goto fail;
-- if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented
-- reverse(qual);
-- }
-- } else {
-- if (get_quality(b, &qual) < 0) goto fail;
-- }
--
-- if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail;
--
-- free(qual);
-- free(seq);
-- return true;
--
-- fail:
-- free(seq);
-- free(qual);
-- return false;
--}
--
--static void free_opts(bam2fq_opts_t *opts)
--{
-- free(opts->barcode_tag);
-- free(opts->quality_tag);
-- free(opts->index_format);
-- free(opts->extra_tags);
-- free(opts);
--}
--
--// return true if valid
--static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out)
--{
-- // Parse args
-- bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t));
-- opts->has12 = true;
-- opts->has12always = false;
-- opts->filetype = FASTQ;
-- opts->def_qual = 1;
-- opts->barcode_tag = NULL;
-- opts->quality_tag = NULL;
-- opts->index_format = NULL;
-- opts->index_file[0] = NULL;
-- opts->index_file[1] = NULL;
-- opts->extra_tags = NULL;
-- opts->compression_level = 1;
--
-- int c;
-- sam_global_args_init(&opts->ga);
-- static const struct option lopts[] = {
-- SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'),
-- {"i1", required_argument, NULL, 1},
-- {"I1", required_argument, NULL, 1},
-- {"i2", required_argument, NULL, 2},
-- {"I2", required_argument, NULL, 2},
-- {"if", required_argument, NULL, 3},
-- {"IF", required_argument, NULL, 3},
-- {"index-format", required_argument, NULL, 3},
-- {"barcode-tag", required_argument, NULL, 'b'},
-- {"quality-tag", required_argument, NULL, 'q'},
-- { NULL, 0, NULL, 0 }
-- };
-- while ((c = getopt_long(argc, argv, "0:1:2:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) {
-- switch (c) {
-- case 'b': opts->barcode_tag = strdup(optarg); break;
-- case 'q': opts->quality_tag = strdup(optarg); break;
-- case 1 : opts->index_file[0] = optarg; break;
-- case 2 : opts->index_file[1] = optarg; break;
-- case 3 : opts->index_format = strdup(optarg); break;
-- case '0': opts->fnr[0] = optarg; break;
-- case '1': opts->fnr[1] = optarg; break;
-- case '2': opts->fnr[2] = optarg; break;
-- case 'f': opts->flag_on |= strtol(optarg, 0, 0); break;
-- case 'F': opts->flag_off |= strtol(optarg, 0, 0); break;
-- case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break;
-- case 'n': opts->has12 = false; break;
-- case 'N': opts->has12always = true; break;
-- case 'O': opts->use_oq = true; break;
-- case 's': opts->fnse = optarg; break;
-- case 't': opts->copy_tags = true; break;
-- case 'i': opts->illumina_tag = true; break;
-- case 'c': opts->compression_level = atoi(optarg); break;
-- case 'T': opts->extra_tags = strdup(optarg); break;
-- case 'v': opts->def_qual = atoi(optarg); break;
-- case '?': bam2fq_usage(stderr, argv[0]); free_opts(opts); return false;
-- default:
-- if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) {
-- bam2fq_usage(stderr, argv[0]); free_opts(opts); return false;
-- }
-- break;
-- }
-- }
--
-- if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false;
-- if (opts->has12always) opts->has12 = true;
--
-- if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG);
-- if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG);
--
-- int nIndex = 0;
-- if (opts->index_format) {
-- char *s;
-- for (s = opts->index_format; *s; s++) {
-- if (*s == 'i') nIndex++;
-- }
-- }
-- if (nIndex>2) {
-- fprintf(stderr,"Invalid index format: more than 2 indexes\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (opts->index_file[1] && !opts->index_file[0]) {
-- fprintf(stderr, "Index one specified, but index two not given\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==2 && !opts->index_file[1]) {
-- fprintf(stderr, "index_format specifies two indexes, but only one index file given\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==1 && !opts->index_file[0]) {
-- fprintf(stderr, "index_format specifies an index, but no index file given\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==0 && opts->index_file[0]) {
-- fprintf(stderr, "index_format not specified, but index file given\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (opts->def_qual < 0 || 93 < opts->def_qual) {
-- fprintf(stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual);
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- const char* type_str = argv[0];
-- if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) {
-- opts->filetype = FASTQ;
-- } else if (strcasecmp("fasta", type_str) == 0) {
-- opts->filetype = FASTA;
-- } else {
-- print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str);
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if ((argc - (optind)) == 0) {
-- fprintf(stderr, "No input file specified.\n");
-- bam2fq_usage(stdout, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if ((argc - (optind)) != 1) {
-- fprintf(stderr, "Too many arguments.\n");
-- bam2fq_usage(stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
-- opts->fn_input = argv[optind];
-- *opts_out = opts;
-- return true;
--}
--
--static BGZF *open_fqfile(char *filename, int c)
--{
-- char mode[4] = "w";
-- size_t len = strlen(filename);
--
-- mode[2] = 0; mode[3] = 0;
-- if (len > 3 && strstr(filename + (len - 3),".gz")) {
-- mode[1] = 'g'; mode[2] = c+'0';
-- } else if ((len > 4 && strstr(filename + (len - 4),".bgz"))
-- || (len > 5 && strstr(filename + (len - 5),".bgzf"))) {
-- mode[1] = c+'0';
-- } else {
-- mode[1] = 'u';
-- }
--
-- return bgzf_open(filename,mode);
--}
--
--static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out)
--{
-- bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t));
-- state->flag_on = opts->flag_on;
-- state->flag_off = opts->flag_off;
-- state->flag_alloff = opts->flag_alloff;
-- state->has12 = opts->has12;
-- state->use_oq = opts->use_oq;
-- state->illumina_tag = opts->illumina_tag;
-- state->copy_tags = opts->copy_tags;
-- state->filetype = opts->filetype;
-- state->def_qual = opts->def_qual;
-- state->index_sequence = NULL;
-- state->hstdout = NULL;
-- state->compression_level = opts->compression_level;
--
-- state->taglist = kl_init(ktaglist);
-- if (opts->extra_tags) {
-- char *save_p;
-- char *s = strtok_r(opts->extra_tags, ",", &save_p);
-- while (s) {
-- if (strlen(s) != 2) {
-- fprintf(stderr, "Parsing extra tags - '%s' is not two characters\n", s);
-- free(state);
-- return false;
-- }
-- char **et = kl_pushp(ktaglist, state->taglist);
-- *et = s;
-- s = strtok_r(NULL, ",", &save_p);
-- }
-- }
--
-- state->fp = sam_open(opts->fn_input, "r");
-- if (state->fp == NULL) {
-- print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input);
-- free(state);
-- return false;
-- }
-- if (opts->ga.nthreads > 0)
-- hts_set_threads(state->fp, opts->ga.nthreads);
-- uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL;
-- if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX;
-- if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-- fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-- free(state);
-- return false;
-- }
-- if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) {
-- fprintf(stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-- free(state);
-- return false;
-- }
-- if (opts->fnse) {
-- state->fpse = open_fqfile(opts->fnse, state->compression_level);
-- if (state->fpse == NULL) {
-- print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse);
-- free(state);
-- return false;
-- }
-- }
--
-- if (opts->ga.reference) {
-- if (hts_set_fai_filename(state->fp, opts->ga.reference) != 0) {
-- print_error_errno("bam2fq", "cannot load reference \"%s\"", opts->ga.reference);
-- free(state);
-- return false;
-- }
-- }
--
-- int i;
-- for (i = 0; i < 3; ++i) {
-- if (opts->fnr[i]) {
-- state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level);
-- if (state->fpr[i] == NULL) {
-- print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"", i, opts->fnr[i]);
-- free(state);
-- return false;
-- }
-- } else {
-- if (!state->hstdout) {
-- state->hstdout = bgzf_dopen(fileno(stdout), "wu");
-- if (!state->hstdout) {
-- print_error_errno("bam2fq", "Cannot open STDOUT");
-- free(state);
-- return false;
-- }
-- }
-- state->fpr[i] = state->hstdout;
-- }
-- }
-- for (i = 0; i < 2; i++) {
-- state->fpi[i] = NULL;
-- if (opts->index_file[i]) {
-- state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level);
-- if (state->fpi[i] == NULL) {
-- print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"", i+1, opts->index_file[i]);
-- free(state);
-- return false;
-- }
-- }
-- }
--
-- state->h = sam_hdr_read(state->fp);
-- if (state->h == NULL) {
-- fprintf(stderr, "Failed to read header for \"%s\"\n", opts->fn_input);
-- free(state);
-- return false;
-- }
--
-- *state_out = state;
-- return true;
--}
--
--static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status)
--{
-- bool valid = true;
-- bam_hdr_destroy(state->h);
-- check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status);
-- if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; }
-- int i;
-- for (i = 0; i < 3; ++i) {
-- if (state->fpr[i] != state->hstdout) {
-- if (bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]); valid = false; }
-- }
-- }
-- if (state->hstdout) {
-- if (bgzf_close(state->hstdout)) {
-- print_error_errno("bam2fq", "Error closing STDOUT");
-- valid = false;
-- }
-- }
-- for (i = 0; i < 2; i++) {
-- if (state->fpi[i] && bgzf_close(state->fpi[i])) {
-- print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]);
-- valid = false;
-- }
-- }
-- kl_destroy(ktaglist,state->taglist);
-- free(state->index_sequence);
-- free(state);
-- return valid;
--}
--
--static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state)
--{
-- return (b->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY) // skip secondary and supplementary alignments
-- || (b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags
-- || (b->core.flag&(state->flag_off)) != 0
-- || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff));
--
--}
--
--static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts)
--{
-- int n;
-- bam1_t *records[3];
-- bam1_t* b = bam_init1();
-- char *current_qname = NULL;
-- int64_t n_reads = 0, n_singletons = 0; // Statistics
-- kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}};
-- int score[3];
-- int at_eof;
-- if (b == NULL ) {
-- perror("[bam2fq_mainloop] Malloc error for bam record buffer.");
-- return false;
-- }
--
-- bool valid = true;
-- while (true) {
-- int res = sam_read1(state->fp, state->h, b);
-- if (res < -1) {
-- fprintf(stderr, "[bam2fq_mainloop] Failed to read bam record.\n");
-- return false;
-- }
-- at_eof = res < 0;
--
-- if (!at_eof && filter_it_out(b, state)) continue;
-- if (!at_eof) ++n_reads;
--
-- if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) {
-- if (current_qname) {
-- if (state->illumina_tag) {
-- for (n=0; valid && n<3; n++) {
-- if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false;
-- }
-- if (!valid) break;
-- }
-- free(state->index_sequence); state->index_sequence = NULL;
-- if (score[1] > 0 && score[2] > 0) {
-- // print linebuf[1] to fpr[1], linebuf[2] to fpr[2]
-- if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- } else if (score[1] > 0 || score[2] > 0) {
-- if (state->fpse) {
-- // print whichever one exists to fpse
-- if (score[1] > 0) {
-- if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- } else {
-- if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- }
-- ++n_singletons;
-- } else {
-- if (score[1] > 0) {
-- if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- } else {
-- if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- }
-- }
-- }
-- if (score[0]) { // TODO: check this
-- // print linebuf[0] to fpr[0]
-- if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; }
-- }
-- }
--
-- if (at_eof) break;
--
-- free(current_qname);
-- current_qname = strdup(bam_get_qname(b));
-- if (!current_qname) { valid = false; break; }
-- score[0] = score[1] = score[2] = 0;
-- }
--
-- // Prefer a copy of the read that has base qualities
-- int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1;
-- if (b_score > score[which_readpart(b)]) {
-- if (state->fpi[0]) if (!tags2fq(b, state, opts)) return false;
-- records[which_readpart(b)] = b;
-- if(!bam1_to_fq(b, &linebuf[which_readpart(b)], state)) {
-- fprintf(stderr, "[%s] Error converting read to FASTA/Q\n", __func__);
-- return false;
-- }
-- score[which_readpart(b)] = b_score;
-- }
-- }
-- if (!valid)
-- {
-- perror("[bam2fq_mainloop] Error writing to FASTx files.");
-- }
-- bam_destroy1(b);
-- free(current_qname);
-- free(linebuf[0].s);
-- free(linebuf[1].s);
-- free(linebuf[2].s);
-- fprintf(stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons);
-- fprintf(stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads);
--
-- return valid;
--}
--
--int main_bam2fq(int argc, char *argv[])
--{
-- int status = EXIT_SUCCESS;
-- bam2fq_opts_t* opts = NULL;
-- bam2fq_state_t* state = NULL;
--
-- bool valid = parse_opts(argc, argv, &opts);
-- if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE;
--
-- if (!init_state(opts, &state)) return EXIT_FAILURE;
--
-- if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE;
--
-- if (!destroy_state(opts, state, &status)) return EXIT_FAILURE;
-- sam_global_args_free(&opts->ga);
-- free_opts(opts);
--
-- return status;
--}
---- python-pysam.orig/samtools/sam_view.c.pysam.c
-+++ python-pysam/samtools/sam_view.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* sam_view.c -- SAM<->BAM<->CRAM conversion.
-
-- Copyright (C) 2009-2017 Genome Research Ltd.
-+ Copyright (C) 2009-2019 Genome Research Ltd.
- Portions copyright (C) 2009, 2011, 2012 Broad Institute.
-
- Author: Heng Li <lh3@sanger.ac.uk>
-@@ -34,33 +34,25 @@
- #include <unistd.h>
- #include <math.h>
- #include <inttypes.h>
--#include <stdbool.h>
--#include <assert.h>
- #include <getopt.h>
--#include <ctype.h>
- #include "htslib/sam.h"
- #include "htslib/faidx.h"
--#include "htslib/kstring.h"
- #include "htslib/khash.h"
--#include "htslib/klist.h"
- #include "htslib/thread_pool.h"
--#include "htslib/bgzf.h"
- #include "samtools.h"
- #include "sam_opts.h"
- #include "bedidx.h"
-
--#define DEFAULT_BARCODE_TAG "BC"
--#define DEFAULT_QUALITY_TAG "QT"
--
- KHASH_SET_INIT_STR(rg)
--#define taglist_free(p)
--KLIST_INIT(ktaglist, char*, taglist_free)
-+KHASH_SET_INIT_STR(tv)
-
- typedef khash_t(rg) *rghash_t;
-+typedef khash_t(tv) *tvhash_t;
-
- // This structure contains the settings for a samview run
- typedef struct samview_settings {
- rghash_t rghash;
-+ tvhash_t tvhash;
- int min_mapQ;
- int flag_on;
- int flag_off;
-@@ -74,16 +66,17 @@
- size_t remove_aux_len;
- char** remove_aux;
- int multi_region;
-+ char* tag;
- } samview_settings_t;
-
-
- // TODO Add declarations of these to a viable htslib or samtools header
--extern const char *bam_get_library(bam_hdr_t *header, const bam1_t *b);
-+extern const char *bam_get_library(sam_hdr_t *header, const bam1_t *b);
- extern int bam_remove_B(bam1_t *b);
- extern char *samfaipath(const char *fn_ref);
-
- // Returns 0 to indicate read should be output 1 otherwise
--static int process_aln(const bam_hdr_t *h, bam1_t *b, samview_settings_t* settings)
-+static int process_aln(const sam_hdr_t *h, bam1_t *b, samview_settings_t* settings)
- {
- if (settings->remove_B) bam_remove_B(b);
- if (settings->min_qlen > 0) {
-@@ -98,7 +91,7 @@
- return 1;
- if (settings->flag_alloff && ((b->core.flag & settings->flag_alloff) == settings->flag_alloff))
- return 1;
-- if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, h->target_name[b->core.tid], b->core.pos, bam_endpos(b))))
-+ if (!settings->multi_region && settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, sam_hdr_tid2name(h, b->core.tid), b->core.pos, bam_endpos(b))))
- return 1;
- if (settings->subsam_frac > 0.) {
- uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(bam_get_qname(b)) ^ settings->subsam_seed);
-@@ -111,8 +104,17 @@
- if (k == kh_end(settings->rghash)) return 1;
- }
- }
-+ if (settings->tvhash && settings->tag) {
-+ uint8_t *s = bam_aux_get(b, settings->tag);
-+ if (s) {
-+ khint_t k = kh_get(tv, settings->tvhash, (char*)(s + 1));
-+ if (k == kh_end(settings->tvhash)) return 1;
-+ } else {
-+ return 1;
-+ }
-+ }
- if (settings->library) {
-- const char *p = bam_get_library((bam_hdr_t*)h, b);
-+ const char *p = bam_get_library((sam_hdr_t*)h, b);
- if (!p || strcmp(p, settings->library) != 0) return 1;
- }
- if (settings->remove_aux_len) {
-@@ -127,37 +129,6 @@
- return 0;
- }
-
--static char *drop_rg(char *hdtxt, rghash_t h, int *len)
--{
-- char *p = hdtxt, *q, *r, *s;
-- kstring_t str;
-- memset(&str, 0, sizeof(kstring_t));
-- while (1) {
-- int toprint = 0;
-- q = strchr(p, '\n');
-- if (q == 0) q = p + strlen(p);
-- if (q - p < 3) break; // the line is too short; then stop
-- if (strncmp(p, "@RG\t", 4) == 0) {
-- int c;
-- khint_t k;
-- if ((r = strstr(p, "\tID:")) != 0) {
-- r += 4;
-- for (s = r; *s != '\0' && *s != '\n' && *s != '\t'; ++s);
-- c = *s; *s = '\0';
-- k = kh_get(rg, h, r);
-- *s = c;
-- if (k != kh_end(h)) toprint = 1;
-- }
-- } else toprint = 1;
-- if (toprint) {
-- kputsn(p, q - p, &str); kputc('\n', &str);
-- }
-- p = q + 1;
-- }
-- *len = str.l;
-- return str.s;
--}
--
- static int usage(FILE *fp, int exit_status, int is_long_help);
-
- static int add_read_group_single(const char *subcmd, samview_settings_t *settings, char *name)
-@@ -219,39 +190,87 @@
- return (ret != -1) ? 0 : -1;
- }
-
--static inline int check_sam_write1(samFile *fp, const bam_hdr_t *h, const bam1_t *b, const char *fname, int *retp)
-+static int add_tag_value_single(const char *subcmd, samview_settings_t *settings, char *name)
- {
-- int r = sam_write1(fp, h, b);
-- if (r >= 0) return r;
-+ char *d = strdup(name);
-+ int ret = 0;
-
-- if (fname) print_error_errno("view", "writing to \"%s\" failed", fname);
-- else print_error_errno("view", "writing to standard output failed");
-+ if (d == NULL) goto err;
-
-- *retp = EXIT_FAILURE;
-- return r;
-+ if (settings->tvhash == NULL) {
-+ settings->tvhash = kh_init(tv);
-+ if (settings->tvhash == NULL) goto err;
-+ }
-+
-+ kh_put(tv, settings->tvhash, d, &ret);
-+ if (ret == -1) goto err;
-+ if (ret == 0) free(d); /* Duplicate */
-+ return 0;
-+
-+ err:
-+ print_error(subcmd, "Couldn't add \"%s\" to tag values list: memory exhausted?", name);
-+ free(d);
-+ return -1;
-+}
-+
-+static int add_tag_values_file(const char *subcmd, samview_settings_t *settings, char *fn)
-+{
-+ FILE *fp;
-+ char buf[1024];
-+ int ret = 0;
-+ if (settings->tvhash == NULL) {
-+ settings->tvhash = kh_init(tv);
-+ if (settings->tvhash == NULL) {
-+ perror(NULL);
-+ return -1;
-+ }
-+ }
-+
-+ fp = fopen(fn, "r");
-+ if (fp == NULL) {
-+ print_error_errno(subcmd, "failed to open \"%s\" for reading", fn);
-+ return -1;
-+ }
-+
-+ while (ret != -1 && !feof(fp) && fscanf(fp, "%1023s", buf) > 0) {
-+ char *d = strdup(buf);
-+ if (d != NULL) {
-+ kh_put(tv, settings->tvhash, d, &ret);
-+ if (ret == 0) free(d); /* Duplicate */
-+ } else {
-+ ret = -1;
-+ }
-+ }
-+ if (ferror(fp)) ret = -1;
-+ if (ret == -1) {
-+ print_error_errno(subcmd, "failed to read \"%s\"", fn);
-+ }
-+ fclose(fp);
-+ return (ret != -1) ? 0 : -1;
- }
-
--static void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp)
-+static inline int check_sam_write1(samFile *fp, const sam_hdr_t *h, const bam1_t *b, const char *fname, int *retp)
- {
-- int r = sam_close(fp);
-- if (r >= 0) return;
-+ int r = sam_write1(fp, h, b);
-+ if (r >= 0) return r;
-
-- // TODO Need error infrastructure so we can print a message instead of r
-- if (fname) print_error(subcmd, "error closing \"%s\": %d", fname, r);
-- else print_error(subcmd, "error closing %s: %d", null_fname, r);
-+ if (fname) print_error_errno("view", "writing to \"%s\" failed", fname);
-+ else print_error_errno("view", "writing to standard output failed");
-
- *retp = EXIT_FAILURE;
-+ return r;
- }
-
- int main_samview(int argc, char *argv[])
- {
-- int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0;
-+ int c, is_header = 0, is_header_only = 0, ret = 0, compress_level = -1, is_count = 0, has_index_file = 0, no_pg = 0;
- int64_t count = 0;
- samFile *in = 0, *out = 0, *un_out=0;
- FILE *fp_out = NULL;
-- bam_hdr_t *header = NULL;
-+ sam_hdr_t *header = NULL;
- char out_mode[5], out_un_mode[5], *out_format = "";
-- char *fn_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0;
-+ char *fn_in = 0, *fn_idx_in = 0, *fn_out = 0, *fn_list = 0, *q, *fn_un_out = 0;
-+ char *fn_out_idx = NULL, *fn_un_out_idx = NULL, *arg_list = NULL;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
- htsThreadPool p = {NULL, 0};
- int filter_state = ALL, filter_op = 0;
-@@ -259,6 +278,7 @@
-
- samview_settings_t settings = {
- .rghash = NULL,
-+ .tvhash = NULL,
- .min_mapQ = 0,
- .flag_on = 0,
- .flag_off = 0,
-@@ -269,11 +289,13 @@
- .subsam_frac = -1.,
- .library = NULL,
- .bed = NULL,
-- .multi_region = 0
-+ .multi_region = 0,
-+ .tag = NULL
- };
-
- static const struct option lopts[] = {
- SAM_OPT_GLOBAL_OPTIONS('-', 0, 'O', 0, 'T', '@'),
-+ {"no-PG", no_argument, NULL, 1},
- { NULL, 0, NULL, 0 }
- };
-
-@@ -290,7 +312,7 @@
- opterr = 0;
-
- while ((c = getopt_long(argc, argv,
-- "SbBcCt:h1Ho:O:q:f:F:G:ul:r:T:R:L:s:@:m:x:U:M",
-+ "SbBcCt:h1Ho:O:q:f:F:G:ul:r:T:R:d:D:L:s:@:m:x:U:MX",
- lopts, NULL)) >= 0) {
- switch (c) {
- case 's':
-@@ -300,7 +322,6 @@
- srand(settings.subsam_seed);
- settings.subsam_seed = rand();
- }
--
- if (q && *q == '.') {
- settings.subsam_frac = strtod(q, &q);
- if (*q) ret = 1;
-@@ -323,6 +344,7 @@
- case 'H': is_header_only = 1; break;
- case 'o': fn_out = strdup(optarg); break;
- case 'U': fn_un_out = strdup(optarg); break;
-+ case 'X': has_index_file = 1; break;
- case 'f': settings.flag_on |= strtol(optarg, 0, 0); break;
- case 'F': settings.flag_off |= strtol(optarg, 0, 0); break;
- case 'G': settings.flag_alloff |= strtol(optarg, 0, 0); break;
-@@ -349,6 +371,63 @@
- goto view_end;
- }
- break;
-+ case 'd':
-+ if (strlen(optarg) < 4 || optarg[2] != ':') {
-+ print_error_errno("view", "Invalid \"tag:value\" option: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+
-+ if (settings.tag) {
-+ if (settings.tag[0] != optarg[0] || settings.tag[1] != optarg[1]) {
-+ print_error("view", "Different tag \"%s\" was specified before: \"%s\"", settings.tag, optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ } else {
-+ if (!(settings.tag = calloc(3, 1))) {
-+ print_error("view", "Could not allocate memory for tag: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ memcpy(settings.tag, optarg, 2);
-+ }
-+
-+ if (add_tag_value_single("view", &settings, optarg+3) != 0) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ break;
-+ case 'D':
-+ // Allow ";" as delimiter besides ":" to support MinGW CLI POSIX
-+ // path translation as described at:
-+ // http://www.mingw.org/wiki/Posix_path_conversion
-+ if (strlen(optarg) < 4 || (optarg[2] != ':' && optarg[2] != ';')) {
-+ print_error_errno("view", "Invalid \"tag:file\" option: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+
-+ if (settings.tag) {
-+ if (settings.tag[0] != optarg[0] || settings.tag[1] != optarg[1]) {
-+ print_error("view", "Different tag \"%s\" was specified before: \"%s\"", settings.tag, optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ } else {
-+ if (!(settings.tag = calloc(3, 1))) {
-+ print_error("view", "Could not allocate memory for tag: \"%s\"", optarg);
-+ ret = 1;
-+ goto view_end;
-+ }
-+ memcpy(settings.tag, optarg, 2);
-+ }
-+
-+ if (add_tag_values_file("view", &settings, optarg+3) != 0) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ break;
- /* REMOVED as htslib doesn't support this
- //case 'x': out_format = "x"; break;
- //case 'X': out_format = "X"; break;
-@@ -382,6 +461,7 @@
- }
- break;
- case 'M': settings.multi_region = 1; break;
-+ case 1: no_pg = 1; break;
- default:
- if (parse_sam_global_opt(c, optarg, lopts, &ga) != 0)
- return usage(samtools_stderr, EXIT_FAILURE, 0);
-@@ -431,13 +511,8 @@
- ret = 1;
- goto view_end;
- }
-- if (settings.rghash) { // FIXME: I do not know what "bam_header_t::n_text" is for...
-- char *tmp;
-- int l;
-- tmp = drop_rg(header->text, settings.rghash, &l);
-- free(header->text);
-- header->text = tmp;
-- header->l_text = l;
-+ if (settings.rghash) {
-+ sam_hdr_remove_lines(header, "RG", "ID", settings.rghash);
- }
- if (!is_count) {
- if ((out = sam_open_format(fn_out? fn_out : "-", out_mode, &ga.out)) == 0) {
-@@ -452,7 +527,25 @@
- goto view_end;
- }
- }
-- if (*out_format || is_header ||
-+
-+ if (!no_pg) {
-+ if (!(arg_list = stringify_argv(argc+1, argv-1))) {
-+ print_error("view", "failed to create arg_list");
-+ ret = 1;
-+ goto view_end;
-+ }
-+ if (sam_hdr_add_pg(header, "samtools",
-+ "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL)) {
-+ print_error("view", "failed to add PG line to the header");
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
-+
-+ if (*out_format || ga.write_index || is_header ||
- out_mode[1] == 'b' || out_mode[1] == 'c' ||
- (ga.out.format != sam && ga.out.format != unknown_format)) {
- if (sam_hdr_write(out, header) != 0) {
-@@ -461,6 +554,13 @@
- goto view_end;
- }
- }
-+ if (ga.write_index) {
-+ if (!(fn_out_idx = auto_index(out, fn_out, header))) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
-+
- if (fn_un_out) {
- if ((un_out = sam_open_format(fn_un_out, out_un_mode, &ga.out)) == 0) {
- print_error_errno("view", "failed to open \"%s\" for writing", fn_un_out);
-@@ -483,6 +583,12 @@
- goto view_end;
- }
- }
-+ if (ga.write_index) {
-+ if (!(fn_un_out_idx = auto_index(un_out, fn_un_out, header))) {
-+ ret = 1;
-+ goto view_end;
-+ }
-+ }
- }
- }
- else {
-@@ -507,11 +613,23 @@
- }
- if (is_header_only) goto view_end; // no need to print alignments
-
-+ if (has_index_file) {
-+ fn_idx_in = (optind+1 < argc)? argv[optind+1] : 0;
-+ if (fn_idx_in == 0) {
-+ fprintf(samtools_stderr, "[main_samview] incorrect number of arguments for -X option. Aborting.\n");
-+ return 1;
-+ }
-+ }
-+
- if (settings.multi_region) {
-- if (optind < argc - 1) { //regions have been specified in the command line
-+ if (!has_index_file && optind < argc - 1) { //regions have been specified in the command line
- settings.bed = bed_hash_regions(settings.bed, argv, optind+1, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file
- if (!filter_op)
- filter_state = FILTERED;
-+ } else if (has_index_file && optind < argc - 2) {
-+ settings.bed = bed_hash_regions(settings.bed, argv, optind+2, argc, &filter_op); //insert(1) or filter out(0) the regions from the command line in the same hash table as the bed file
-+ if (!filter_op)
-+ filter_state = FILTERED;
- } else {
- bed_unify(settings.bed);
- }
-@@ -520,7 +638,13 @@
- if (settings.bed == NULL) { // index is unavailable or no regions have been specified
- fprintf(samtools_stderr, "[main_samview] no regions or BED file have been provided. Aborting.\n");
- } else {
-- hts_idx_t *idx = sam_index_load(in, fn_in); // load index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx_in != 0) {
-+ idx = sam_index_load2(in, fn_in, fn_idx_in); // load index
-+ } else {
-+ idx = sam_index_load(in, fn_in);
-+ }
- if (idx != NULL) {
-
- int regcount = 0;
-@@ -557,7 +681,7 @@
- }
- bam_destroy1(b);
- } else {
-- if (optind + 1 >= argc) { // convert/print the entire file
-+ if ((has_index_file && optind >= argc - 2) || (!has_index_file && optind >= argc - 1)) { // convert/print the entire file
- bam1_t *b = bam_init1();
- int r;
- while ((r = sam_read1(in, header, b)) >= 0) { // read one alignment from `in'
-@@ -576,22 +700,25 @@
- } else { // retrieve alignments in specified regions
- int i;
- bam1_t *b;
-- hts_idx_t *idx = sam_index_load(in, fn_in); // load index
-+ hts_idx_t *idx = NULL;
-+ // If index filename has not been specfied, look in BAM folder
-+ if (fn_idx_in != NULL) {
-+ idx = sam_index_load2(in, fn_in, fn_idx_in); // load index
-+ } else {
-+ idx = sam_index_load(in, fn_in);
-+ }
- if (idx == 0) { // index is unavailable
- fprintf(samtools_stderr, "[main_samview] random alignment retrieval only works for indexed BAM or CRAM files.\n");
- ret = 1;
- goto view_end;
- }
- b = bam_init1();
-- for (i = optind + 1; i < argc; ++i) {
-+
-+ for (i = (has_index_file)? optind+2 : optind+1; i < argc; ++i) {
- int result;
- hts_itr_t *iter = sam_itr_querys(idx, header, argv[i]); // parse a region in the format like `chr2:100-200'
- if (iter == NULL) { // region invalid or reference name not found
-- int beg, end;
-- if (hts_parse_reg(argv[i], &beg, &end))
-- fprintf(samtools_stderr, "[main_samview] region \"%s\" specifies an unknown reference name. Continue anyway.\n", argv[i]);
-- else
-- fprintf(samtools_stderr, "[main_samview] region \"%s\" could not be parsed. Continue anyway.\n", argv[i]);
-+ fprintf(samtools_stderr, "[main_samview] region \"%s\" specifies an invalid region or unknown reference. Continue anyway.\n", argv[i]);
- continue;
- }
- // fetch alignments
-@@ -615,6 +742,17 @@
- }
- }
-
-+ if (ga.write_index) {
-+ if (sam_idx_save(out) < 0) {
-+ print_error_errno("view", "writing index failed");
-+ ret = 1;
-+ }
-+ if (un_out && sam_idx_save(un_out) < 0) {
-+ print_error_errno("view", "writing index failed");
-+ ret = 1;
-+ }
-+ }
-+
- view_end:
- if (is_count && ret == 0) {
- if (fprintf(fn_out? fp_out : samtools_stdout, "%" PRId64 "\n", count) < 0) {
-@@ -632,7 +770,7 @@
-
- free(fn_list); free(fn_out); free(settings.library); free(fn_un_out);
- sam_global_args_free(&ga);
-- if ( header ) bam_hdr_destroy(header);
-+ if ( header ) sam_hdr_destroy(header);
- if (settings.bed) bed_destroy(settings.bed);
- if (settings.rghash) {
- khint_t k;
-@@ -640,13 +778,28 @@
- if (kh_exist(settings.rghash, k)) free((char*)kh_key(settings.rghash, k));
- kh_destroy(rg, settings.rghash);
- }
-+ if (settings.tvhash) {
-+ khint_t k;
-+ for (k = 0; k < kh_end(settings.tvhash); ++k)
-+ if (kh_exist(settings.tvhash, k)) free((char*)kh_key(settings.tvhash, k));
-+ kh_destroy(tv, settings.tvhash);
-+ }
- if (settings.remove_aux_len) {
- free(settings.remove_aux);
- }
-+ if (settings.tag) {
-+ free(settings.tag);
-+ }
-
- if (p.pool)
- hts_tpool_destroy(p.pool);
-
-+ if (fn_out_idx)
-+ free(fn_out_idx);
-+ if (fn_un_out_idx)
-+ free(fn_un_out_idx);
-+ free(arg_list);
-+
- return ret;
- }
-
-@@ -669,10 +822,16 @@
- " -U FILE output reads not selected by filters to FILE [null]\n"
- // extra input
- " -t FILE FILE listing reference names and lengths (see long help) [null]\n"
-+" -X include customized index file\n"
- // read filters
- " -L FILE only include reads overlapping this BED FILE [null]\n"
- " -r STR only include reads in read group STR [null]\n"
- " -R FILE only include reads with read group listed in FILE [null]\n"
-+" -d STR:STR\n"
-+" only include reads with tag STR and associated value STR [null]\n"
-+" -D STR:FILE\n"
-+" only include reads with tag STR and associated values listed in\n"
-+" FILE [null]\n"
- " -q INT only include reads with mapping quality >= INT [0]\n"
- " -l STR only include reads in library STR [null]\n"
- " -m INT only include reads with number of CIGAR operations consuming\n"
-@@ -689,9 +848,10 @@
- " -B collapse the backward CIGAR operation\n"
- // general options
- " -? print long help, including note about region specification\n"
--" -S ignored (input format is auto-detected)\n");
-+" -S ignored (input format is auto-detected)\n"
-+" --no-PG do not add a PG line\n");
-
-- sam_global_opt_help(fp, "-.O.T@");
-+ sam_global_opt_help(fp, "-.O.T@..");
- fprintf(fp, "\n");
-
- if (is_long_help)
-@@ -749,903 +909,3 @@
- free(argv2);
- return ret;
- }
--
--int8_t seq_comp_table[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
--static const char *copied_tags[] = { "RG", "BC", "QT", NULL };
--
--static void bam2fq_usage(FILE *to, const char *command)
--{
-- int fq = strcasecmp("fastq", command) == 0 || strcasecmp("bam2fq", command) == 0;
-- fprintf(to,
--"Usage: samtools %s [options...] <in.bam>\n", command);
-- fprintf(to,
--"Options:\n"
--" -0 FILE write reads designated READ_OTHER to FILE\n"
--" -1 FILE write reads designated READ1 to FILE\n"
--" -2 FILE write reads designated READ2 to FILE\n"
--" note: if a singleton file is specified with -s, only\n"
--" paired reads will be written to the -1 and -2 files.\n"
--" -f INT only include reads with all of the FLAGs in INT present [0]\n" // F&x == x
--" -F INT only include reads with none of the FLAGS in INT present [0]\n" // F&x == 0
--" -G INT only EXCLUDE reads with all of the FLAGs in INT present [0]\n" // !(F&x == x)
--" -n don't append /1 and /2 to the read name\n"
--" -N always append /1 and /2 to the read name\n");
-- if (fq) fprintf(to,
--" -O output quality in the OQ tag if present\n");
-- fprintf(to,
--" -s FILE write singleton reads designated READ1 or READ2 to FILE\n"
--" -t copy RG, BC and QT tags to the %s header line\n",
-- fq ? "FASTQ" : "FASTA");
-- fprintf(to,
--" -T TAGLIST copy arbitrary tags to the %s header line\n",
-- fq ? "FASTQ" : "FASTA");
-- if (fq) fprintf(to,
--" -v INT default quality score if not given in file [1]\n"
--" -i add Illumina Casava 1.8 format entry to header (eg 1:N:0:ATCACG)\n"
--" -c compression level [0..9] to use when creating gz or bgzf fastq files\n"
--" --i1 FILE write first index reads to FILE\n"
--" --i2 FILE write second index reads to FILE\n"
--" --barcode-tag TAG Barcode tag [default: " DEFAULT_BARCODE_TAG "]\n"
--" --quality-tag TAG Quality tag [default: " DEFAULT_QUALITY_TAG "]\n"
--" --index-format STR How to parse barcode and quality tags\n\n");
-- sam_global_opt_help(to, "-.--.@");
-- fprintf(to,
--"\n"
--"Reads are designated READ1 if FLAG READ1 is set and READ2 is not set.\n"
--"Reads are designated READ2 if FLAG READ1 is not set and READ2 is set.\n"
--"Reads are designated READ_OTHER if FLAGs READ1 and READ2 are either both set\n"
--"or both unset.\n"
--"Run 'samtools flags' for more information on flag codes and meanings.\n");
-- fprintf(to,
--"\n"
--"The index-format string describes how to parse the barcode and quality tags, for example:\n"
--" i14i8 the first 14 characters are index 1, the next 8 characters are index 2\n"
--" n8i14 ignore the first 8 characters, and use the next 14 characters for index 1\n"
--"If the tag contains a separator, then the numeric part can be replaced with '*' to mean\n"
--"'read until the separator or end of tag', for example:\n"
--" n*i* ignore the left part of the tag until the separator, then use the second part\n"
--" of the tag as index 1\n");
-- fprintf(to,
--"\n"
--"Examples:\n"
--" To get just the paired reads in separate files, use:\n"
--" samtools %s -1 paired1.%s -2 paired2.%s -0 /dev/null -s /dev/null -n -F 0x900 in.bam\n"
--"\n To get all non-supplementary/secondary reads in a single file, redirect the output:\n"
--" samtools %s -F 0x900 in.bam > all_reads.%s\n",
-- command, fq ? "fq" : "fa", fq ? "fq" : "fa",
-- command, fq ? "fq" : "fa");
--}
--
--typedef enum { READ_UNKNOWN = 0, READ_1 = 1, READ_2 = 2 } readpart;
--typedef enum { FASTA, FASTQ } fastfile;
--typedef struct bam2fq_opts {
-- char *fnse;
-- char *fnr[3];
-- char *fn_input; // pointer to input filename in argv do not free
-- bool has12, has12always, use_oq, copy_tags, illumina_tag;
-- int flag_on, flag_off, flag_alloff;
-- sam_global_args ga;
-- fastfile filetype;
-- int def_qual;
-- char *barcode_tag;
-- char *quality_tag;
-- char *index_file[2];
-- char *index_format;
-- char *extra_tags;
-- char compression_level;
--} bam2fq_opts_t;
--
--typedef struct bam2fq_state {
-- samFile *fp;
-- BGZF *fpse;
-- BGZF *fpr[3];
-- BGZF *fpi[2];
-- BGZF *hsamtools_stdout;
-- bam_hdr_t *h;
-- bool has12, use_oq, copy_tags, illumina_tag;
-- int flag_on, flag_off, flag_alloff;
-- fastfile filetype;
-- int def_qual;
-- klist_t(ktaglist) *taglist;
-- char *index_sequence;
-- char compression_level;
--} bam2fq_state_t;
--
--/*
-- * Get and decode the read from a BAM record.
-- *
-- * TODO: htslib really needs an interface for this. Consider this or perhaps
-- * bam_get_seq_str (current vs original orientation) and bam_get_qual_str
-- * functions as string formatted equivalents to bam_get_{seq,qual}?
-- */
--
--/*
-- * Reverse a string in place.
-- * From http://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux.
-- * Author Sumit-naik: http://stackoverflow.com/users/4590926/sumit-naik
-- */
--static char *reverse(char *str)
--{
-- int i = strlen(str)-1,j=0;
-- char ch;
-- while (i>j) {
-- ch = str[i];
-- str[i]= str[j];
-- str[j] = ch;
-- i--;
-- j++;
-- }
-- return str;
--}
--
--/* return the read, reverse complemented if necessary */
--static char *get_read(const bam1_t *rec)
--{
-- int len = rec->core.l_qseq + 1;
-- char *read = calloc(1, len);
-- char *seq = (char *)bam_get_seq(rec);
-- int n;
--
-- if (!read) return NULL;
--
-- for (n=0; n < rec->core.l_qseq; n++) {
-- if (rec->core.flag & BAM_FREVERSE) read[n] = seq_nt16_str[seq_comp_table[bam_seqi(seq,n)]];
-- else read[n] = seq_nt16_str[bam_seqi(seq,n)];
-- }
-- if (rec->core.flag & BAM_FREVERSE) reverse(read);
-- return read;
--}
--
--/*
-- * get and decode the quality from a BAM record
-- */
--static int get_quality(const bam1_t *rec, char **qual_out)
--{
-- char *quality = calloc(1, rec->core.l_qseq + 1);
-- char *q = (char *)bam_get_qual(rec);
-- int n;
--
-- if (!quality) return -1;
--
-- if (*q == '\xff') {
-- free(quality);
-- *qual_out = NULL;
-- return 0;
-- }
--
-- for (n=0; n < rec->core.l_qseq; n++) {
-- quality[n] = q[n]+33;
-- }
-- if (rec->core.flag & BAM_FREVERSE) reverse(quality);
-- *qual_out = quality;
-- return 0;
--}
--
--//
--// End of htslib complaints
--//
--
--
--static readpart which_readpart(const bam1_t *b)
--{
-- if ((b->core.flag & BAM_FREAD1) && !(b->core.flag & BAM_FREAD2)) {
-- return READ_1;
-- } else if ((b->core.flag & BAM_FREAD2) && !(b->core.flag & BAM_FREAD1)) {
-- return READ_2;
-- } else {
-- return READ_UNKNOWN;
-- }
--}
--
--/*
-- * parse the length part from the index-format string
-- */
--static int getLength(char **s)
--{
-- int n = 0;
-- while (**s) {
-- if (**s == '*') { n=-1; (*s)++; break; }
-- if ( !isdigit(**s)) break;
-- n = n*10 + ((**s)-'0');
-- (*s)++;
-- }
-- return n;
--}
--
--static bool copy_tag(const char *tag, const bam1_t *rec, kstring_t *linebuf)
--{
-- uint8_t *s = bam_aux_get(rec, tag);
-- if (s) {
-- char aux_type = *s;
-- switch (aux_type) {
-- case 'C':
-- case 'S': aux_type = 'I'; break;
-- case 'c':
-- case 's': aux_type = 'i'; break;
-- case 'd': aux_type = 'f'; break;
-- }
--
-- // Ensure space. Need 6 chars + length of tag. Max length of
-- // i is 16, A is 21, B currently 26, Z is unknown, so
-- // have to check that one later.
-- if (ks_resize(linebuf, ks_len(linebuf) + 64) < 0) return false;
--
-- kputc('\t', linebuf);
-- kputsn(tag, 2, linebuf);
-- kputc(':', linebuf);
-- kputc(aux_type=='I'? 'i': aux_type, linebuf);
-- kputc(':', linebuf);
-- switch (aux_type) {
-- case 'H':
-- case 'Z':
-- if (kputs(bam_aux2Z(s), linebuf) < 0) return false;
-- break;
-- case 'i': kputw(bam_aux2i(s), linebuf); break;
-- case 'I': kputuw(bam_aux2i(s), linebuf); break;
-- case 'A': kputc(bam_aux2A(s), linebuf); break;
-- case 'f': kputd(bam_aux2f(s), linebuf); break;
-- case 'B': kputs("*** Unhandled aux type ***", linebuf); return false;
-- default: kputs("*** Unknown aux type ***", linebuf); return false;
-- }
-- }
-- return true;
--}
--
--static int insert_index_sequence_into_linebuf(char *index_sequence, kstring_t *linebuf, bam1_t *rec)
--{
-- if (!index_sequence) return 0;
--
-- kstring_t new = {0,0,NULL};
-- if (linebuf->s) {
-- char *s = strchr(linebuf->s, '\n');
-- if (s) {
-- if (ks_resize(&new, linebuf->l + strlen(index_sequence) + 16) < 0)
-- return -1;
-- *s = 0;
-- kputs(linebuf->s, &new);
-- kputc(' ', &new);
-- readpart readpart = which_readpart(rec);
-- if (readpart == READ_1) kputc('1', &new);
-- else if (readpart == READ_2) kputc('2', &new);
-- else kputc('0', &new);
--
-- kputc(':', &new);
-- if (rec->core.flag & BAM_FQCFAIL) kputc('Y', &new);
-- else kputc('N', &new);
--
-- kputs(":0:", &new);
-- kputs(index_sequence, &new);
-- kputc('\n', &new);
-- kputs(s+1, &new);
-- free(ks_release(linebuf));
-- linebuf->s = new.s; linebuf->l = new.l; linebuf->m = new.m;
-- }
-- }
-- return 0;
--}
--
--static bool make_fq_line(const bam1_t *rec, char *seq, char *qual, kstring_t *linebuf, const bam2fq_state_t *state)
--{
-- int i;
--
-- linebuf->l = 0;
-- // Write read name
-- if (kputc(state->filetype == FASTA? '>' : '@', linebuf) < 0) return false;
-- if (kputs(bam_get_qname(rec), linebuf) < 0) return false;
-- // Add the /1 /2 if requested
-- if (state->has12) {
-- readpart readpart = which_readpart(rec);
-- if (readpart == READ_1) {
-- if (kputs("/1", linebuf) < 0) return false;
-- } else if (readpart == READ_2) {
-- if (kputs("/2", linebuf) < 0) return false;
-- }
-- }
-- if (state->copy_tags) {
-- for (i = 0; copied_tags[i]; ++i) {
-- if (!copy_tag(copied_tags[i], rec, linebuf)) {
-- fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-- return false;
-- }
-- }
-- }
--
-- if (state->taglist->size) {
-- kliter_t(ktaglist) *p;
-- for (p = kl_begin(state->taglist); p != kl_end(state->taglist); p = kl_next(p)) {
-- if (!copy_tag(kl_val(p), rec, linebuf)) {
-- fprintf(samtools_stderr, "Problem copying aux tags: [%s]\n", linebuf->s);
-- return false;
-- }
-- }
-- }
--
-- if (kputc('\n', linebuf) < 0) return false;
-- if (kputs(seq, linebuf) < 0) return false;
-- if (kputc('\n', linebuf) < 0) return false;
--
-- if (state->filetype == FASTQ) {
-- // Write quality
-- if (kputs("+\n", linebuf) < 0) return false;
-- if (qual && *qual) {
-- if (kputs(qual, linebuf) < 0) return false;
-- } else {
-- int len = strlen(seq);
-- if (ks_resize(linebuf, ks_len(linebuf) + len + 1) < 0) return false;
-- for (i = 0; i < len; ++i) {
-- kputc(33 + state->def_qual, linebuf);
-- }
-- }
-- if (kputc('\n', linebuf) < 0) return false;
-- }
-- return true;
--}
--
--/*
-- * Create FASTQ lines from the barcode tag using the index-format
-- */
--static bool tags2fq(bam1_t *rec, bam2fq_state_t *state, const bam2fq_opts_t* opts)
--{
-- uint8_t *p;
-- char *ifmt = opts->index_format;
-- char *tag = NULL;
-- char *qual = NULL;
-- char *sub_tag = NULL;
-- char *sub_qual = NULL;
-- size_t tag_len;
-- int file_number = 0;
-- kstring_t linebuf = { 0, 0, NULL }; // Buffer
--
--
-- // read barcode tag
-- p = bam_aux_get(rec,opts->barcode_tag);
-- if (p) tag = bam_aux2Z(p);
--
-- if (!tag) return true; // there is no tag
--
-- tag_len = strlen(tag);
-- sub_tag = calloc(1, tag_len + 1);
-- if (!sub_tag) goto fail;
-- sub_qual = calloc(1, tag_len + 1);
-- if (!sub_qual) goto fail;
--
-- // read quality tag
-- p = bam_aux_get(rec, opts->quality_tag);
-- if (p) qual = bam_aux2Z(p);
--
-- // Parse the index-format string
-- while (*ifmt) {
-- if (file_number > 1) break; // shouldn't happen if we've validated paramaters correctly
-- char action = *ifmt; // should be 'i' or 'n'
-- ifmt++; // skip over action
-- int index_len = getLength(&ifmt);
-- int n = 0;
--
-- if (index_len < 0) {
-- // read until separator
-- while (isalpha(*tag)) {
-- sub_tag[n] = *tag++;
-- if (qual) sub_qual[n] = *qual++;
-- n++;
-- }
-- if (*tag) { // skip separator
-- tag++;
-- if (qual) qual++;
-- }
-- } else {
-- // read index_len characters
-- while (index_len-- && *tag) {
-- sub_tag[n] = *tag++;
-- if (qual) sub_qual[n] = *qual++;
-- n++;
-- }
-- }
-- sub_tag[n] = '\0';
-- sub_qual[n] = '\0';
--
-- if (action=='i' && *sub_tag && state->fpi[file_number]) {
-- //if (file_number==0) state->index_sequence = strdup(sub_tag); // we're going to need this later...
-- state->index_sequence = strdup(sub_tag); // we're going to need this later...
-- if (!state->index_sequence) goto fail;
-- if (!make_fq_line(rec, sub_tag, sub_qual, &linebuf, state)) goto fail;
-- if (state->illumina_tag) {
-- if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf, rec) < 0) {
-- goto fail;
-- }
-- }
-- if (bgzf_write(state->fpi[file_number++], linebuf.s, linebuf.l) < 0)
-- goto fail;
-- }
--
-- }
--
-- free(sub_qual); free(sub_tag);
-- free(linebuf.s);
-- return true;
--
-- fail:
-- perror(__func__);
-- free(sub_qual); free(sub_tag);
-- free(linebuf.s);
-- return true;
--}
--
--// Transform a bam1_t record into a string with the FASTQ representation of it
--// @returns false for error, true for success
--static bool bam1_to_fq(const bam1_t *b, kstring_t *linebuf, const bam2fq_state_t *state)
--{
-- int32_t qlen = b->core.l_qseq;
-- assert(qlen >= 0);
-- const uint8_t *oq = NULL;
-- char *qual = NULL;
--
-- char *seq = get_read(b);
-- if (!seq) return false;
--
-- if (state->use_oq) oq = bam_aux_get(b, "OQ");
-- if (oq && *oq=='Z') {
-- qual = strdup(bam_aux2Z(oq));
-- if (!qual) goto fail;
-- if (b->core.flag & BAM_FREVERSE) { // read is reverse complemented
-- reverse(qual);
-- }
-- } else {
-- if (get_quality(b, &qual) < 0) goto fail;
-- }
--
-- if (!make_fq_line(b, seq, qual, linebuf, state)) goto fail;
--
-- free(qual);
-- free(seq);
-- return true;
--
-- fail:
-- free(seq);
-- free(qual);
-- return false;
--}
--
--static void free_opts(bam2fq_opts_t *opts)
--{
-- free(opts->barcode_tag);
-- free(opts->quality_tag);
-- free(opts->index_format);
-- free(opts->extra_tags);
-- free(opts);
--}
--
--// return true if valid
--static bool parse_opts(int argc, char *argv[], bam2fq_opts_t** opts_out)
--{
-- // Parse args
-- bam2fq_opts_t* opts = calloc(1, sizeof(bam2fq_opts_t));
-- opts->has12 = true;
-- opts->has12always = false;
-- opts->filetype = FASTQ;
-- opts->def_qual = 1;
-- opts->barcode_tag = NULL;
-- opts->quality_tag = NULL;
-- opts->index_format = NULL;
-- opts->index_file[0] = NULL;
-- opts->index_file[1] = NULL;
-- opts->extra_tags = NULL;
-- opts->compression_level = 1;
--
-- int c;
-- sam_global_args_init(&opts->ga);
-- static const struct option lopts[] = {
-- SAM_OPT_GLOBAL_OPTIONS('-', 0, '-', '-', 0, '@'),
-- {"i1", required_argument, NULL, 1},
-- {"I1", required_argument, NULL, 1},
-- {"i2", required_argument, NULL, 2},
-- {"I2", required_argument, NULL, 2},
-- {"if", required_argument, NULL, 3},
-- {"IF", required_argument, NULL, 3},
-- {"index-format", required_argument, NULL, 3},
-- {"barcode-tag", required_argument, NULL, 'b'},
-- {"quality-tag", required_argument, NULL, 'q'},
-- { NULL, 0, NULL, 0 }
-- };
-- while ((c = getopt_long(argc, argv, "0:1:2:f:F:G:niNOs:c:tT:v:@:", lopts, NULL)) > 0) {
-- switch (c) {
-- case 'b': opts->barcode_tag = strdup(optarg); break;
-- case 'q': opts->quality_tag = strdup(optarg); break;
-- case 1 : opts->index_file[0] = optarg; break;
-- case 2 : opts->index_file[1] = optarg; break;
-- case 3 : opts->index_format = strdup(optarg); break;
-- case '0': opts->fnr[0] = optarg; break;
-- case '1': opts->fnr[1] = optarg; break;
-- case '2': opts->fnr[2] = optarg; break;
-- case 'f': opts->flag_on |= strtol(optarg, 0, 0); break;
-- case 'F': opts->flag_off |= strtol(optarg, 0, 0); break;
-- case 'G': opts->flag_alloff |= strtol(optarg, 0, 0); break;
-- case 'n': opts->has12 = false; break;
-- case 'N': opts->has12always = true; break;
-- case 'O': opts->use_oq = true; break;
-- case 's': opts->fnse = optarg; break;
-- case 't': opts->copy_tags = true; break;
-- case 'i': opts->illumina_tag = true; break;
-- case 'c': opts->compression_level = atoi(optarg); break;
-- case 'T': opts->extra_tags = strdup(optarg); break;
-- case 'v': opts->def_qual = atoi(optarg); break;
-- case '?': bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false;
-- default:
-- if (parse_sam_global_opt(c, optarg, lopts, &opts->ga) != 0) {
-- bam2fq_usage(samtools_stderr, argv[0]); free_opts(opts); return false;
-- }
-- break;
-- }
-- }
--
-- if (opts->fnr[1] || opts->fnr[2]) opts->has12 = false;
-- if (opts->has12always) opts->has12 = true;
--
-- if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG);
-- if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG);
--
-- int nIndex = 0;
-- if (opts->index_format) {
-- char *s;
-- for (s = opts->index_format; *s; s++) {
-- if (*s == 'i') nIndex++;
-- }
-- }
-- if (nIndex>2) {
-- fprintf(samtools_stderr,"Invalid index format: more than 2 indexes\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (opts->index_file[1] && !opts->index_file[0]) {
-- fprintf(samtools_stderr, "Index one specified, but index two not given\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==2 && !opts->index_file[1]) {
-- fprintf(samtools_stderr, "index_format specifies two indexes, but only one index file given\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==1 && !opts->index_file[0]) {
-- fprintf(samtools_stderr, "index_format specifies an index, but no index file given\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (nIndex==0 && opts->index_file[0]) {
-- fprintf(samtools_stderr, "index_format not specified, but index file given\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if (opts->def_qual < 0 || 93 < opts->def_qual) {
-- fprintf(samtools_stderr, "Invalid -v default quality %i, allowed range 0 to 93\n", opts->def_qual);
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- const char* type_str = argv[0];
-- if (strcasecmp("fastq", type_str) == 0 || strcasecmp("bam2fq", type_str) == 0) {
-- opts->filetype = FASTQ;
-- } else if (strcasecmp("fasta", type_str) == 0) {
-- opts->filetype = FASTA;
-- } else {
-- print_error("bam2fq", "Unrecognised type call \"%s\", this should be impossible... but you managed it!", type_str);
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if ((argc - (optind)) == 0) {
-- fprintf(samtools_stderr, "No input file specified.\n");
-- bam2fq_usage(samtools_stdout, argv[0]);
-- free_opts(opts);
-- return false;
-- }
--
-- if ((argc - (optind)) != 1) {
-- fprintf(samtools_stderr, "Too many arguments.\n");
-- bam2fq_usage(samtools_stderr, argv[0]);
-- free_opts(opts);
-- return false;
-- }
-- opts->fn_input = argv[optind];
-- *opts_out = opts;
-- return true;
--}
--
--static BGZF *open_fqfile(char *filename, int c)
--{
-- char mode[4] = "w";
-- size_t len = strlen(filename);
--
-- mode[2] = 0; mode[3] = 0;
-- if (len > 3 && strstr(filename + (len - 3),".gz")) {
-- mode[1] = 'g'; mode[2] = c+'0';
-- } else if ((len > 4 && strstr(filename + (len - 4),".bgz"))
-- || (len > 5 && strstr(filename + (len - 5),".bgzf"))) {
-- mode[1] = c+'0';
-- } else {
-- mode[1] = 'u';
-- }
--
-- return bgzf_open(filename,mode);
--}
--
--static bool init_state(const bam2fq_opts_t* opts, bam2fq_state_t** state_out)
--{
-- bam2fq_state_t* state = calloc(1, sizeof(bam2fq_state_t));
-- state->flag_on = opts->flag_on;
-- state->flag_off = opts->flag_off;
-- state->flag_alloff = opts->flag_alloff;
-- state->has12 = opts->has12;
-- state->use_oq = opts->use_oq;
-- state->illumina_tag = opts->illumina_tag;
-- state->copy_tags = opts->copy_tags;
-- state->filetype = opts->filetype;
-- state->def_qual = opts->def_qual;
-- state->index_sequence = NULL;
-- state->hsamtools_stdout = NULL;
-- state->compression_level = opts->compression_level;
--
-- state->taglist = kl_init(ktaglist);
-- if (opts->extra_tags) {
-- char *save_p;
-- char *s = strtok_r(opts->extra_tags, ",", &save_p);
-- while (s) {
-- if (strlen(s) != 2) {
-- fprintf(samtools_stderr, "Parsing extra tags - '%s' is not two characters\n", s);
-- free(state);
-- return false;
-- }
-- char **et = kl_pushp(ktaglist, state->taglist);
-- *et = s;
-- s = strtok_r(NULL, ",", &save_p);
-- }
-- }
--
-- state->fp = sam_open(opts->fn_input, "r");
-- if (state->fp == NULL) {
-- print_error_errno("bam2fq","Cannot read file \"%s\"", opts->fn_input);
-- free(state);
-- return false;
-- }
-- if (opts->ga.nthreads > 0)
-- hts_set_threads(state->fp, opts->ga.nthreads);
-- uint32_t rf = SAM_QNAME | SAM_FLAG | SAM_SEQ | SAM_QUAL;
-- if (opts->use_oq || opts->extra_tags || opts->index_file[0]) rf |= SAM_AUX;
-- if (hts_set_opt(state->fp, CRAM_OPT_REQUIRED_FIELDS, rf)) {
-- fprintf(samtools_stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
-- free(state);
-- return false;
-- }
-- if (hts_set_opt(state->fp, CRAM_OPT_DECODE_MD, 0)) {
-- fprintf(samtools_stderr, "Failed to set CRAM_OPT_DECODE_MD value\n");
-- free(state);
-- return false;
-- }
-- if (opts->fnse) {
-- state->fpse = open_fqfile(opts->fnse, state->compression_level);
-- if (state->fpse == NULL) {
-- print_error_errno("bam2fq", "Cannot write to singleton file \"%s\"", opts->fnse);
-- free(state);
-- return false;
-- }
-- }
--
-- if (opts->ga.reference) {
-- if (hts_set_fai_filename(state->fp, opts->ga.reference) != 0) {
-- print_error_errno("bam2fq", "cannot load reference \"%s\"", opts->ga.reference);
-- free(state);
-- return false;
-- }
-- }
--
-- int i;
-- for (i = 0; i < 3; ++i) {
-- if (opts->fnr[i]) {
-- state->fpr[i] = open_fqfile(opts->fnr[i], state->compression_level);
-- if (state->fpr[i] == NULL) {
-- print_error_errno("bam2fq", "Cannot write to r%d file \"%s\"", i, opts->fnr[i]);
-- free(state);
-- return false;
-- }
-- } else {
-- if (!state->hsamtools_stdout) {
-- state->hsamtools_stdout = bgzf_dopen(fileno(samtools_stdout), "wu");
-- if (!state->hsamtools_stdout) {
-- print_error_errno("bam2fq", "Cannot open STDOUT");
-- free(state);
-- return false;
-- }
-- }
-- state->fpr[i] = state->hsamtools_stdout;
-- }
-- }
-- for (i = 0; i < 2; i++) {
-- state->fpi[i] = NULL;
-- if (opts->index_file[i]) {
-- state->fpi[i] = open_fqfile(opts->index_file[i], state->compression_level);
-- if (state->fpi[i] == NULL) {
-- print_error_errno("bam2fq", "Cannot write to i%d file \"%s\"", i+1, opts->index_file[i]);
-- free(state);
-- return false;
-- }
-- }
-- }
--
-- state->h = sam_hdr_read(state->fp);
-- if (state->h == NULL) {
-- fprintf(samtools_stderr, "Failed to read header for \"%s\"\n", opts->fn_input);
-- free(state);
-- return false;
-- }
--
-- *state_out = state;
-- return true;
--}
--
--static bool destroy_state(const bam2fq_opts_t *opts, bam2fq_state_t *state, int* status)
--{
-- bool valid = true;
-- bam_hdr_destroy(state->h);
-- check_sam_close("bam2fq", state->fp, opts->fn_input, "file", status);
-- if (state->fpse && bgzf_close(state->fpse)) { print_error_errno("bam2fq", "Error closing singleton file \"%s\"", opts->fnse); valid = false; }
-- int i;
-- for (i = 0; i < 3; ++i) {
-- if (state->fpr[i] != state->hsamtools_stdout) {
-- if (bgzf_close(state->fpr[i])) { print_error_errno("bam2fq", "Error closing r%d file \"%s\"", i, opts->fnr[i]); valid = false; }
-- }
-- }
-- if (state->hsamtools_stdout) {
-- if (bgzf_close(state->hsamtools_stdout)) {
-- print_error_errno("bam2fq", "Error closing STDOUT");
-- valid = false;
-- }
-- }
-- for (i = 0; i < 2; i++) {
-- if (state->fpi[i] && bgzf_close(state->fpi[i])) {
-- print_error_errno("bam2fq", "Error closing i%d file \"%s\"", i+1, opts->index_file[i]);
-- valid = false;
-- }
-- }
-- kl_destroy(ktaglist,state->taglist);
-- free(state->index_sequence);
-- free(state);
-- return valid;
--}
--
--static inline bool filter_it_out(const bam1_t *b, const bam2fq_state_t *state)
--{
-- return (b->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY) // skip secondary and supplementary alignments
-- || (b->core.flag&(state->flag_on)) != state->flag_on // or reads indicated by filter flags
-- || (b->core.flag&(state->flag_off)) != 0
-- || (b->core.flag&(state->flag_alloff) && (b->core.flag&(state->flag_alloff)) == state->flag_alloff));
--
--}
--
--static bool bam2fq_mainloop(bam2fq_state_t *state, bam2fq_opts_t* opts)
--{
-- int n;
-- bam1_t *records[3];
-- bam1_t* b = bam_init1();
-- char *current_qname = NULL;
-- int64_t n_reads = 0, n_singletons = 0; // Statistics
-- kstring_t linebuf[3] = {{0,0,NULL},{0,0,NULL},{0,0,NULL}};
-- int score[3];
-- int at_eof;
-- if (b == NULL ) {
-- perror("[bam2fq_mainloop] Malloc error for bam record buffer.");
-- return false;
-- }
--
-- bool valid = true;
-- while (true) {
-- int res = sam_read1(state->fp, state->h, b);
-- if (res < -1) {
-- fprintf(samtools_stderr, "[bam2fq_mainloop] Failed to read bam record.\n");
-- return false;
-- }
-- at_eof = res < 0;
--
-- if (!at_eof && filter_it_out(b, state)) continue;
-- if (!at_eof) ++n_reads;
--
-- if (at_eof || !current_qname || (strcmp(current_qname, bam_get_qname(b)) != 0)) {
-- if (current_qname) {
-- if (state->illumina_tag) {
-- for (n=0; valid && n<3; n++) {
-- if (insert_index_sequence_into_linebuf(state->index_sequence, &linebuf[n], records[n]) < 0) valid = false;
-- }
-- if (!valid) break;
-- }
-- free(state->index_sequence); state->index_sequence = NULL;
-- if (score[1] > 0 && score[2] > 0) {
-- // print linebuf[1] to fpr[1], linebuf[2] to fpr[2]
-- if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- } else if (score[1] > 0 || score[2] > 0) {
-- if (state->fpse) {
-- // print whichever one exists to fpse
-- if (score[1] > 0) {
-- if (bgzf_write(state->fpse, linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- } else {
-- if (bgzf_write(state->fpse, linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- }
-- ++n_singletons;
-- } else {
-- if (score[1] > 0) {
-- if (bgzf_write(state->fpr[1], linebuf[1].s, linebuf[1].l) < 0) { valid = false; break; }
-- } else {
-- if (bgzf_write(state->fpr[2], linebuf[2].s, linebuf[2].l) < 0) { valid = false; break; }
-- }
-- }
-- }
-- if (score[0]) { // TODO: check this
-- // print linebuf[0] to fpr[0]
-- if (bgzf_write(state->fpr[0], linebuf[0].s, linebuf[0].l) < 0) { valid = false; break; }
-- }
-- }
--
-- if (at_eof) break;
--
-- free(current_qname);
-- current_qname = strdup(bam_get_qname(b));
-- if (!current_qname) { valid = false; break; }
-- score[0] = score[1] = score[2] = 0;
-- }
--
-- // Prefer a copy of the read that has base qualities
-- int b_score = bam_get_qual(b)[0] != 0xff? 2 : 1;
-- if (b_score > score[which_readpart(b)]) {
-- if (state->fpi[0]) if (!tags2fq(b, state, opts)) return false;
-- records[which_readpart(b)] = b;
-- if(!bam1_to_fq(b, &linebuf[which_readpart(b)], state)) {
-- fprintf(samtools_stderr, "[%s] Error converting read to FASTA/Q\n", __func__);
-- return false;
-- }
-- score[which_readpart(b)] = b_score;
-- }
-- }
-- if (!valid)
-- {
-- perror("[bam2fq_mainloop] Error writing to FASTx files.");
-- }
-- bam_destroy1(b);
-- free(current_qname);
-- free(linebuf[0].s);
-- free(linebuf[1].s);
-- free(linebuf[2].s);
-- fprintf(samtools_stderr, "[M::%s] discarded %" PRId64 " singletons\n", __func__, n_singletons);
-- fprintf(samtools_stderr, "[M::%s] processed %" PRId64 " reads\n", __func__, n_reads);
--
-- return valid;
--}
--
--int main_bam2fq(int argc, char *argv[])
--{
-- int status = EXIT_SUCCESS;
-- bam2fq_opts_t* opts = NULL;
-- bam2fq_state_t* state = NULL;
--
-- bool valid = parse_opts(argc, argv, &opts);
-- if (!valid || opts == NULL) return valid ? EXIT_SUCCESS : EXIT_FAILURE;
--
-- if (!init_state(opts, &state)) return EXIT_FAILURE;
--
-- if (!bam2fq_mainloop(state,opts)) status = EXIT_FAILURE;
--
-- if (!destroy_state(opts, state, &status)) return EXIT_FAILURE;
-- sam_global_args_free(&opts->ga);
-- free_opts(opts);
--
-- return status;
--}
---- python-pysam.orig/samtools/samtools.h
-+++ python-pysam/samtools/samtools.h
-@@ -1,6 +1,6 @@
- /* samtools.h -- utility routines.
-
-- Copyright (C) 2013-2015 Genome Research Ltd.
-+ Copyright (C) 2013-2015, 2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
-
-@@ -25,15 +25,28 @@
- #ifndef SAMTOOLS_H
- #define SAMTOOLS_H
-
-+#include "htslib/hts_defs.h"
-+#include "htslib/sam.h"
-+
- const char *samtools_version(void);
-
--#if defined __GNUC__ && __GNUC__ >= 2
--#define CHECK_PRINTF(fmt,args) __attribute__ ((format (printf, fmt, args)))
--#else
--#define CHECK_PRINTF(fmt,args)
--#endif
-+#define CHECK_PRINTF(fmt,args) HTS_FORMAT(HTS_PRINTF_FMT, (fmt), (args))
-
- void print_error(const char *subcommand, const char *format, ...) CHECK_PRINTF(2, 3);
- void print_error_errno(const char *subcommand, const char *format, ...) CHECK_PRINTF(2, 3);
-
-+void check_sam_close(const char *subcmd, samFile *fp, const char *fname, const char *null_fname, int *retp);
-+
-+/*
-+ * Utility function to add an index to a file we've opened for write.
-+ * NB: Call this after writing the header and before writing sequences.
-+ *
-+ * The returned index filename should be freed by the caller, but only
-+ * after sam_idx_save has been called.
-+ *
-+ * Returns index filename on success,
-+ * NULL on failure.
-+ */
-+char *auto_index(htsFile *fp, const char *fn, bam_hdr_t *header);
-+
- #endif
---- python-pysam.orig/samtools/stats.c
-+++ python-pysam/samtools/stats.c
-@@ -1,6 +1,6 @@
- /* stats.c -- This is the former bamcheck integrated into samtools/htslib.
-
-- Copyright (C) 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
- Author: Sam Nicholls <sam@samnicholls.net>
-@@ -46,6 +46,7 @@
- #include <string.h>
- #include <math.h>
- #include <ctype.h>
-+#include <inttypes.h>
- #include <getopt.h>
- #include <errno.h>
- #include <assert.h>
-@@ -53,7 +54,7 @@
- #include <htslib/faidx.h>
- #include <htslib/sam.h>
- #include <htslib/hts.h>
--#include "sam_header.h"
-+#include <htslib/hts_defs.h>
- #include <htslib/khash_str2int.h>
- #include "samtools.h"
- #include <htslib/khash.h>
-@@ -65,8 +66,10 @@
- #define BWA_MIN_RDLEN 35
- #define DEFAULT_CHUNK_NO 8
- #define DEFAULT_PAIR_MAX 10000
-+#define ERROR_LIMIT 200
- // From the spec
- // If 0x4 is set, no assumptions can be made about RNAME, POS, CIGAR, MAPQ, bits 0x2, 0x10, 0x100 and 0x800, and the bit 0x20 of the previous read in the template.
-+#define IS_PAIRED(bam) ((bam)->core.flag&BAM_FPAIRED)
- #define IS_PAIRED_AND_MAPPED(bam) (((bam)->core.flag&BAM_FPAIRED) && !((bam)->core.flag&BAM_FUNMAP) && !((bam)->core.flag&BAM_FMUNMAP))
- #define IS_PROPERLYPAIRED(bam) (((bam)->core.flag&(BAM_FPAIRED|BAM_FPROPER_PAIR)) == (BAM_FPAIRED|BAM_FPROPER_PAIR) && !((bam)->core.flag&BAM_FUNMAP))
- #define IS_UNMAPPED(bam) ((bam)->core.flag&BAM_FUNMAP)
-@@ -77,6 +80,14 @@
- #define IS_DUP(bam) ((bam)->core.flag&BAM_FDUP)
- #define IS_ORIGINAL(bam) (((bam)->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY)) == 0)
-
-+#define READ_ORDER_NONE 0
-+#define READ_ORDER_FIRST 1
-+#define READ_ORDER_LAST 2
-+#define READ_ORDER_MIDDLE 3
-+
-+#define REG_INC 100
-+#define POS_INC 1000
-+
- // The GC-depth graph works as follows: split the reference sequence into
- // segments and calculate GC content and depth in each bin. Then sort
- // these segments by their GC and plot the depth distribution by means
-@@ -91,17 +102,16 @@
- // For coverage distribution, a simple pileup
- typedef struct
- {
-- int64_t pos;
-+ hts_pos_t pos;
- int size, start;
- int *buffer;
- }
- round_buffer_t;
-
--typedef struct { uint32_t from, to; } pos_t;
- typedef struct
- {
-- int npos,mpos,cpos;
-- pos_t *pos;
-+ int npos, mpos, cpos;
-+ hts_pair_pos_t *pos;
- }
- regions_t;
-
-@@ -118,6 +128,17 @@
-
- typedef struct
- {
-+ char tag_name[3];
-+ char qual_name[3];
-+ uint32_t nbases;
-+ int32_t tag_sep; // Index of the separator (if present)
-+ int32_t max_qual;
-+ uint32_t offset; // Where the tag stats info is located in the allocated memory
-+}
-+barcode_info_t;
-+
-+typedef struct
-+{
- // Auxiliary data
- int flag_require, flag_filter;
- faidx_t *fai; // Reference sequence for GC-depth graph
-@@ -129,7 +150,7 @@
- float isize_main_bulk; // There are always some unrealistically big insert sizes, report only the main part
- int cov_min,cov_max,cov_step; // Minimum, maximum coverage and size of the coverage bins
- samFile* sam;
-- bam_hdr_t* sam_header;
-+ sam_hdr_t* sam_header;
-
- // Filters
- int filter_readlen;
-@@ -175,6 +196,7 @@
- uint64_t total_len_dup;
- uint64_t nreads_1st;
- uint64_t nreads_2nd;
-+ uint64_t nreads_other;
- uint64_t nreads_filtered;
- uint64_t nreads_dup;
- uint64_t nreads_unmapped;
-@@ -196,8 +218,8 @@
- // GC-depth related data
- uint32_t ngcd, igcd; // The maximum number of GC depth bins and index of the current bin
- gc_depth_t *gcd; // The GC-depth bins holder
-- int32_t tid, gcd_pos; // Position of the current bin
-- int32_t pos; // Position of the last read
-+ int32_t tid; // Position of the current bin
-+ hts_pos_t gcd_pos, pos; // Position of the last read
-
- // Coverage distribution related data
- int ncov; // The number of coverage bins
-@@ -207,12 +229,13 @@
- // Mismatches by read cycle
- uint8_t *rseq_buf; // A buffer for reference sequence to check the mismatches against
- int mrseq_buf; // The size of the buffer
-- int32_t rseq_pos; // The coordinate of the first base in the buffer
-- int32_t nrseq_buf; // The used part of the buffer
-+ hts_pos_t rseq_pos; // The coordinate of the first base in the buffer
-+ int64_t nrseq_buf; // The used part of the buffer
- uint64_t *mpc_buf; // Mismatches per cycle
-
- // Target regions
-- int nregions, reg_from, reg_to;
-+ int nregions;
-+ hts_pos_t reg_from, reg_to;
- regions_t *regions;
-
- // Auxiliary data
-@@ -223,13 +246,20 @@
- char* split_name;
-
- stats_info_t* info; // Pointer to options and settings struct
-- pos_t *chunks;
-+ hts_pair_pos_t *chunks;
- uint32_t nchunks;
-
- uint32_t pair_count; // Number of active pairs in the pairing hash table
- uint32_t target_count; // Number of bases covered by the target file
- uint32_t last_pair_tid;
- uint32_t last_read_flush;
-+
-+ // Barcode statistics
-+ acgtno_count_t *acgtno_barcode;
-+ uint64_t *quals_barcode;
-+ barcode_info_t *tags_barcode;
-+ uint32_t ntags;
-+ uint32_t error_number;
- }
- stats_t;
- KHASH_MAP_INIT_STR(c2stats, stats_t*)
-@@ -237,18 +267,18 @@
- typedef struct {
- uint32_t first; // 1 - first read, 2 - second read
- uint32_t n, m; // number of chunks, allocated chunks
-- pos_t *chunks; // chunk array of size m
-+ hts_pair_pos_t *chunks; // chunk array of size m
- } pair_t;
- KHASH_MAP_INIT_STR(qn2pair, pair_t*)
-
-
--static void error(const char *format, ...);
-+static void HTS_NORETURN error(const char *format, ...);
- int is_in_regions(bam1_t *bam_line, stats_t *stats);
- void realloc_buffers(stats_t *stats, int seq_len);
-
- static int regions_lt(const void *r1, const void *r2) {
-- int64_t from_diff = (int64_t)((pos_t *)r1)->from - (int64_t)((pos_t *)r2)->from;
-- int64_t to_diff = (int64_t)((pos_t *)r1)->to - (int64_t)((pos_t *)r2)->to;
-+ int64_t from_diff = ((hts_pair_pos_t *)r1)->beg - ((hts_pair_pos_t *)r2)->beg;
-+ int64_t to_diff = ((hts_pair_pos_t *)r1)->end - ((hts_pair_pos_t *)r2)->end;
-
- return from_diff > 0 ? 1 : from_diff < 0 ? -1 : to_diff > 0 ? 1 : to_diff < 0 ? -1 : 0;
- }
-@@ -265,19 +295,19 @@
- return 1 + (depth - min) / step;
- }
-
--static inline int round_buffer_lidx2ridx(int offset, int size, int64_t refpos, int64_t pos)
-+static inline int round_buffer_lidx2ridx(int offset, int size, hts_pos_t refpos, hts_pos_t pos)
- {
- return (offset + (pos-refpos) % size) % size;
- }
-
--void round_buffer_flush(stats_t *stats, int64_t pos)
-+void round_buffer_flush(stats_t *stats, hts_pos_t pos)
- {
- int ibuf,idp;
-
- if ( pos==stats->cov_rbuf.pos )
- return;
-
-- int64_t new_pos = pos;
-+ hts_pos_t new_pos = pos;
- if ( pos==-1 || pos - stats->cov_rbuf.pos >= stats->cov_rbuf.size )
- {
- // Flush the whole buffer, but in sequential order,
-@@ -285,10 +315,10 @@
- }
-
- if ( pos < stats->cov_rbuf.pos )
-- error("Expected coordinates in ascending order, got %ld after %ld\n", pos,stats->cov_rbuf.pos);
-+ error("Expected coordinates in ascending order, got %"PRIhts_pos" after %"PRIhts_pos"\n", pos, stats->cov_rbuf.pos);
-
- int ifrom = stats->cov_rbuf.start;
-- int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos-1);
-+ int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start, stats->cov_rbuf.size, stats->cov_rbuf.pos, pos-1);
- if ( ifrom>ito )
- {
- for (ibuf=ifrom; ibuf<stats->cov_rbuf.size; ibuf++)
-@@ -309,27 +339,30 @@
- stats->cov[idp]++;
- stats->cov_rbuf.buffer[ibuf] = 0;
- }
-- stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos);
-+ stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start, stats->cov_rbuf.size, stats->cov_rbuf.pos, pos);
- stats->cov_rbuf.pos = new_pos;
- }
-
--void round_buffer_insert_read(round_buffer_t *rbuf, int64_t from, int64_t to)
-+/**
-+ * [from, to) - 0 based half-open
-+ */
-+static void round_buffer_insert_read(round_buffer_t *rbuf, hts_pos_t from, hts_pos_t to)
- {
-- if ( to-from >= rbuf->size )
-- error("The read length too big (%d), please increase the buffer length (currently %d)\n", to-from+1,rbuf->size);
-+ if ( to-from > rbuf->size )
-+ error("The read length too big (%"PRIhts_pos"), please increase the buffer length (currently %d)\n", to-from, rbuf->size);
- if ( from < rbuf->pos )
-- error("The reads are not sorted (%ld comes after %ld).\n", from,rbuf->pos);
-+ error("The reads are not sorted (%"PRIhts_pos" comes after %"PRIhts_pos").\n", from, rbuf->pos);
-
-- int ifrom,ito,ibuf;
-- ifrom = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,from);
-- ito = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,to);
-+ int ifrom, ito, ibuf;
-+ ifrom = round_buffer_lidx2ridx(rbuf->start, rbuf->size, rbuf->pos, from);
-+ ito = round_buffer_lidx2ridx(rbuf->start, rbuf->size, rbuf->pos, to);
- if ( ifrom>ito )
- {
- for (ibuf=ifrom; ibuf<rbuf->size; ibuf++)
- rbuf->buffer[ibuf]++;
- ifrom = 0;
- }
-- for (ibuf=ifrom; ibuf<=ito; ibuf++)
-+ for (ibuf=ifrom; ibuf<ito; ibuf++)
- rbuf->buffer[ibuf]++;
- }
-
-@@ -362,7 +395,7 @@
- void count_indels(stats_t *stats,bam1_t *bam_line)
- {
- int is_fwd = IS_REVERSE(bam_line) ? 0 : 1;
-- int is_1st = IS_READ1(bam_line) ? 1 : 0;
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
- int icig;
- int icycle = 0;
- int read_len = bam_line->core.l_qseq;
-@@ -377,10 +410,10 @@
- int idx = is_fwd ? icycle : read_len-icycle-ncig;
- if ( idx<0 )
- error("FIXME: read_len=%d vs icycle=%d\n", read_len,icycle);
-- if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%d %s\n", idx,stats->nbases, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-- if ( is_1st )
-+ if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%"PRIhts_pos" %s\n", idx, stats->nbases, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-+ if ( order == READ_ORDER_FIRST )
- stats->ins_cycles_1st[idx]++;
-- else
-+ if ( order == READ_ORDER_LAST )
- stats->ins_cycles_2nd[idx]++;
- icycle += ncig;
- if ( ncig<=stats->nindels )
-@@ -392,9 +425,9 @@
- int idx = is_fwd ? icycle-1 : read_len-icycle-1;
- if ( idx<0 ) continue; // discard meaningless deletions
- if ( idx >= stats->nbases ) error("FIXME: %d vs %d\n", idx,stats->nbases);
-- if ( is_1st )
-+ if ( order == READ_ORDER_FIRST )
- stats->del_cycles_1st[idx]++;
-- else
-+ if ( order == READ_ORDER_LAST )
- stats->del_cycles_2nd[idx]++;
- if ( ncig<=stats->nindels )
- stats->deletions[ncig-1]++;
-@@ -420,8 +453,8 @@
- void count_mismatches_per_cycle(stats_t *stats, bam1_t *bam_line, int read_len)
- {
- int is_fwd = IS_REVERSE(bam_line) ? 0 : 1;
-- int icig,iread=0,icycle=0;
-- int iref = bam_line->core.pos - stats->rseq_pos;
-+ int icig, iread=0, icycle=0;
-+ hts_pos_t iref = bam_line->core.pos - stats->rseq_pos;
- uint8_t *read = bam_get_seq(bam_line);
- uint8_t *quals = bam_get_qual(bam_line);
- uint64_t *mpc_buf = stats->mpc_buf;
-@@ -454,13 +487,13 @@
- continue;
- }
- // Ignore H and N CIGARs. The letter are inserted e.g. by TopHat and often require very large
-- // chunk of refseq in memory. Not very frequent and not noticable in the stats.
-+ // chunk of refseq in memory. Not very frequent and not noticeable in the stats.
- if ( cig==BAM_CREF_SKIP || cig==BAM_CHARD_CLIP || cig==BAM_CPAD ) continue;
- if ( cig!=BAM_CMATCH && cig!=BAM_CEQUAL && cig!=BAM_CDIFF ) // not relying on precalculated diffs
-- error("TODO: cigar %d, %s:%d %s\n", cig,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("TODO: cigar %d, %s:%"PRIhts_pos" %s\n", cig, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- if ( ncig+iref > stats->nrseq_buf )
-- error("FIXME: %d+%d > %d, %s, %s:%d\n",ncig,iref,stats->nrseq_buf, bam_get_qname(bam_line),stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1);
-+ error("FIXME: %d+%"PRIhts_pos" > %"PRId64", %s, %s:%"PRIhts_pos"\n", ncig, iref, stats->nrseq_buf, bam_get_qname(bam_line), sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1);
-
- int im;
- for (im=0; im<ncig; im++)
-@@ -484,11 +517,11 @@
- {
- uint8_t qual = quals[iread] + 1;
- if ( qual>=stats->nquals )
-- error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("TODO: quality too high %d>=%d (%s %"PRIhts_pos" %s)\n", qual, stats->nquals, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- int idx = is_fwd ? icycle : read_len-icycle-1;
- if ( idx>stats->max_len )
-- error("mpc: %d>%d (%s %d %s)\n",idx,stats->max_len,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("mpc: %d>%d (%s %"PRIhts_pos" %s)\n", idx, stats->max_len, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- idx = idx*stats->nquals + qual;
- if ( idx>=stats->nquals*stats->nbases )
-@@ -503,11 +536,12 @@
- }
- }
-
--void read_ref_seq(stats_t *stats, int32_t tid, int32_t pos)
-+void read_ref_seq(stats_t *stats, int32_t tid, hts_pos_t pos)
- {
-- int i, fai_ref_len;
-- char *fai_ref = faidx_fetch_seq(stats->info->fai, stats->info->sam_header->target_name[tid], pos, pos+stats->mrseq_buf-1, &fai_ref_len);
-- if ( fai_ref_len<0 ) error("Failed to fetch the sequence \"%s\"\n", stats->info->sam_header->target_name[tid]);
-+ int i;
-+ hts_pos_t fai_ref_len;
-+ char *fai_ref = faidx_fetch_seq64(stats->info->fai, sam_hdr_tid2name(stats->info->sam_header, tid), pos, pos+stats->mrseq_buf-1, &fai_ref_len);
-+ if ( fai_ref_len < 0 ) error("Failed to fetch the sequence \"%s\"\n", sam_hdr_tid2name(stats->info->sam_header, tid));
-
- uint8_t *ptr = stats->rseq_buf;
- for (i=0; i<fai_ref_len; i++)
-@@ -537,10 +571,10 @@
- stats->tid = tid;
- }
-
--float fai_gc_content(stats_t *stats, int pos, int len)
-+float fai_gc_content(stats_t *stats, hts_pos_t pos, int len)
- {
- uint32_t gc,count,c;
-- int i = pos - stats->rseq_pos, ito = i + len;
-+ hts_pos_t i = pos - stats->rseq_pos, ito = i + len;
- assert( i>=0 );
-
- if ( ito > stats->nrseq_buf ) ito = stats->nrseq_buf;
-@@ -568,6 +602,9 @@
- if ( stats->mrseq_buf<n )
- {
- stats->rseq_buf = realloc(stats->rseq_buf,sizeof(uint8_t)*n);
-+ if (!stats->rseq_buf) {
-+ error("Could not reallocate reference sequence buffer");
-+ }
- stats->mrseq_buf = n;
- }
- }
-@@ -659,6 +696,9 @@
-
- // Realloc the coverage distribution buffer
- int *rbuffer = calloc(sizeof(int),seq_len*5);
-+ if (!rbuffer) {
-+ error("Could not allocate coverage distribution buffer");
-+ }
- n = stats->cov_rbuf.size-stats->cov_rbuf.start;
- memcpy(rbuffer,stats->cov_rbuf.buffer+stats->cov_rbuf.start,n);
- if ( stats->cov_rbuf.start>1 )
-@@ -688,6 +728,119 @@
- stats->checksum.quals += crc32(0L, qual, (seq_len+1)/2);
- }
-
-+// Collect statistics about the barcode tags specified by init_barcode_tags method
-+static void collect_barcode_stats(bam1_t* bam_line, stats_t* stats) {
-+ uint32_t nbases, tag, i;
-+ acgtno_count_t *acgtno;
-+ uint64_t *quals;
-+ int32_t *separator, *maxqual;
-+
-+ for (tag = 0; tag < stats->ntags; tag++) {
-+ const char *barcode_tag = stats->tags_barcode[tag].tag_name, *qual_tag = stats->tags_barcode[tag].qual_name;
-+ uint8_t* bc = bam_aux_get(bam_line, barcode_tag);
-+ if (!bc)
-+ continue;
-+
-+ char* barcode = bam_aux2Z(bc);
-+ if (!barcode)
-+ continue;
-+
-+ uint32_t barcode_len = strlen(barcode);
-+ if (!stats->tags_barcode[tag].nbases) { // tag seen for the first time
-+ uint32_t offset = 0;
-+ for (i = 0; i < stats->ntags; i++)
-+ offset += stats->tags_barcode[i].nbases;
-+
-+ stats->tags_barcode[tag].offset = offset;
-+ stats->tags_barcode[tag].nbases = barcode_len;
-+ stats->acgtno_barcode = realloc(stats->acgtno_barcode, (offset + barcode_len) * sizeof(acgtno_count_t));
-+ stats->quals_barcode = realloc(stats->quals_barcode, (offset + barcode_len) * stats->nquals * sizeof(uint64_t));
-+
-+ if (!stats->acgtno_barcode || !stats->quals_barcode)
-+ error("Error allocating memory. Aborting!\n");
-+
-+ memset(stats->acgtno_barcode + offset, 0, barcode_len*sizeof(acgtno_count_t));
-+ memset(stats->quals_barcode + offset*stats->nquals, 0, barcode_len*stats->nquals*sizeof(uint64_t));
-+ }
-+
-+ nbases = stats->tags_barcode[tag].nbases;
-+ if (barcode_len > nbases) {
-+ fprintf(stderr, "Barcodes with tag %s differ in length at sequence '%s'\n", barcode_tag, bam_get_qname(bam_line));
-+ continue;
-+ }
-+
-+ acgtno = stats->acgtno_barcode + stats->tags_barcode[tag].offset;
-+ quals = stats->quals_barcode + stats->tags_barcode[tag].offset*stats->nquals;
-+ maxqual = &stats->tags_barcode[tag].max_qual;
-+ separator = &stats->tags_barcode[tag].tag_sep;
-+ int error_flag = 0;
-+
-+ for (i = 0; i < barcode_len; i++) {
-+ switch (barcode[i]) {
-+ case 'A':
-+ acgtno[i].a++;
-+ break;
-+ case 'C':
-+ acgtno[i].c++;
-+ break;
-+ case 'G':
-+ acgtno[i].g++;
-+ break;
-+ case 'T':
-+ acgtno[i].t++;
-+ break;
-+ case 'N':
-+ acgtno[i].n++;
-+ break;
-+ default:
-+ if (*separator >= 0) {
-+ if (*separator != i) {
-+ if (stats->error_number < ERROR_LIMIT) {
-+ fprintf(stderr, "Barcode separator for tag %s is in a different position or wrong barcode content('%s') at sequence '%s'\n", barcode_tag, barcode, bam_get_qname(bam_line));
-+ stats->error_number++;
-+ }
-+ error_flag = 1;
-+ }
-+ } else {
-+ *separator = i;
-+ }
-+ }
-+
-+ /* don't process the rest of the tag bases */
-+ if (error_flag)
-+ break;
-+ }
-+
-+ /* skip to the next tag */
-+ if (error_flag)
-+ continue;
-+
-+ uint8_t* qt = bam_aux_get(bam_line, qual_tag);
-+ if (!qt)
-+ continue;
-+
-+ char* barqual = bam_aux2Z(qt);
-+ if (!barqual)
-+ continue;
-+
-+ uint32_t barqual_len = strlen(barqual);
-+ if (barqual_len == barcode_len) {
-+ for (i = 0; i < barcode_len; i++) {
-+ int32_t qual = (int32_t)barqual[i] - '!'; // Phred + 33
-+ if (qual >= 0 && qual < stats->nquals) {
-+ quals[i * stats->nquals + qual]++;
-+ if (qual > *maxqual)
-+ *maxqual = qual;
-+ }
-+ }
-+ } else {
-+ if (stats->error_number++ < ERROR_LIMIT) {
-+ fprintf(stderr, "%s length and %s length don't match for sequence '%s'\n", barcode_tag, qual_tag, bam_get_qname(bam_line));
-+ }
-+ }
-+ }
-+}
-+
- // These stats should only be calculated for the original reads ignoring
- // supplementary artificial reads otherwise we'll accidentally double count
- void collect_orig_read_stats(bam1_t *bam_line, stats_t *stats, int* gc_count_out)
-@@ -698,42 +851,48 @@
- if ( bam_line->core.flag & BAM_FQCFAIL ) stats->nreads_QCfailed++;
- if ( bam_line->core.flag & BAM_FPAIRED ) stats->nreads_paired_tech++;
-
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
-+
- // Count GC and ACGT per cycle. Note that cycle is approximate, clipping is ignored
- uint8_t *seq = bam_get_seq(bam_line);
-- int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line), is_first = IS_READ1(bam_line);
-- for (i=0; i<seq_len; i++)
-- {
-- // Read cycle for current index
-- read_cycle = (reverse ? seq_len-i-1 : i);
-+ int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line);
-
-- // Conversion from uint8_t coding:
-- // -12-4---8------5
-- // =ACMGRSVTWYHKDBN
-- switch (bam_seqi(seq, i)) {
-- case 1:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].a++ : stats->acgtno_cycles_2nd[ read_cycle ].a++;
-- break;
-- case 2:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].c++ : stats->acgtno_cycles_2nd[ read_cycle ].c++;
-- gc_count++;
-- break;
-- case 4:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].g++ : stats->acgtno_cycles_2nd[ read_cycle ].g++;
-- gc_count++;
-- break;
-- case 8:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].t++ : stats->acgtno_cycles_2nd[ read_cycle ].t++;
-- break;
-- case 15:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].n++ : stats->acgtno_cycles_2nd[ read_cycle ].n++;
-- break;
-- default:
-- /*
-- * count "=" sequences in "other" along
-- * with MRSVWYHKDB ambiguity codes
-- */
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].other++ : stats->acgtno_cycles_2nd[ read_cycle ].other++;
-- break;
-+ acgtno_count_t *acgtno_cycles = (order == READ_ORDER_FIRST) ? stats->acgtno_cycles_1st : (order == READ_ORDER_LAST) ? stats->acgtno_cycles_2nd : NULL ;
-+ if (acgtno_cycles) {
-+ for (i=0; i<seq_len; i++)
-+ {
-+ // Read cycle for current index
-+ read_cycle = (reverse ? seq_len-i-1 : i);
-+
-+ // Conversion from uint8_t coding:
-+ // -12-4---8------5
-+ // =ACMGRSVTWYHKDBN
-+ switch (bam_seqi(seq, i)) {
-+ case 1:
-+ acgtno_cycles[ read_cycle ].a++;
-+ break;
-+ case 2:
-+ acgtno_cycles[ read_cycle ].c++;
-+ gc_count++;
-+ break;
-+ case 4:
-+ acgtno_cycles[ read_cycle ].g++;
-+ gc_count++;
-+ break;
-+ case 8:
-+ acgtno_cycles[ read_cycle ].t++;
-+ break;
-+ case 15:
-+ acgtno_cycles[ read_cycle ].n++;
-+ break;
-+ default:
-+ /*
-+ * count "=" sequences in "other" along
-+ * with MRSVWYHKDB ambiguity codes
-+ */
-+ acgtno_cycles[ read_cycle ].other++;
-+ break;
-+ }
- }
- }
- int gc_idx_min = gc_count*(stats->ngc-1)/seq_len;
-@@ -743,38 +902,48 @@
- // Determine which array (1st or 2nd read) will these stats go to,
- // trim low quality bases from end the same way BWA does,
- // fill GC histogram
-- uint64_t *quals;
-+ uint64_t *quals = NULL;
- uint8_t *bam_quals = bam_get_qual(bam_line);
-- if ( IS_READ2(bam_line) )
-- {
-- quals = stats->quals_2nd;
-- stats->nreads_2nd++;
-- stats->total_len_2nd += seq_len;
-- for (i=gc_idx_min; i<gc_idx_max; i++)
-- stats->gc_2nd[i]++;
-- }
-- else
-- {
-+
-+ switch (order) {
-+ case READ_ORDER_FIRST:
- quals = stats->quals_1st;
- stats->nreads_1st++;
- stats->total_len_1st += seq_len;
- for (i=gc_idx_min; i<gc_idx_max; i++)
- stats->gc_1st[i]++;
-+ break;
-+ case READ_ORDER_LAST:
-+ quals = stats->quals_2nd;
-+ stats->nreads_2nd++;
-+ stats->total_len_2nd += seq_len;
-+ for (i=gc_idx_min; i<gc_idx_max; i++)
-+ stats->gc_2nd[i]++;
-+ break;
-+ default:
-+ stats->nreads_other++;
- }
- if ( stats->info->trim_qual>0 )
- stats->nbases_trimmed += bwa_trim_read(stats->info->trim_qual, bam_quals, seq_len, reverse);
-
- // Quality histogram and average quality. Clipping is neglected.
-- for (i=0; i<seq_len; i++)
-- {
-- uint8_t qual = bam_quals[ reverse ? seq_len-i-1 : i];
-- if ( qual>=stats->nquals )
-- error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-- if ( qual>stats->max_qual )
-- stats->max_qual = qual;
-+ if (quals) {
-+ for (i=0; i<seq_len; i++)
-+ {
-+ uint8_t qual = bam_quals[ reverse ? seq_len-i-1 : i];
-+ if ( qual>=stats->nquals )
-+ error("TODO: quality too high %d>=%d (%s %"PRIhts_pos" %s)\n", qual, stats->nquals, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-+ if ( qual>stats->max_qual )
-+ stats->max_qual = qual;
-+
-+ quals[ i*stats->nquals+qual ]++;
-+ stats->sum_qual += qual;
-+ }
-+ }
-
-- quals[ i*stats->nquals+qual ]++;
-- stats->sum_qual += qual;
-+ // Barcode statistics
-+ if (order == READ_ORDER_FIRST) {
-+ collect_barcode_stats(bam_line, stats);
- }
-
- // Look at the flags and increment appropriate counters (mapped, paired, etc)
-@@ -803,7 +972,7 @@
- *gc_count_out = gc_count;
- }
-
--static int cleanup_overlaps(khash_t(qn2pair) *read_pairs, int max) {
-+static int cleanup_overlaps(khash_t(qn2pair) *read_pairs, hts_pos_t max) {
- if ( !read_pairs )
- return 0;
-
-@@ -814,7 +983,7 @@
- char *key = (char *)kh_key(read_pairs, k);
- pair_t *val = kh_val(read_pairs, k);
- if ( val && val->chunks ) {
-- if ( val->chunks[val->n-1].to < max ) {
-+ if ( val->chunks[val->n-1].end < max ) {
- free(val->chunks);
- free(val);
- free(key);
-@@ -828,29 +997,32 @@
- }
- }
- }
-- if ( max == INT_MAX )
-+ if ( max == INT64_MAX )
- kh_destroy(qn2pair, read_pairs);
-
- return count;
- }
-
--static void remove_overlaps(bam1_t *bam_line, khash_t(qn2pair) *read_pairs, stats_t *stats, int pmin, int pmax) {
-+/**
-+ * [pmin, pmax) - 0 based half-open
-+ */
-+static void remove_overlaps(bam1_t *bam_line, khash_t(qn2pair) *read_pairs, stats_t *stats, hts_pos_t pmin, hts_pos_t pmax) {
- if ( !bam_line || !read_pairs || !stats )
- return;
-
-- uint32_t first = (IS_READ1(bam_line) > 0 ? 1 : 0) + (IS_READ2(bam_line) > 0 ? 2 : 0) ;
-+ uint32_t order = (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0);
- if ( !(bam_line->core.flag & BAM_FPAIRED) ||
- (bam_line->core.flag & BAM_FMUNMAP) ||
-- (abs(bam_line->core.isize) >= 2*bam_line->core.l_qseq) ||
-- (first != 1 && first != 2) ) {
-+ (llabs(bam_line->core.isize) >= 2*bam_line->core.l_qseq) ||
-+ (order != READ_ORDER_FIRST && order != READ_ORDER_LAST) ) {
- if ( pmin >= 0 )
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- return;
- }
-
- char *qname = bam_get_qname(bam_line);
- if ( !qname ) {
-- fprintf(stderr, "Error retrieving qname for line starting at pos %d\n", bam_line->core.pos);
-+ fprintf(stderr, "Error retrieving qname for line starting at pos %"PRIhts_pos"\n", bam_line->core.pos);
- return;
- }
-
-@@ -868,8 +1040,7 @@
-
- k = kh_put(qn2pair, read_pairs, s, &ret);
- if ( -1 == ret ) {
-- fprintf(stderr, "Error inserting read '%s' in pair hash table\n", qname);
-- return;
-+ error("Error inserting read '%s' in pair hash table\n", qname);
- }
-
- pair_t *pc = calloc(1, sizeof(pair_t));
-@@ -879,16 +1050,16 @@
- }
-
- pc->m = DEFAULT_CHUNK_NO;
-- pc->chunks = calloc(pc->m, sizeof(pos_t));
-+ pc->chunks = calloc(pc->m, sizeof(hts_pair_pos_t));
- if ( !pc->chunks ) {
- fprintf(stderr, "Error allocating memory\n");
- return;
- }
-
-- pc->chunks[0].from = pmin;
-- pc->chunks[0].to = pmax;
-+ pc->chunks[0].beg = pmin;
-+ pc->chunks[0].end = pmax;
- pc->n = 1;
-- pc->first = first;
-+ pc->first = order;
-
- kh_val(read_pairs, k) = pc;
- stats->pair_count++;
-@@ -899,12 +1070,12 @@
- return;
- }
-
-- if ( first == pc->first ) { //chunk from an existing line
-+ if ( order == pc->first ) { //chunk from an existing line
- if ( pmin == -1 )
- return;
-
- if ( pc->n == pc->m ) {
-- pos_t *tmp = realloc(pc->chunks, (pc->m<<1)*sizeof(pos_t));
-+ hts_pair_pos_t *tmp = realloc(pc->chunks, (pc->m<<1)*sizeof(hts_pair_pos_t));
- if ( !tmp ) {
- fprintf(stderr, "Error allocating memory\n");
- return;
-@@ -913,8 +1084,8 @@
- pc->m<<=1;
- }
-
-- pc->chunks[pc->n].from = pmin;
-- pc->chunks[pc->n].to = pmax;
-+ pc->chunks[pc->n].beg = pmin;
-+ pc->chunks[pc->n].end = pmax;
- pc->n++;
- } else { //the other line, check for overlapping
- if ( pmin == -1 && kh_exist(read_pairs, k) ) { //job done, delete entry
-@@ -932,28 +1103,28 @@
-
- int i;
- for (i=0; i<pc->n; i++) {
-- if ( pmin >= pc->chunks[i].to )
-+ if ( pmin >= pc->chunks[i].end )
- continue;
-
-- if ( pmax <= pc->chunks[i].from ) //no overlap
-+ if ( pmax <= pc->chunks[i].beg ) //no overlap
- break;
-
-- if ( pmin < pc->chunks[i].from ) { //overlap at the beginning
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pc->chunks[i].from-1);
-- pmin = pc->chunks[i].from;
-+ if ( pmin < pc->chunks[i].beg ) { //overlap at the beginning
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pc->chunks[i].beg);
-+ pmin = pc->chunks[i].beg;
- }
-
-- if ( pmax <= pc->chunks[i].to ) { //completely contained
-+ if ( pmax <= pc->chunks[i].end ) { //completely contained
- stats->nbases_mapped_cigar -= (pmax - pmin);
- return;
- } else { //overlap at the end
-- stats->nbases_mapped_cigar -= (pc->chunks[i].to - pmin);
-- pmin = pc->chunks[i].to;
-+ stats->nbases_mapped_cigar -= (pc->chunks[i].end - pmin);
-+ pmin = pc->chunks[i].end;
- }
- }
- }
- }
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- }
-
- void collect_stats(bam1_t *bam_line, stats_t *stats, khash_t(qn2pair) *read_pairs)
-@@ -998,15 +1169,17 @@
- stats->nreads_dup++;
- }
-
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
-+
- int read_len = unclipped_length(bam_line);
- if ( read_len >= stats->nbases )
- realloc_buffers(stats,read_len);
- // Update max_len observed
- if ( stats->max_len<read_len )
- stats->max_len = read_len;
-- if ( IS_READ1(bam_line) && stats->max_len_1st < read_len )
-+ if ( order == READ_ORDER_FIRST && stats->max_len_1st < read_len )
- stats->max_len_1st = read_len;
-- if ( IS_READ2(bam_line) && stats->max_len_2nd < read_len )
-+ if ( order == READ_ORDER_LAST && stats->max_len_2nd < read_len )
- stats->max_len_2nd = read_len;
-
- int i;
-@@ -1017,8 +1190,8 @@
- if ( IS_ORIGINAL(bam_line) )
- {
- stats->read_lengths[read_len]++;
-- if ( IS_READ1(bam_line) ) stats->read_lengths_1st[read_len]++;
-- if ( IS_READ2(bam_line) ) stats->read_lengths_2nd[read_len]++;
-+ if ( order == READ_ORDER_FIRST ) stats->read_lengths_1st[read_len]++;
-+ if ( order == READ_ORDER_LAST ) stats->read_lengths_2nd[read_len]++;
- collect_orig_read_stats(bam_line, stats, &gc_count);
- }
-
-@@ -1039,7 +1212,7 @@
- isize = stats->info->nisize;
- if ( isize>0 || bam_line->core.tid==bam_line->core.mtid )
- {
-- int pos_fst = bam_line->core.mpos - bam_line->core.pos;
-+ hts_pos_t pos_fst = bam_line->core.mpos - bam_line->core.pos;
- int is_fst = IS_READ1(bam_line) ? 1 : -1;
- int is_fwd = IS_REVERSE(bam_line) ? -1 : 1;
- int is_mfwd = IS_MATE_REVERSE(bam_line) ? -1 : 1;
-@@ -1075,7 +1248,7 @@
- if ( stats->regions )
- {
- // Count only on-target bases
-- int iref = bam_line->core.pos + 1;
-+ hts_pos_t iref = bam_line->core.pos + 1;
- for (i=0; i<bam_line->core.n_cigar; i++)
- {
- int cig = bam_cigar_op(bam_get_cigar(bam_line)[i]);
-@@ -1129,7 +1302,7 @@
- }
-
- if ( stats->last_pair_tid != bam_line->core.tid) {
-- stats->pair_count -= cleanup_overlaps(read_pairs, INT_MAX-1);
-+ stats->pair_count -= cleanup_overlaps(read_pairs, INT64_MAX-1);
- stats->last_pair_tid = bam_line->core.tid;
- stats->last_read_flush = 0;
- }
-@@ -1181,8 +1354,9 @@
- // Coverage distribution graph
- round_buffer_flush(stats,bam_line->core.pos);
- if ( stats->regions ) {
-- uint32_t p = bam_line->core.pos, pnew, pmin, pmax, j;
-- pmin = pmax = i = j = 0;
-+ hts_pos_t p = bam_line->core.pos, pnew, pmin = 0, pmax = 0;
-+ uint32_t j = 0;
-+ i = 0;
- while ( j < bam_line->core.n_cigar && i < stats->nchunks ) {
- int op = bam_cigar_op(bam_get_cigar(bam_line)[j]);
- int oplen = bam_cigar_oplen(bam_get_cigar(bam_line)[j]);
-@@ -1190,13 +1364,13 @@
- case BAM_CMATCH:
- case BAM_CEQUAL:
- case BAM_CDIFF:
-- pmin = MAX(p, stats->chunks[i].from-1);
-- pmax = MIN(p+oplen, stats->chunks[i].to);
-- if ( pmax >= pmin ) {
-+ pmin = MAX(p, stats->chunks[i].beg-1); // 0 based
-+ pmax = MIN(p+oplen, stats->chunks[i].end); // 1 based
-+ if ( pmax > pmin ) {
- if ( stats->info->remove_overlaps )
- remove_overlaps(bam_line, read_pairs, stats, pmin, pmax);
- else
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- }
- break;
- case BAM_CDEL:
-@@ -1204,7 +1378,7 @@
- }
- pnew = p + (bam_cigar_type(op)&2 ? oplen : 0); // consumes reference
-
-- if ( pnew >= stats->chunks[i].to ) {
-+ if ( pnew >= stats->chunks[i].end ) {
- // go to the next chunk
- i++;
- } else {
-@@ -1214,7 +1388,8 @@
- }
- }
- } else {
-- uint32_t p = bam_line->core.pos, j;
-+ hts_pos_t p = bam_line->core.pos;
-+ uint32_t j;
- for (j = 0; j < bam_line->core.n_cigar; j++) {
- int op = bam_cigar_op(bam_get_cigar(bam_line)[j]);
- int oplen = bam_cigar_oplen(bam_get_cigar(bam_line)[j]);
-@@ -1225,7 +1400,7 @@
- if ( stats->info->remove_overlaps )
- remove_overlaps(bam_line, read_pairs, stats, p, p+oplen);
- else
-- round_buffer_insert_read(&(stats->cov_rbuf), p, p+oplen-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), p, p+oplen);
- break;
- case BAM_CDEL:
- break;
-@@ -1234,7 +1409,7 @@
- }
- }
- if ( stats->info->remove_overlaps )
-- remove_overlaps(bam_line, read_pairs, stats, -1, -1); //remove the line from the hash table
-+ remove_overlaps(bam_line, read_pairs, stats, -1LL, -1LL); //remove the line from the hash table
- }
- }
-
-@@ -1255,7 +1430,7 @@
- float n,d;
- int k;
-
-- n = p*(N+1)/100;
-+ n = (float)p*(N+1)/100;
- k = n;
- if ( k<=0 )
- return gcd[0].depth;
-@@ -1320,9 +1495,9 @@
- fprintf(to, "# CHK, CRC32 of reads which passed filtering followed by addition (32bit overflow)\n");
- fprintf(to, "CHK\t%08x\t%08x\t%08x\n", stats->checksum.names,stats->checksum.reads,stats->checksum.quals);
- fprintf(to, "# Summary Numbers. Use `grep ^SN | cut -f 2-` to extract this part.\n");
-- fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd)); // not counting excluded seqs (and none of the below)
-+ fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)); // not counting excluded seqs (and none of the below)
- fprintf(to, "SN\tfiltered sequences:\t%ld\n", (long)stats->nreads_filtered);
-- fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd));
-+ fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other));
- fprintf(to, "SN\tis sorted:\t%d\n", stats->is_sorted ? 1 : 0);
- fprintf(to, "SN\t1st fragments:\t%ld\n", (long)stats->nreads_1st);
- fprintf(to, "SN\tlast fragments:\t%ld\n", (long)stats->nreads_2nd);
-@@ -1344,7 +1519,7 @@
- fprintf(to, "SN\tbases duplicated:\t%ld\n", (long)stats->total_len_dup);
- fprintf(to, "SN\tmismatches:\t%ld\t# from NM fields\n", (long)stats->nmismatches);
- fprintf(to, "SN\terror rate:\t%e\t# mismatches / bases mapped (cigar)\n", stats->nbases_mapped_cigar ? (float)stats->nmismatches/stats->nbases_mapped_cigar : 0);
-- float avg_read_length = (stats->nreads_1st+stats->nreads_2nd)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd):0;
-+ float avg_read_length = (stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other):0;
- fprintf(to, "SN\taverage length:\t%.0f\n", avg_read_length);
- fprintf(to, "SN\taverage first fragment length:\t%.0f\n", stats->nreads_1st? (float)stats->total_len_1st/stats->nreads_1st:0);
- fprintf(to, "SN\taverage last fragment length:\t%.0f\n", stats->nreads_2nd? (float)stats->total_len_2nd/stats->nreads_2nd:0);
-@@ -1358,7 +1533,7 @@
- fprintf(to, "SN\toutward oriented pairs:\t%ld\n", (long)nisize_outward);
- fprintf(to, "SN\tpairs with other orientation:\t%ld\n", (long)nisize_other);
- fprintf(to, "SN\tpairs on different chromosomes:\t%ld\n", (long)stats->nreads_anomalous/2);
-- fprintf(to, "SN\tpercentage of properly paired reads (%%):\t%.1f\n", (stats->nreads_1st+stats->nreads_2nd)? (float)(100*stats->nreads_properly_paired)/(stats->nreads_1st+stats->nreads_2nd):0);
-+ fprintf(to, "SN\tpercentage of properly paired reads (%%):\t%.1f\n", (stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)? (float)(100*stats->nreads_properly_paired)/(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other):0);
- if ( stats->target_count ) {
- fprintf(to, "SN\tbases inside the target:\t%u\n", stats->target_count);
- for (icov=stats->info->cov_threshold+1; icov<stats->ncov; icov++)
-@@ -1439,11 +1614,18 @@
- 100.*(acgtno_count_1st->other + acgtno_count_2nd->other)/acgt_sum);
-
- }
-+
-+ uint64_t tA=0, tC=0, tG=0, tT=0, tN=0;
- fprintf(to, "# ACGT content per cycle for first fragments. Use `grep ^FBC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n");
- for (ibase=0; ibase<stats->max_len; ibase++)
- {
- acgtno_count_t *acgtno_count_1st = &(stats->acgtno_cycles_1st[ibase]);
- uint64_t acgt_sum_1st = acgtno_count_1st->a + acgtno_count_1st->c + acgtno_count_1st->g + acgtno_count_1st->t;
-+ tA += acgtno_count_1st->a;
-+ tC += acgtno_count_1st->c;
-+ tG += acgtno_count_1st->g;
-+ tT += acgtno_count_1st->t;
-+ tN += acgtno_count_1st->n;
-
- if ( acgt_sum_1st )
- fprintf(to, "FBC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1,
-@@ -1455,11 +1637,19 @@
- 100.*acgtno_count_1st->other/acgt_sum_1st);
-
- }
-+ fprintf(to, "# ACGT raw counters for first fragments. Use `grep ^FTC | cut -f 2-` to extract this part. The columns are: A,C,G,T,N base counters\n");
-+ fprintf(to, "FTC\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\n", tA, tC, tG, tT, tN);
-+ tA=0, tC=0, tG=0, tT=0, tN=0;
- fprintf(to, "# ACGT content per cycle for last fragments. Use `grep ^LBC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n");
- for (ibase=0; ibase<stats->max_len; ibase++)
- {
- acgtno_count_t *acgtno_count_2nd = &(stats->acgtno_cycles_2nd[ibase]);
- uint64_t acgt_sum_2nd = acgtno_count_2nd->a + acgtno_count_2nd->c + acgtno_count_2nd->g + acgtno_count_2nd->t;
-+ tA += acgtno_count_2nd->a;
-+ tC += acgtno_count_2nd->c;
-+ tG += acgtno_count_2nd->g;
-+ tT += acgtno_count_2nd->t;
-+ tN += acgtno_count_2nd->n;
-
- if ( acgt_sum_2nd )
- fprintf(to, "LBC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1,
-@@ -1471,6 +1661,52 @@
- 100.*acgtno_count_2nd->other/acgt_sum_2nd);
-
- }
-+ fprintf(to, "# ACGT raw counters for last fragments. Use `grep ^LTC | cut -f 2-` to extract this part. The columns are: A,C,G,T,N base counters\n");
-+ fprintf(to, "LTC\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\n", tA, tC, tG, tT, tN);
-+
-+ int tag;
-+ for (tag=0; tag<stats->ntags; tag++) {
-+ if (stats->tags_barcode[tag].nbases) {
-+ fprintf(to, "# ACGT content per cycle for barcodes. Use `grep ^%sC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N counts as a percentage of all A/C/G/T bases [%%]\n",
-+ stats->tags_barcode[tag].tag_name);
-+ for (ibase=0; ibase<stats->tags_barcode[tag].nbases; ibase++)
-+ {
-+ if (ibase == stats->tags_barcode[tag].tag_sep)
-+ continue;
-+
-+ acgtno_count_t *acgtno_count = stats->acgtno_barcode + stats->tags_barcode[tag].offset + ibase;
-+ uint64_t acgt_sum = acgtno_count->a + acgtno_count->c + acgtno_count->g + acgtno_count->t;
-+
-+ if ( acgt_sum )
-+ fprintf(to, "%sC%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stats->tags_barcode[tag].tag_name,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? 1 : 2,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? ibase+1 : ibase-stats->tags_barcode[tag].tag_sep,
-+ 100.*acgtno_count->a/acgt_sum,
-+ 100.*acgtno_count->c/acgt_sum,
-+ 100.*acgtno_count->g/acgt_sum,
-+ 100.*acgtno_count->t/acgt_sum,
-+ 100.*acgtno_count->n/acgt_sum);
-+ }
-+
-+ fprintf(to, "# Barcode Qualities. Use `grep ^%sQ | cut -f 2-` to extract this part.\n", stats->tags_barcode[tag].qual_name);
-+ fprintf(to, "# Columns correspond to qualities and rows to barcode cycles. First column is the cycle number.\n");
-+ for (ibase=0; ibase<stats->tags_barcode[tag].nbases; ibase++)
-+ {
-+ if (ibase == stats->tags_barcode[tag].tag_sep)
-+ continue;
-+
-+ fprintf(to, "%sQ%d\t%d", stats->tags_barcode[tag].qual_name,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? 1 : 2,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? ibase+1 : ibase-stats->tags_barcode[tag].tag_sep);
-+ for (iqual=0; iqual<=stats->tags_barcode[tag].max_qual; iqual++)
-+ {
-+ fprintf(to, "\t%ld", (long)stats->quals_barcode[(stats->tags_barcode[tag].offset + ibase)*stats->nquals+iqual]);
-+ }
-+ fprintf(to, "\n");
-+ }
-+ }
-+ }
-+
- fprintf(to, "# Insert sizes. Use `grep ^IS | cut -f 2-` to extract this part. The columns are: insert size, pairs total, inward oriented pairs, outward oriented pairs, other pairs\n");
- for (isize=0; isize<ibulk; isize++) {
- long in = (long)(stats->isize->inward(stats->isize->data, isize));
-@@ -1564,14 +1800,15 @@
- }
- }
-
--void init_regions(stats_t *stats, const char *file)
-+static void init_regions(stats_t *stats, const char *file)
- {
- FILE *fp = fopen(file,"r");
- if ( !fp ) error("%s: %s\n",file,strerror(errno));
-
- kstring_t line = { 0, 0, NULL };
- int warned = 0, r, p, new_p;
-- int prev_tid=-1, prev_pos=-1;
-+ int prev_tid=-1;
-+ hts_pos_t prev_pos=-1LL;
- while (line.l = 0, kgetline(&line, (kgets_func *)fgets, fp) >= 0)
- {
- if ( line.s[0] == '#' ) continue;
-@@ -1592,30 +1829,33 @@
-
- if ( tid >= stats->nregions )
- {
-- stats->regions = realloc(stats->regions,sizeof(regions_t)*(stats->nregions+100));
-+ if(!(stats->regions = realloc(stats->regions,sizeof(regions_t)*(tid+REG_INC))))
-+ error("Could not allocate memory for region.\n");
-+
- int j;
-- for (j=stats->nregions; j<stats->nregions+100; j++)
-+ for (j=stats->nregions; j<tid+REG_INC; j++)
- {
- stats->regions[j].npos = stats->regions[j].mpos = stats->regions[j].cpos = 0;
- stats->regions[j].pos = NULL;
- }
-- stats->nregions += 100;
-+ stats->nregions = tid+REG_INC;
- }
- int npos = stats->regions[tid].npos;
- if ( npos >= stats->regions[tid].mpos )
- {
-- stats->regions[tid].mpos += 1000;
-- stats->regions[tid].pos = realloc(stats->regions[tid].pos,sizeof(pos_t)*stats->regions[tid].mpos);
-+ stats->regions[tid].mpos = npos+POS_INC;
-+ if (!(stats->regions[tid].pos = realloc(stats->regions[tid].pos, sizeof(hts_pair_pos_t)*stats->regions[tid].mpos)))
-+ error("Could not allocate memory for interval.\n");
- }
-
-- if ( (sscanf(&line.s[i+1],"%u %u",&stats->regions[tid].pos[npos].from,&stats->regions[tid].pos[npos].to))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]);
-+ if ( (sscanf(&line.s[i+1],"%"SCNd64" %"SCNd64, &stats->regions[tid].pos[npos].beg, &stats->regions[tid].pos[npos].end))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]);
- if ( prev_tid==-1 || prev_tid!=tid )
- {
- prev_tid = tid;
-- prev_pos = stats->regions[tid].pos[npos].from;
-+ prev_pos = stats->regions[tid].pos[npos].beg;
- }
-- if ( prev_pos>stats->regions[tid].pos[npos].from )
-- error("The positions are not in chromosomal order (%s:%d comes after %d)\n", line.s,stats->regions[tid].pos[npos].from,prev_pos);
-+ if ( prev_pos>stats->regions[tid].pos[npos].beg )
-+ error("The positions are not in chromosomal order (%s:%"PRIhts_pos" comes after %"PRIhts_pos")\n", line.s, stats->regions[tid].pos[npos].beg, prev_pos);
- stats->regions[tid].npos++;
- if ( stats->regions[tid].npos > stats->nchunks )
- stats->nchunks = stats->regions[tid].npos;
-@@ -1628,20 +1868,21 @@
- for (r = 0; r < stats->nregions; r++) {
- regions_t *reg = &stats->regions[r];
- if ( reg->npos > 1 ) {
-- qsort(reg->pos, reg->npos, sizeof(pos_t), regions_lt);
-+ qsort(reg->pos, reg->npos, sizeof(hts_pair_pos_t), regions_lt);
- for (new_p = 0, p = 1; p < reg->npos; p++) {
-- if ( reg->pos[new_p].to < reg->pos[p].from )
-+ if ( reg->pos[new_p].end < reg->pos[p].beg )
- reg->pos[++new_p] = reg->pos[p];
-- else if ( reg->pos[new_p].to < reg->pos[p].to )
-- reg->pos[new_p].to = reg->pos[p].to;
-+ else if ( reg->pos[new_p].end < reg->pos[p].end )
-+ reg->pos[new_p].end = reg->pos[p].end;
- }
- reg->npos = ++new_p;
- }
- for (p = 0; p < reg->npos; p++)
-- stats->target_count += (reg->pos[p].to - reg->pos[p].from + 1);
-+ stats->target_count += (reg->pos[p].end - reg->pos[p].beg + 1);
- }
-
-- stats->chunks = calloc(stats->nchunks, sizeof(pos_t));
-+ if (!(stats->chunks = calloc(stats->nchunks, sizeof(hts_pair_pos_t))))
-+ error("Could not allocate memory for chunk.\n");
- }
-
- void destroy_regions(stats_t *stats)
-@@ -1676,22 +1917,22 @@
- // Find a matching interval or skip this read. No splicing of reads is done, no indels or soft clips considered,
- // even small overlap is enough to include the read in the stats.
- int i = reg->cpos;
-- while ( i<reg->npos && reg->pos[i].to<=bam_line->core.pos ) i++;
-+ while ( i<reg->npos && reg->pos[i].end<=bam_line->core.pos ) i++;
- if ( i>=reg->npos ) { reg->cpos = reg->npos; return 0; }
- int64_t endpos = bam_endpos(bam_line);
-- if ( endpos < reg->pos[i].from ) return 0;
-+ if ( endpos < reg->pos[i].beg ) return 0;
-
- //found a read overlapping a region
- reg->cpos = i;
-- stats->reg_from = reg->pos[i].from;
-- stats->reg_to = reg->pos[i].to;
-+ stats->reg_from = reg->pos[i].beg;
-+ stats->reg_to = reg->pos[i].end;
-
- //now find all the overlapping chunks
- stats->nchunks = 0;
- while (i < reg->npos) {
-- if (bam_line->core.pos < reg->pos[i].to && endpos >= reg->pos[i].from) {
-- stats->chunks[stats->nchunks].from = MAX(bam_line->core.pos+1, reg->pos[i].from);
-- stats->chunks[stats->nchunks].to = MIN(endpos, reg->pos[i].to);
-+ if (bam_line->core.pos < reg->pos[i].end && endpos >= reg->pos[i].beg) {
-+ stats->chunks[stats->nchunks].beg = MAX(bam_line->core.pos+1, reg->pos[i].beg);
-+ stats->chunks[stats->nchunks].end = MIN(endpos, reg->pos[i].end);
- stats->nchunks++;
- }
- i++;
-@@ -1707,7 +1948,7 @@
- int i, j, tid;
- stats->nregions = iter->n_reg;
- stats->regions = calloc(stats->nregions, sizeof(regions_t));
-- stats->chunks = calloc(stats->nchunks, sizeof(pos_t));
-+ stats->chunks = calloc(stats->nchunks, sizeof(hts_pair_pos_t));
- if ( !stats->regions || !stats->chunks )
- return 1;
-
-@@ -1727,15 +1968,15 @@
- }
-
- stats->regions[tid].mpos = stats->regions[tid].npos = iter->reg_list[i].count;
-- stats->regions[tid].pos = calloc(stats->regions[tid].mpos, sizeof(pos_t));
-+ stats->regions[tid].pos = calloc(stats->regions[tid].mpos, sizeof(hts_pair_pos_t));
- if ( !stats->regions[tid].pos )
- return 1;
-
- for (j = 0; j < stats->regions[tid].npos; j++) {
-- stats->regions[tid].pos[j].from = iter->reg_list[i].intervals[j].beg+1;
-- stats->regions[tid].pos[j].to = iter->reg_list[i].intervals[j].end;
-+ stats->regions[tid].pos[j].beg = iter->reg_list[i].intervals[j].beg+1;
-+ stats->regions[tid].pos[j].end = iter->reg_list[i].intervals[j].end;
-
-- stats->target_count += (stats->regions[tid].pos[j].to - stats->regions[tid].pos[j].from + 1);
-+ stats->target_count += (stats->regions[tid].pos[j].end - stats->regions[tid].pos[j].beg + 1);
- }
- }
-
-@@ -1773,7 +2014,7 @@
- }
-
-
--static void error(const char *format, ...)
-+static void HTS_NORETURN error(const char *format, ...)
- {
- if ( !format )
- {
-@@ -1783,13 +2024,14 @@
- printf("Options:\n");
- printf(" -c, --coverage <int>,<int>,<int> Coverage distribution min,max,step [1,1000,1]\n");
- printf(" -d, --remove-dups Exclude from statistics reads marked as duplicates\n");
-+ printf(" -X, --customized-index-file Use a customized index file\n");
- printf(" -f, --required-flag <str|int> Required flag, 0 for unset. See also `samtools flags` [0]\n");
- printf(" -F, --filtering-flag <str|int> Filtering flag, 0 for unset. See also `samtools flags` [0]\n");
- printf(" --GC-depth <float> the size of GC-depth bins (decreasing bin size increases memory requirement) [2e4]\n");
- printf(" -h, --help This help message\n");
- printf(" -i, --insert-size <int> Maximum insert size [8000]\n");
- printf(" -I, --id <string> Include only listed read group or sample name\n");
-- printf(" -l, --read-length <int> Include in the statistics only reads with the given read length []\n");
-+ printf(" -l, --read-length <int> Include in the statistics only reads with the given read length [-1]\n");
- printf(" -m, --most-inserts <float> Report only the main part of inserts [0.99]\n");
- printf(" -P, --split-prefix <str> Path or string prefix for filepaths output by -S (default is input filename)\n");
- printf(" -q, --trim-quality <int> The BWA trimming parameter [0]\n");
-@@ -1799,8 +2041,8 @@
- printf(" -t, --target-regions <file> Do stats in these regions only. Tab-delimited file chr,from,to, 1-based, inclusive.\n");
- printf(" -x, --sparse Suppress outputting IS rows where there are no insertions.\n");
- printf(" -p, --remove-overlaps Remove overlaps of paired-end reads from coverage and base count computations.\n");
-- printf(" -g, --cov-threshold Only bases with coverage above this value will be included in the target percentage computation.\n");
-- sam_global_opt_help(stdout, "-.--.@");
-+ printf(" -g, --cov-threshold <int> Only bases with coverage above this value will be included in the target percentage computation [0]\n");
-+ sam_global_opt_help(stdout, "-.--.@-.");
- printf("\n");
- }
- else
-@@ -1840,6 +2082,9 @@
- free(stats->ins_cycles_2nd);
- free(stats->del_cycles_1st);
- free(stats->del_cycles_2nd);
-+ if (stats->acgtno_barcode) free(stats->acgtno_barcode);
-+ if (stats->quals_barcode) free(stats->quals_barcode);
-+ free(stats->tags_barcode);
- destroy_regions(stats);
- if ( stats->rg_hash ) khash_str2int_destroy(stats->rg_hash);
- free(stats->split_name);
-@@ -1878,6 +2123,9 @@
-
- void destroy_split_stats(khash_t(c2stats) *split_hash)
- {
-+ if (!split_hash)
-+ return;
-+
- int i = 0;
- stats_t *curr_stats = NULL;
- for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){
-@@ -1891,6 +2139,10 @@
- stats_info_t* stats_info_init(int argc, char *argv[])
- {
- stats_info_t* info = calloc(1, sizeof(stats_info_t));
-+ if (!info) {
-+ return NULL;
-+ }
-+
- info->nisize = 8000;
- info->isize_main_bulk = 0.99; // There are always outliers at the far end
- info->gcd_bin_size = 20e3;
-@@ -1926,11 +2178,15 @@
- stats_t* stats_init()
- {
- stats_t *stats = calloc(1,sizeof(stats_t));
-+ if (!stats)
-+ return NULL;
-+
- stats->ngc = 200;
- stats->nquals = 256;
- stats->nbases = 300;
- stats->rseq_pos = -1;
-- stats->tid = stats->gcd_pos = -1;
-+ stats->tid = -1;
-+ stats->gcd_pos = -1LL;
- stats->igcd = 0;
- stats->is_sorted = 1;
- stats->nindels = stats->nbases;
-@@ -1944,6 +2200,18 @@
- return stats;
- }
-
-+static int init_barcode_tags(stats_t* stats) {
-+ stats->ntags = 4;
-+ stats->tags_barcode = calloc(stats->ntags, sizeof(barcode_info_t));
-+ if (!stats->tags_barcode)
-+ return -1;
-+ stats->tags_barcode[0] = (barcode_info_t){"BC", "QT", 0, -1, -1, 0};
-+ stats->tags_barcode[1] = (barcode_info_t){"CR", "CY", 0, -1, -1, 0};
-+ stats->tags_barcode[2] = (barcode_info_t){"OX", "BZ", 0, -1, -1, 0};
-+ stats->tags_barcode[3] = (barcode_info_t){"RX", "QX", 0, -1, -1, 0};
-+ return 0;
-+}
-+
- static void init_stat_structs(stats_t* stats, stats_info_t* info, const char* group_id, const char* targets)
- {
- // Give stats_t a pointer to the info struct
-@@ -1961,32 +2229,60 @@
- stats->ncov = 3 + (info->cov_max-info->cov_min) / info->cov_step;
- info->cov_max = info->cov_min + ((info->cov_max-info->cov_min)/info->cov_step +1)*info->cov_step - 1;
- stats->cov = calloc(sizeof(uint64_t),stats->ncov);
-+ if (!stats->cov) goto nomem;
- stats->cov_rbuf.size = stats->nbases*5;
- stats->cov_rbuf.buffer = calloc(sizeof(int32_t),stats->cov_rbuf.size);
--
-+ if (!stats->cov_rbuf.buffer) goto nomem;
- if ( group_id ) init_group_id(stats, group_id);
- // .. arrays
- stats->quals_1st = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->quals_1st) goto nomem;
- stats->quals_2nd = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->quals_2nd) goto nomem;
- stats->gc_1st = calloc(stats->ngc,sizeof(uint64_t));
-+ if (!stats->gc_1st) goto nomem;
- stats->gc_2nd = calloc(stats->ngc,sizeof(uint64_t));
-+ if (!stats->gc_2nd) goto nomem;
- stats->isize = init_isize_t(info->nisize ?info->nisize+1 :0);
-+ if (!stats->isize) goto nomem;
- stats->gcd = calloc(stats->ngcd,sizeof(gc_depth_t));
-- stats->mpc_buf = info->fai ? calloc(stats->nquals*stats->nbases,sizeof(uint64_t)) : NULL;
-+ if (!stats->gcd) goto nomem;
-+ if (info->fai) {
-+ stats->mpc_buf = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->mpc_buf) goto nomem;
-+ } else {
-+ stats->mpc_buf = NULL;
-+ }
- stats->acgtno_cycles_1st = calloc(stats->nbases,sizeof(acgtno_count_t));
-+ if (!stats->acgtno_cycles_1st) goto nomem;
- stats->acgtno_cycles_2nd = calloc(stats->nbases,sizeof(acgtno_count_t));
-+ if (!stats->acgtno_cycles_2nd) goto nomem;
- stats->read_lengths = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths) goto nomem;
- stats->read_lengths_1st = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths_1st) goto nomem;
- stats->read_lengths_2nd = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths_2nd) goto nomem;
- stats->insertions = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->insertions) goto nomem;
- stats->deletions = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->deletions) goto nomem;
- stats->ins_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->ins_cycles_1st) goto nomem;
- stats->ins_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->ins_cycles_2nd) goto nomem;
- stats->del_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->del_cycles_1st) goto nomem;
- stats->del_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->del_cycles_2nd) goto nomem;
-+ if (init_barcode_tags(stats) < 0)
-+ goto nomem;
- realloc_rseq_buffer(stats);
- if ( targets )
- init_regions(stats, targets);
-+ return;
-+ nomem:
-+ error("Out of memory");
- }
-
- static stats_t* get_curr_split_stats(bam1_t* bam_line, khash_t(c2stats)* split_hash, stats_info_t* info, char* targets)
-@@ -2002,6 +2298,9 @@
- khiter_t k = kh_get(c2stats, split_hash, split_name);
- if(k == kh_end(split_hash)){
- curr_stats = stats_init(); // mallocs new instance
-+ if (!curr_stats) {
-+ error("Couldn't allocate split stats");
-+ }
- init_stat_structs(curr_stats, info, NULL, targets);
- curr_stats->split_name = split_name;
-
-@@ -2024,11 +2323,16 @@
- {
- char *targets = NULL;
- char *bam_fname = NULL;
-+ char *bam_idx_fname = NULL;
- char *group_id = NULL;
-- int sparse = 0;
-+ int sparse = 0, has_index_file = 0, ret = 1;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- stats_info_t *info = stats_info_init(argc, argv);
-+ if (!info) {
-+ fprintf(stderr, "Could not allocate memory for info.\n");
-+ return 1;
-+ }
-
- static const struct option loptions[] =
- {
-@@ -2036,6 +2340,7 @@
- {"help", no_argument, NULL, 'h'},
- {"remove-dups", no_argument, NULL, 'd'},
- {"sam", no_argument, NULL, 's'},
-+ {"customized-index-file", required_argument, NULL, 'X'},
- {"ref-seq", required_argument, NULL, 'r'},
- {"coverage", required_argument, NULL, 'c'},
- {"read-length", required_argument, NULL, 'l'},
-@@ -2056,13 +2361,14 @@
- };
- int opt;
-
-- while ( (opt=getopt_long(argc,argv,"?hdsxpr:c:l:i:t:m:q:f:F:g:I:1:S:P:@:",loptions,NULL))>0 )
-+ while ( (opt=getopt_long(argc,argv,"?hdsXxpr:c:l:i:t:m:q:f:F:g:I:S:P:@:",loptions,NULL))>0 )
- {
- switch (opt)
- {
- case 'f': info->flag_require = bam_str2flag(optarg); break;
- case 'F': info->flag_filter |= bam_str2flag(optarg); break;
- case 'd': info->flag_filter |= BAM_FDUP; break;
-+ case 'X': has_index_file = 1; break;
- case 's': break;
- case 'r': info->fai = fai_load(optarg);
- if (info->fai==NULL)
-@@ -2088,15 +2394,15 @@
- break;
- case '?':
- case 'h': error(NULL);
-+ /* no break */
- default:
- if (parse_sam_global_opt(opt, optarg, loptions, &ga) != 0)
- error("Unknown argument: %s\n", optarg);
- break;
- }
- }
-- if ( optind<argc )
-- bam_fname = argv[optind++];
-
-+ bam_fname = argv[optind++];
- if ( !bam_fname )
- {
- if ( isatty(STDIN_FILENO) )
-@@ -2108,82 +2414,91 @@
- free(info);
- return 1;
- }
-+
-+ if (has_index_file && !(bam_idx_fname = argv[optind++])) {
-+ fprintf(stderr, "No index file provided\n");
-+ free(info);
-+ return 1;
-+ }
-+
- if (ga.nthreads > 0)
- hts_set_threads(info->sam, ga.nthreads);
-
- stats_t *all_stats = stats_init();
-+ if (!all_stats) {
-+ fprintf(stderr, "Could not allocate memory for stats.\n");
-+ cleanup_stats_info(info);
-+ return 1;
-+ }
- stats_t *curr_stats = NULL;
- init_stat_structs(all_stats, info, group_id, targets);
- // Init
- // .. hash
- khash_t(c2stats)* split_hash = kh_init(c2stats);
-+ if (!split_hash) goto cleanup_all_stats;
-
- khash_t(qn2pair)* read_pairs = kh_init(qn2pair);
-+ if (!read_pairs) goto cleanup_split_hash;
-
- // Collect statistics
- bam1_t *bam_line = bam_init1();
-- if ( optind<argc )
-- {
-- int filter = 1;
-- // Prepare the region hash table for the multi-region iterator
-- void *region_hash = bed_hash_regions(NULL, argv, optind, argc, &filter);
-- if (region_hash) {
--
-- // Collect stats in selected regions only
-- hts_idx_t *bam_idx = sam_index_load(info->sam,bam_fname);
-- if (bam_idx) {
--
-- int regcount = 0;
-- hts_reglist_t *reglist = bed_reglist(region_hash, ALL, ®count);
-- if (reglist) {
--
-- hts_itr_multi_t *iter = sam_itr_regions(bam_idx, info->sam_header, reglist, regcount);
-- if (iter) {
--
-- if (!targets) {
-- all_stats->nchunks = argc-optind;
-- if ( replicate_regions(all_stats, iter) )
-- fprintf(stderr, "Replications of the regions failed.");
-- }
-+ if (!bam_line) goto cleanup_read_pairs;
-+
-+ if (optind < argc) {
-+ // Region:interval arguments in the command line
-+ hts_idx_t *bam_idx = NULL;
-+ if (has_index_file) {
-+ bam_idx = sam_index_load2(info->sam, bam_fname, bam_idx_fname);
-+ } else {
-+ // If an index filename has not been specified, look alongside the alignment file
-+ bam_idx = sam_index_load(info->sam, bam_fname);
-+ }
-+
-+ if (bam_idx) {
-+ hts_itr_multi_t *iter = sam_itr_regarray(bam_idx, info->sam_header, &argv[optind], argc - optind);
-+ if (iter) {
-+ if (!targets) {
-+ all_stats->nchunks = argc-optind;
-+ if (replicate_regions(all_stats, iter))
-+ fprintf(stderr, "Replications of the regions failed\n");
-+ }
-
-- if ( all_stats->nregions && all_stats->regions ) {
-- while (sam_itr_multi_next(info->sam, iter, bam_line) >= 0) {
-- if (info->split_tag) {
-- curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-- collect_stats(bam_line, curr_stats, read_pairs);
-- }
-- collect_stats(bam_line, all_stats, read_pairs);
-- }
-+ if ( all_stats->nregions && all_stats->regions ) {
-+ while ((ret = sam_itr_next(info->sam, iter, bam_line)) >= 0) {
-+ if (info->split_tag) {
-+ curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-+ collect_stats(bam_line, curr_stats, read_pairs);
- }
-+ collect_stats(bam_line, all_stats, read_pairs);
-+ }
-
-+ if (ret < -1) {
-+ fprintf(stderr, "Failure while running the iterator\n");
- hts_itr_multi_destroy(iter);
-- } else {
-- fprintf(stderr, "Creation of the region iterator failed.");
-- hts_reglist_free(reglist, regcount);
-+ hts_idx_destroy(bam_idx);
-+ goto cleanup;
- }
-- } else {
-- fprintf(stderr, "Creation of the region list failed.");
- }
--
-- hts_idx_destroy(bam_idx);
-+ hts_itr_multi_destroy(iter);
- } else {
-- fprintf(stderr, "Random alignment retrieval only works for indexed BAM files.\n");
-+ fprintf(stderr, "Multi-region iterator could not be created\n");
-+ hts_idx_destroy(bam_idx);
-+ goto cleanup;
- }
--
-- bed_destroy(region_hash);
-+ hts_idx_destroy(bam_idx);
- } else {
-- fprintf(stderr, "Creation of the region hash table failed.\n");
-+ if (has_index_file)
-+ fprintf(stderr, "Invalid index file '%s'\n", bam_idx_fname);
-+ fprintf(stderr, "Random alignment retrieval only works for indexed files\n");
-+ goto cleanup;
- }
-- }
-- else
-- {
-+ } else {
- if ( info->cov_threshold > 0 && !targets ) {
-- fprintf(stderr, "Coverage percentage calcuation requires a list of target regions\n");
-+ fprintf(stderr, "Coverage percentage calculation requires a list of target regions\n");
- goto cleanup;
- }
-
- // Stream through the entire BAM ignoring off-target regions if -t is given
-- int ret;
- while ((ret = sam_read1(info->sam, info->sam_header, bam_line)) >= 0) {
- if (info->split_tag) {
- curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-@@ -2194,7 +2509,7 @@
-
- if (ret < -1) {
- fprintf(stderr, "Failure while decoding file\n");
-- return 1;
-+ goto cleanup;
- }
- }
-
-@@ -2203,15 +2518,19 @@
- if (info->split_tag)
- output_split_stats(split_hash, bam_fname, sparse);
-
-+ ret = 0;
- cleanup:
- bam_destroy1(bam_line);
-- bam_hdr_destroy(info->sam_header);
-+ sam_hdr_destroy(info->sam_header);
- sam_global_args_free(&ga);
-
-+cleanup_read_pairs:
-+ cleanup_overlaps(read_pairs, INT64_MAX);
-+cleanup_split_hash:
-+ destroy_split_stats(split_hash);
-+cleanup_all_stats:
- cleanup_stats(all_stats);
- cleanup_stats_info(info);
-- destroy_split_stats(split_hash);
-- cleanup_overlaps(read_pairs, INT_MAX);
-
-- return 0;
-+ return ret;
- }
---- python-pysam.orig/samtools/stats.c.pysam.c
-+++ python-pysam/samtools/stats.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* stats.c -- This is the former bamcheck integrated into samtools/htslib.
-
-- Copyright (C) 2012-2015 Genome Research Ltd.
-+ Copyright (C) 2012-2019 Genome Research Ltd.
-
- Author: Petr Danecek <pd3@sanger.ac.uk>
- Author: Sam Nicholls <sam@samnicholls.net>
-@@ -48,6 +48,7 @@
- #include <string.h>
- #include <math.h>
- #include <ctype.h>
-+#include <inttypes.h>
- #include <getopt.h>
- #include <errno.h>
- #include <assert.h>
-@@ -55,7 +56,7 @@
- #include <htslib/faidx.h>
- #include <htslib/sam.h>
- #include <htslib/hts.h>
--#include "sam_header.h"
-+#include <htslib/hts_defs.h>
- #include <htslib/khash_str2int.h>
- #include "samtools.h"
- #include <htslib/khash.h>
-@@ -67,8 +68,10 @@
- #define BWA_MIN_RDLEN 35
- #define DEFAULT_CHUNK_NO 8
- #define DEFAULT_PAIR_MAX 10000
-+#define ERROR_LIMIT 200
- // From the spec
- // If 0x4 is set, no assumptions can be made about RNAME, POS, CIGAR, MAPQ, bits 0x2, 0x10, 0x100 and 0x800, and the bit 0x20 of the previous read in the template.
-+#define IS_PAIRED(bam) ((bam)->core.flag&BAM_FPAIRED)
- #define IS_PAIRED_AND_MAPPED(bam) (((bam)->core.flag&BAM_FPAIRED) && !((bam)->core.flag&BAM_FUNMAP) && !((bam)->core.flag&BAM_FMUNMAP))
- #define IS_PROPERLYPAIRED(bam) (((bam)->core.flag&(BAM_FPAIRED|BAM_FPROPER_PAIR)) == (BAM_FPAIRED|BAM_FPROPER_PAIR) && !((bam)->core.flag&BAM_FUNMAP))
- #define IS_UNMAPPED(bam) ((bam)->core.flag&BAM_FUNMAP)
-@@ -79,6 +82,14 @@
- #define IS_DUP(bam) ((bam)->core.flag&BAM_FDUP)
- #define IS_ORIGINAL(bam) (((bam)->core.flag&(BAM_FSECONDARY|BAM_FSUPPLEMENTARY)) == 0)
-
-+#define READ_ORDER_NONE 0
-+#define READ_ORDER_FIRST 1
-+#define READ_ORDER_LAST 2
-+#define READ_ORDER_MIDDLE 3
-+
-+#define REG_INC 100
-+#define POS_INC 1000
-+
- // The GC-depth graph works as follows: split the reference sequence into
- // segments and calculate GC content and depth in each bin. Then sort
- // these segments by their GC and plot the depth distribution by means
-@@ -93,17 +104,16 @@
- // For coverage distribution, a simple pileup
- typedef struct
- {
-- int64_t pos;
-+ hts_pos_t pos;
- int size, start;
- int *buffer;
- }
- round_buffer_t;
-
--typedef struct { uint32_t from, to; } pos_t;
- typedef struct
- {
-- int npos,mpos,cpos;
-- pos_t *pos;
-+ int npos, mpos, cpos;
-+ hts_pair_pos_t *pos;
- }
- regions_t;
-
-@@ -120,6 +130,17 @@
-
- typedef struct
- {
-+ char tag_name[3];
-+ char qual_name[3];
-+ uint32_t nbases;
-+ int32_t tag_sep; // Index of the separator (if present)
-+ int32_t max_qual;
-+ uint32_t offset; // Where the tag stats info is located in the allocated memory
-+}
-+barcode_info_t;
-+
-+typedef struct
-+{
- // Auxiliary data
- int flag_require, flag_filter;
- faidx_t *fai; // Reference sequence for GC-depth graph
-@@ -131,7 +152,7 @@
- float isize_main_bulk; // There are always some unrealistically big insert sizes, report only the main part
- int cov_min,cov_max,cov_step; // Minimum, maximum coverage and size of the coverage bins
- samFile* sam;
-- bam_hdr_t* sam_header;
-+ sam_hdr_t* sam_header;
-
- // Filters
- int filter_readlen;
-@@ -177,6 +198,7 @@
- uint64_t total_len_dup;
- uint64_t nreads_1st;
- uint64_t nreads_2nd;
-+ uint64_t nreads_other;
- uint64_t nreads_filtered;
- uint64_t nreads_dup;
- uint64_t nreads_unmapped;
-@@ -198,8 +220,8 @@
- // GC-depth related data
- uint32_t ngcd, igcd; // The maximum number of GC depth bins and index of the current bin
- gc_depth_t *gcd; // The GC-depth bins holder
-- int32_t tid, gcd_pos; // Position of the current bin
-- int32_t pos; // Position of the last read
-+ int32_t tid; // Position of the current bin
-+ hts_pos_t gcd_pos, pos; // Position of the last read
-
- // Coverage distribution related data
- int ncov; // The number of coverage bins
-@@ -209,12 +231,13 @@
- // Mismatches by read cycle
- uint8_t *rseq_buf; // A buffer for reference sequence to check the mismatches against
- int mrseq_buf; // The size of the buffer
-- int32_t rseq_pos; // The coordinate of the first base in the buffer
-- int32_t nrseq_buf; // The used part of the buffer
-+ hts_pos_t rseq_pos; // The coordinate of the first base in the buffer
-+ int64_t nrseq_buf; // The used part of the buffer
- uint64_t *mpc_buf; // Mismatches per cycle
-
- // Target regions
-- int nregions, reg_from, reg_to;
-+ int nregions;
-+ hts_pos_t reg_from, reg_to;
- regions_t *regions;
-
- // Auxiliary data
-@@ -225,13 +248,20 @@
- char* split_name;
-
- stats_info_t* info; // Pointer to options and settings struct
-- pos_t *chunks;
-+ hts_pair_pos_t *chunks;
- uint32_t nchunks;
-
- uint32_t pair_count; // Number of active pairs in the pairing hash table
- uint32_t target_count; // Number of bases covered by the target file
- uint32_t last_pair_tid;
- uint32_t last_read_flush;
-+
-+ // Barcode statistics
-+ acgtno_count_t *acgtno_barcode;
-+ uint64_t *quals_barcode;
-+ barcode_info_t *tags_barcode;
-+ uint32_t ntags;
-+ uint32_t error_number;
- }
- stats_t;
- KHASH_MAP_INIT_STR(c2stats, stats_t*)
-@@ -239,18 +269,18 @@
- typedef struct {
- uint32_t first; // 1 - first read, 2 - second read
- uint32_t n, m; // number of chunks, allocated chunks
-- pos_t *chunks; // chunk array of size m
-+ hts_pair_pos_t *chunks; // chunk array of size m
- } pair_t;
- KHASH_MAP_INIT_STR(qn2pair, pair_t*)
-
-
--static void error(const char *format, ...);
-+static void HTS_NORETURN error(const char *format, ...);
- int is_in_regions(bam1_t *bam_line, stats_t *stats);
- void realloc_buffers(stats_t *stats, int seq_len);
-
- static int regions_lt(const void *r1, const void *r2) {
-- int64_t from_diff = (int64_t)((pos_t *)r1)->from - (int64_t)((pos_t *)r2)->from;
-- int64_t to_diff = (int64_t)((pos_t *)r1)->to - (int64_t)((pos_t *)r2)->to;
-+ int64_t from_diff = ((hts_pair_pos_t *)r1)->beg - ((hts_pair_pos_t *)r2)->beg;
-+ int64_t to_diff = ((hts_pair_pos_t *)r1)->end - ((hts_pair_pos_t *)r2)->end;
-
- return from_diff > 0 ? 1 : from_diff < 0 ? -1 : to_diff > 0 ? 1 : to_diff < 0 ? -1 : 0;
- }
-@@ -267,19 +297,19 @@
- return 1 + (depth - min) / step;
- }
-
--static inline int round_buffer_lidx2ridx(int offset, int size, int64_t refpos, int64_t pos)
-+static inline int round_buffer_lidx2ridx(int offset, int size, hts_pos_t refpos, hts_pos_t pos)
- {
- return (offset + (pos-refpos) % size) % size;
- }
-
--void round_buffer_flush(stats_t *stats, int64_t pos)
-+void round_buffer_flush(stats_t *stats, hts_pos_t pos)
- {
- int ibuf,idp;
-
- if ( pos==stats->cov_rbuf.pos )
- return;
-
-- int64_t new_pos = pos;
-+ hts_pos_t new_pos = pos;
- if ( pos==-1 || pos - stats->cov_rbuf.pos >= stats->cov_rbuf.size )
- {
- // Flush the whole buffer, but in sequential order,
-@@ -287,10 +317,10 @@
- }
-
- if ( pos < stats->cov_rbuf.pos )
-- error("Expected coordinates in ascending order, got %ld after %ld\n", pos,stats->cov_rbuf.pos);
-+ error("Expected coordinates in ascending order, got %"PRIhts_pos" after %"PRIhts_pos"\n", pos, stats->cov_rbuf.pos);
-
- int ifrom = stats->cov_rbuf.start;
-- int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos-1);
-+ int ito = round_buffer_lidx2ridx(stats->cov_rbuf.start, stats->cov_rbuf.size, stats->cov_rbuf.pos, pos-1);
- if ( ifrom>ito )
- {
- for (ibuf=ifrom; ibuf<stats->cov_rbuf.size; ibuf++)
-@@ -311,27 +341,30 @@
- stats->cov[idp]++;
- stats->cov_rbuf.buffer[ibuf] = 0;
- }
-- stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start,stats->cov_rbuf.size,stats->cov_rbuf.pos,pos);
-+ stats->cov_rbuf.start = (new_pos==-1) ? 0 : round_buffer_lidx2ridx(stats->cov_rbuf.start, stats->cov_rbuf.size, stats->cov_rbuf.pos, pos);
- stats->cov_rbuf.pos = new_pos;
- }
-
--void round_buffer_insert_read(round_buffer_t *rbuf, int64_t from, int64_t to)
-+/**
-+ * [from, to) - 0 based half-open
-+ */
-+static void round_buffer_insert_read(round_buffer_t *rbuf, hts_pos_t from, hts_pos_t to)
- {
-- if ( to-from >= rbuf->size )
-- error("The read length too big (%d), please increase the buffer length (currently %d)\n", to-from+1,rbuf->size);
-+ if ( to-from > rbuf->size )
-+ error("The read length too big (%"PRIhts_pos"), please increase the buffer length (currently %d)\n", to-from, rbuf->size);
- if ( from < rbuf->pos )
-- error("The reads are not sorted (%ld comes after %ld).\n", from,rbuf->pos);
-+ error("The reads are not sorted (%"PRIhts_pos" comes after %"PRIhts_pos").\n", from, rbuf->pos);
-
-- int ifrom,ito,ibuf;
-- ifrom = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,from);
-- ito = round_buffer_lidx2ridx(rbuf->start,rbuf->size,rbuf->pos,to);
-+ int ifrom, ito, ibuf;
-+ ifrom = round_buffer_lidx2ridx(rbuf->start, rbuf->size, rbuf->pos, from);
-+ ito = round_buffer_lidx2ridx(rbuf->start, rbuf->size, rbuf->pos, to);
- if ( ifrom>ito )
- {
- for (ibuf=ifrom; ibuf<rbuf->size; ibuf++)
- rbuf->buffer[ibuf]++;
- ifrom = 0;
- }
-- for (ibuf=ifrom; ibuf<=ito; ibuf++)
-+ for (ibuf=ifrom; ibuf<ito; ibuf++)
- rbuf->buffer[ibuf]++;
- }
-
-@@ -364,7 +397,7 @@
- void count_indels(stats_t *stats,bam1_t *bam_line)
- {
- int is_fwd = IS_REVERSE(bam_line) ? 0 : 1;
-- int is_1st = IS_READ1(bam_line) ? 1 : 0;
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
- int icig;
- int icycle = 0;
- int read_len = bam_line->core.l_qseq;
-@@ -379,10 +412,10 @@
- int idx = is_fwd ? icycle : read_len-icycle-ncig;
- if ( idx<0 )
- error("FIXME: read_len=%d vs icycle=%d\n", read_len,icycle);
-- if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%d %s\n", idx,stats->nbases, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-- if ( is_1st )
-+ if ( idx >= stats->nbases || idx<0 ) error("FIXME: %d vs %d, %s:%"PRIhts_pos" %s\n", idx, stats->nbases, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-+ if ( order == READ_ORDER_FIRST )
- stats->ins_cycles_1st[idx]++;
-- else
-+ if ( order == READ_ORDER_LAST )
- stats->ins_cycles_2nd[idx]++;
- icycle += ncig;
- if ( ncig<=stats->nindels )
-@@ -394,9 +427,9 @@
- int idx = is_fwd ? icycle-1 : read_len-icycle-1;
- if ( idx<0 ) continue; // discard meaningless deletions
- if ( idx >= stats->nbases ) error("FIXME: %d vs %d\n", idx,stats->nbases);
-- if ( is_1st )
-+ if ( order == READ_ORDER_FIRST )
- stats->del_cycles_1st[idx]++;
-- else
-+ if ( order == READ_ORDER_LAST )
- stats->del_cycles_2nd[idx]++;
- if ( ncig<=stats->nindels )
- stats->deletions[ncig-1]++;
-@@ -422,8 +455,8 @@
- void count_mismatches_per_cycle(stats_t *stats, bam1_t *bam_line, int read_len)
- {
- int is_fwd = IS_REVERSE(bam_line) ? 0 : 1;
-- int icig,iread=0,icycle=0;
-- int iref = bam_line->core.pos - stats->rseq_pos;
-+ int icig, iread=0, icycle=0;
-+ hts_pos_t iref = bam_line->core.pos - stats->rseq_pos;
- uint8_t *read = bam_get_seq(bam_line);
- uint8_t *quals = bam_get_qual(bam_line);
- uint64_t *mpc_buf = stats->mpc_buf;
-@@ -456,13 +489,13 @@
- continue;
- }
- // Ignore H and N CIGARs. The letter are inserted e.g. by TopHat and often require very large
-- // chunk of refseq in memory. Not very frequent and not noticable in the stats.
-+ // chunk of refseq in memory. Not very frequent and not noticeable in the stats.
- if ( cig==BAM_CREF_SKIP || cig==BAM_CHARD_CLIP || cig==BAM_CPAD ) continue;
- if ( cig!=BAM_CMATCH && cig!=BAM_CEQUAL && cig!=BAM_CDIFF ) // not relying on precalculated diffs
-- error("TODO: cigar %d, %s:%d %s\n", cig,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("TODO: cigar %d, %s:%"PRIhts_pos" %s\n", cig, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- if ( ncig+iref > stats->nrseq_buf )
-- error("FIXME: %d+%d > %d, %s, %s:%d\n",ncig,iref,stats->nrseq_buf, bam_get_qname(bam_line),stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1);
-+ error("FIXME: %d+%"PRIhts_pos" > %"PRId64", %s, %s:%"PRIhts_pos"\n", ncig, iref, stats->nrseq_buf, bam_get_qname(bam_line), sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1);
-
- int im;
- for (im=0; im<ncig; im++)
-@@ -486,11 +519,11 @@
- {
- uint8_t qual = quals[iread] + 1;
- if ( qual>=stats->nquals )
-- error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals, stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("TODO: quality too high %d>=%d (%s %"PRIhts_pos" %s)\n", qual, stats->nquals, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- int idx = is_fwd ? icycle : read_len-icycle-1;
- if ( idx>stats->max_len )
-- error("mpc: %d>%d (%s %d %s)\n",idx,stats->max_len,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-+ error("mpc: %d>%d (%s %"PRIhts_pos" %s)\n", idx, stats->max_len, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-
- idx = idx*stats->nquals + qual;
- if ( idx>=stats->nquals*stats->nbases )
-@@ -505,11 +538,12 @@
- }
- }
-
--void read_ref_seq(stats_t *stats, int32_t tid, int32_t pos)
-+void read_ref_seq(stats_t *stats, int32_t tid, hts_pos_t pos)
- {
-- int i, fai_ref_len;
-- char *fai_ref = faidx_fetch_seq(stats->info->fai, stats->info->sam_header->target_name[tid], pos, pos+stats->mrseq_buf-1, &fai_ref_len);
-- if ( fai_ref_len<0 ) error("Failed to fetch the sequence \"%s\"\n", stats->info->sam_header->target_name[tid]);
-+ int i;
-+ hts_pos_t fai_ref_len;
-+ char *fai_ref = faidx_fetch_seq64(stats->info->fai, sam_hdr_tid2name(stats->info->sam_header, tid), pos, pos+stats->mrseq_buf-1, &fai_ref_len);
-+ if ( fai_ref_len < 0 ) error("Failed to fetch the sequence \"%s\"\n", sam_hdr_tid2name(stats->info->sam_header, tid));
-
- uint8_t *ptr = stats->rseq_buf;
- for (i=0; i<fai_ref_len; i++)
-@@ -539,10 +573,10 @@
- stats->tid = tid;
- }
-
--float fai_gc_content(stats_t *stats, int pos, int len)
-+float fai_gc_content(stats_t *stats, hts_pos_t pos, int len)
- {
- uint32_t gc,count,c;
-- int i = pos - stats->rseq_pos, ito = i + len;
-+ hts_pos_t i = pos - stats->rseq_pos, ito = i + len;
- assert( i>=0 );
-
- if ( ito > stats->nrseq_buf ) ito = stats->nrseq_buf;
-@@ -570,6 +604,9 @@
- if ( stats->mrseq_buf<n )
- {
- stats->rseq_buf = realloc(stats->rseq_buf,sizeof(uint8_t)*n);
-+ if (!stats->rseq_buf) {
-+ error("Could not reallocate reference sequence buffer");
-+ }
- stats->mrseq_buf = n;
- }
- }
-@@ -661,6 +698,9 @@
-
- // Realloc the coverage distribution buffer
- int *rbuffer = calloc(sizeof(int),seq_len*5);
-+ if (!rbuffer) {
-+ error("Could not allocate coverage distribution buffer");
-+ }
- n = stats->cov_rbuf.size-stats->cov_rbuf.start;
- memcpy(rbuffer,stats->cov_rbuf.buffer+stats->cov_rbuf.start,n);
- if ( stats->cov_rbuf.start>1 )
-@@ -690,6 +730,119 @@
- stats->checksum.quals += crc32(0L, qual, (seq_len+1)/2);
- }
-
-+// Collect statistics about the barcode tags specified by init_barcode_tags method
-+static void collect_barcode_stats(bam1_t* bam_line, stats_t* stats) {
-+ uint32_t nbases, tag, i;
-+ acgtno_count_t *acgtno;
-+ uint64_t *quals;
-+ int32_t *separator, *maxqual;
-+
-+ for (tag = 0; tag < stats->ntags; tag++) {
-+ const char *barcode_tag = stats->tags_barcode[tag].tag_name, *qual_tag = stats->tags_barcode[tag].qual_name;
-+ uint8_t* bc = bam_aux_get(bam_line, barcode_tag);
-+ if (!bc)
-+ continue;
-+
-+ char* barcode = bam_aux2Z(bc);
-+ if (!barcode)
-+ continue;
-+
-+ uint32_t barcode_len = strlen(barcode);
-+ if (!stats->tags_barcode[tag].nbases) { // tag seen for the first time
-+ uint32_t offset = 0;
-+ for (i = 0; i < stats->ntags; i++)
-+ offset += stats->tags_barcode[i].nbases;
-+
-+ stats->tags_barcode[tag].offset = offset;
-+ stats->tags_barcode[tag].nbases = barcode_len;
-+ stats->acgtno_barcode = realloc(stats->acgtno_barcode, (offset + barcode_len) * sizeof(acgtno_count_t));
-+ stats->quals_barcode = realloc(stats->quals_barcode, (offset + barcode_len) * stats->nquals * sizeof(uint64_t));
-+
-+ if (!stats->acgtno_barcode || !stats->quals_barcode)
-+ error("Error allocating memory. Aborting!\n");
-+
-+ memset(stats->acgtno_barcode + offset, 0, barcode_len*sizeof(acgtno_count_t));
-+ memset(stats->quals_barcode + offset*stats->nquals, 0, barcode_len*stats->nquals*sizeof(uint64_t));
-+ }
-+
-+ nbases = stats->tags_barcode[tag].nbases;
-+ if (barcode_len > nbases) {
-+ fprintf(samtools_stderr, "Barcodes with tag %s differ in length at sequence '%s'\n", barcode_tag, bam_get_qname(bam_line));
-+ continue;
-+ }
-+
-+ acgtno = stats->acgtno_barcode + stats->tags_barcode[tag].offset;
-+ quals = stats->quals_barcode + stats->tags_barcode[tag].offset*stats->nquals;
-+ maxqual = &stats->tags_barcode[tag].max_qual;
-+ separator = &stats->tags_barcode[tag].tag_sep;
-+ int error_flag = 0;
-+
-+ for (i = 0; i < barcode_len; i++) {
-+ switch (barcode[i]) {
-+ case 'A':
-+ acgtno[i].a++;
-+ break;
-+ case 'C':
-+ acgtno[i].c++;
-+ break;
-+ case 'G':
-+ acgtno[i].g++;
-+ break;
-+ case 'T':
-+ acgtno[i].t++;
-+ break;
-+ case 'N':
-+ acgtno[i].n++;
-+ break;
-+ default:
-+ if (*separator >= 0) {
-+ if (*separator != i) {
-+ if (stats->error_number < ERROR_LIMIT) {
-+ fprintf(samtools_stderr, "Barcode separator for tag %s is in a different position or wrong barcode content('%s') at sequence '%s'\n", barcode_tag, barcode, bam_get_qname(bam_line));
-+ stats->error_number++;
-+ }
-+ error_flag = 1;
-+ }
-+ } else {
-+ *separator = i;
-+ }
-+ }
-+
-+ /* don't process the rest of the tag bases */
-+ if (error_flag)
-+ break;
-+ }
-+
-+ /* skip to the next tag */
-+ if (error_flag)
-+ continue;
-+
-+ uint8_t* qt = bam_aux_get(bam_line, qual_tag);
-+ if (!qt)
-+ continue;
-+
-+ char* barqual = bam_aux2Z(qt);
-+ if (!barqual)
-+ continue;
-+
-+ uint32_t barqual_len = strlen(barqual);
-+ if (barqual_len == barcode_len) {
-+ for (i = 0; i < barcode_len; i++) {
-+ int32_t qual = (int32_t)barqual[i] - '!'; // Phred + 33
-+ if (qual >= 0 && qual < stats->nquals) {
-+ quals[i * stats->nquals + qual]++;
-+ if (qual > *maxqual)
-+ *maxqual = qual;
-+ }
-+ }
-+ } else {
-+ if (stats->error_number++ < ERROR_LIMIT) {
-+ fprintf(samtools_stderr, "%s length and %s length don't match for sequence '%s'\n", barcode_tag, qual_tag, bam_get_qname(bam_line));
-+ }
-+ }
-+ }
-+}
-+
- // These stats should only be calculated for the original reads ignoring
- // supplementary artificial reads otherwise we'll accidentally double count
- void collect_orig_read_stats(bam1_t *bam_line, stats_t *stats, int* gc_count_out)
-@@ -700,42 +853,48 @@
- if ( bam_line->core.flag & BAM_FQCFAIL ) stats->nreads_QCfailed++;
- if ( bam_line->core.flag & BAM_FPAIRED ) stats->nreads_paired_tech++;
-
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
-+
- // Count GC and ACGT per cycle. Note that cycle is approximate, clipping is ignored
- uint8_t *seq = bam_get_seq(bam_line);
-- int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line), is_first = IS_READ1(bam_line);
-- for (i=0; i<seq_len; i++)
-- {
-- // Read cycle for current index
-- read_cycle = (reverse ? seq_len-i-1 : i);
-+ int i, read_cycle, gc_count = 0, reverse = IS_REVERSE(bam_line);
-
-- // Conversion from uint8_t coding:
-- // -12-4---8------5
-- // =ACMGRSVTWYHKDBN
-- switch (bam_seqi(seq, i)) {
-- case 1:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].a++ : stats->acgtno_cycles_2nd[ read_cycle ].a++;
-- break;
-- case 2:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].c++ : stats->acgtno_cycles_2nd[ read_cycle ].c++;
-- gc_count++;
-- break;
-- case 4:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].g++ : stats->acgtno_cycles_2nd[ read_cycle ].g++;
-- gc_count++;
-- break;
-- case 8:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].t++ : stats->acgtno_cycles_2nd[ read_cycle ].t++;
-- break;
-- case 15:
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].n++ : stats->acgtno_cycles_2nd[ read_cycle ].n++;
-- break;
-- default:
-- /*
-- * count "=" sequences in "other" along
-- * with MRSVWYHKDB ambiguity codes
-- */
-- is_first ? stats->acgtno_cycles_1st[ read_cycle ].other++ : stats->acgtno_cycles_2nd[ read_cycle ].other++;
-- break;
-+ acgtno_count_t *acgtno_cycles = (order == READ_ORDER_FIRST) ? stats->acgtno_cycles_1st : (order == READ_ORDER_LAST) ? stats->acgtno_cycles_2nd : NULL ;
-+ if (acgtno_cycles) {
-+ for (i=0; i<seq_len; i++)
-+ {
-+ // Read cycle for current index
-+ read_cycle = (reverse ? seq_len-i-1 : i);
-+
-+ // Conversion from uint8_t coding:
-+ // -12-4---8------5
-+ // =ACMGRSVTWYHKDBN
-+ switch (bam_seqi(seq, i)) {
-+ case 1:
-+ acgtno_cycles[ read_cycle ].a++;
-+ break;
-+ case 2:
-+ acgtno_cycles[ read_cycle ].c++;
-+ gc_count++;
-+ break;
-+ case 4:
-+ acgtno_cycles[ read_cycle ].g++;
-+ gc_count++;
-+ break;
-+ case 8:
-+ acgtno_cycles[ read_cycle ].t++;
-+ break;
-+ case 15:
-+ acgtno_cycles[ read_cycle ].n++;
-+ break;
-+ default:
-+ /*
-+ * count "=" sequences in "other" along
-+ * with MRSVWYHKDB ambiguity codes
-+ */
-+ acgtno_cycles[ read_cycle ].other++;
-+ break;
-+ }
- }
- }
- int gc_idx_min = gc_count*(stats->ngc-1)/seq_len;
-@@ -745,38 +904,48 @@
- // Determine which array (1st or 2nd read) will these stats go to,
- // trim low quality bases from end the same way BWA does,
- // fill GC histogram
-- uint64_t *quals;
-+ uint64_t *quals = NULL;
- uint8_t *bam_quals = bam_get_qual(bam_line);
-- if ( IS_READ2(bam_line) )
-- {
-- quals = stats->quals_2nd;
-- stats->nreads_2nd++;
-- stats->total_len_2nd += seq_len;
-- for (i=gc_idx_min; i<gc_idx_max; i++)
-- stats->gc_2nd[i]++;
-- }
-- else
-- {
-+
-+ switch (order) {
-+ case READ_ORDER_FIRST:
- quals = stats->quals_1st;
- stats->nreads_1st++;
- stats->total_len_1st += seq_len;
- for (i=gc_idx_min; i<gc_idx_max; i++)
- stats->gc_1st[i]++;
-+ break;
-+ case READ_ORDER_LAST:
-+ quals = stats->quals_2nd;
-+ stats->nreads_2nd++;
-+ stats->total_len_2nd += seq_len;
-+ for (i=gc_idx_min; i<gc_idx_max; i++)
-+ stats->gc_2nd[i]++;
-+ break;
-+ default:
-+ stats->nreads_other++;
- }
- if ( stats->info->trim_qual>0 )
- stats->nbases_trimmed += bwa_trim_read(stats->info->trim_qual, bam_quals, seq_len, reverse);
-
- // Quality histogram and average quality. Clipping is neglected.
-- for (i=0; i<seq_len; i++)
-- {
-- uint8_t qual = bam_quals[ reverse ? seq_len-i-1 : i];
-- if ( qual>=stats->nquals )
-- error("TODO: quality too high %d>=%d (%s %d %s)\n", qual,stats->nquals,stats->info->sam_header->target_name[bam_line->core.tid],bam_line->core.pos+1,bam_get_qname(bam_line));
-- if ( qual>stats->max_qual )
-- stats->max_qual = qual;
-+ if (quals) {
-+ for (i=0; i<seq_len; i++)
-+ {
-+ uint8_t qual = bam_quals[ reverse ? seq_len-i-1 : i];
-+ if ( qual>=stats->nquals )
-+ error("TODO: quality too high %d>=%d (%s %"PRIhts_pos" %s)\n", qual, stats->nquals, sam_hdr_tid2name(stats->info->sam_header, bam_line->core.tid), bam_line->core.pos+1, bam_get_qname(bam_line));
-+ if ( qual>stats->max_qual )
-+ stats->max_qual = qual;
-+
-+ quals[ i*stats->nquals+qual ]++;
-+ stats->sum_qual += qual;
-+ }
-+ }
-
-- quals[ i*stats->nquals+qual ]++;
-- stats->sum_qual += qual;
-+ // Barcode statistics
-+ if (order == READ_ORDER_FIRST) {
-+ collect_barcode_stats(bam_line, stats);
- }
-
- // Look at the flags and increment appropriate counters (mapped, paired, etc)
-@@ -805,7 +974,7 @@
- *gc_count_out = gc_count;
- }
-
--static int cleanup_overlaps(khash_t(qn2pair) *read_pairs, int max) {
-+static int cleanup_overlaps(khash_t(qn2pair) *read_pairs, hts_pos_t max) {
- if ( !read_pairs )
- return 0;
-
-@@ -816,7 +985,7 @@
- char *key = (char *)kh_key(read_pairs, k);
- pair_t *val = kh_val(read_pairs, k);
- if ( val && val->chunks ) {
-- if ( val->chunks[val->n-1].to < max ) {
-+ if ( val->chunks[val->n-1].end < max ) {
- free(val->chunks);
- free(val);
- free(key);
-@@ -830,29 +999,32 @@
- }
- }
- }
-- if ( max == INT_MAX )
-+ if ( max == INT64_MAX )
- kh_destroy(qn2pair, read_pairs);
-
- return count;
- }
-
--static void remove_overlaps(bam1_t *bam_line, khash_t(qn2pair) *read_pairs, stats_t *stats, int pmin, int pmax) {
-+/**
-+ * [pmin, pmax) - 0 based half-open
-+ */
-+static void remove_overlaps(bam1_t *bam_line, khash_t(qn2pair) *read_pairs, stats_t *stats, hts_pos_t pmin, hts_pos_t pmax) {
- if ( !bam_line || !read_pairs || !stats )
- return;
-
-- uint32_t first = (IS_READ1(bam_line) > 0 ? 1 : 0) + (IS_READ2(bam_line) > 0 ? 2 : 0) ;
-+ uint32_t order = (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0);
- if ( !(bam_line->core.flag & BAM_FPAIRED) ||
- (bam_line->core.flag & BAM_FMUNMAP) ||
-- (abs(bam_line->core.isize) >= 2*bam_line->core.l_qseq) ||
-- (first != 1 && first != 2) ) {
-+ (llabs(bam_line->core.isize) >= 2*bam_line->core.l_qseq) ||
-+ (order != READ_ORDER_FIRST && order != READ_ORDER_LAST) ) {
- if ( pmin >= 0 )
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- return;
- }
-
- char *qname = bam_get_qname(bam_line);
- if ( !qname ) {
-- fprintf(samtools_stderr, "Error retrieving qname for line starting at pos %d\n", bam_line->core.pos);
-+ fprintf(samtools_stderr, "Error retrieving qname for line starting at pos %"PRIhts_pos"\n", bam_line->core.pos);
- return;
- }
-
-@@ -870,8 +1042,7 @@
-
- k = kh_put(qn2pair, read_pairs, s, &ret);
- if ( -1 == ret ) {
-- fprintf(samtools_stderr, "Error inserting read '%s' in pair hash table\n", qname);
-- return;
-+ error("Error inserting read '%s' in pair hash table\n", qname);
- }
-
- pair_t *pc = calloc(1, sizeof(pair_t));
-@@ -881,16 +1052,16 @@
- }
-
- pc->m = DEFAULT_CHUNK_NO;
-- pc->chunks = calloc(pc->m, sizeof(pos_t));
-+ pc->chunks = calloc(pc->m, sizeof(hts_pair_pos_t));
- if ( !pc->chunks ) {
- fprintf(samtools_stderr, "Error allocating memory\n");
- return;
- }
-
-- pc->chunks[0].from = pmin;
-- pc->chunks[0].to = pmax;
-+ pc->chunks[0].beg = pmin;
-+ pc->chunks[0].end = pmax;
- pc->n = 1;
-- pc->first = first;
-+ pc->first = order;
-
- kh_val(read_pairs, k) = pc;
- stats->pair_count++;
-@@ -901,12 +1072,12 @@
- return;
- }
-
-- if ( first == pc->first ) { //chunk from an existing line
-+ if ( order == pc->first ) { //chunk from an existing line
- if ( pmin == -1 )
- return;
-
- if ( pc->n == pc->m ) {
-- pos_t *tmp = realloc(pc->chunks, (pc->m<<1)*sizeof(pos_t));
-+ hts_pair_pos_t *tmp = realloc(pc->chunks, (pc->m<<1)*sizeof(hts_pair_pos_t));
- if ( !tmp ) {
- fprintf(samtools_stderr, "Error allocating memory\n");
- return;
-@@ -915,8 +1086,8 @@
- pc->m<<=1;
- }
-
-- pc->chunks[pc->n].from = pmin;
-- pc->chunks[pc->n].to = pmax;
-+ pc->chunks[pc->n].beg = pmin;
-+ pc->chunks[pc->n].end = pmax;
- pc->n++;
- } else { //the other line, check for overlapping
- if ( pmin == -1 && kh_exist(read_pairs, k) ) { //job done, delete entry
-@@ -934,28 +1105,28 @@
-
- int i;
- for (i=0; i<pc->n; i++) {
-- if ( pmin >= pc->chunks[i].to )
-+ if ( pmin >= pc->chunks[i].end )
- continue;
-
-- if ( pmax <= pc->chunks[i].from ) //no overlap
-+ if ( pmax <= pc->chunks[i].beg ) //no overlap
- break;
-
-- if ( pmin < pc->chunks[i].from ) { //overlap at the beginning
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pc->chunks[i].from-1);
-- pmin = pc->chunks[i].from;
-+ if ( pmin < pc->chunks[i].beg ) { //overlap at the beginning
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pc->chunks[i].beg);
-+ pmin = pc->chunks[i].beg;
- }
-
-- if ( pmax <= pc->chunks[i].to ) { //completely contained
-+ if ( pmax <= pc->chunks[i].end ) { //completely contained
- stats->nbases_mapped_cigar -= (pmax - pmin);
- return;
- } else { //overlap at the end
-- stats->nbases_mapped_cigar -= (pc->chunks[i].to - pmin);
-- pmin = pc->chunks[i].to;
-+ stats->nbases_mapped_cigar -= (pc->chunks[i].end - pmin);
-+ pmin = pc->chunks[i].end;
- }
- }
- }
- }
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- }
-
- void collect_stats(bam1_t *bam_line, stats_t *stats, khash_t(qn2pair) *read_pairs)
-@@ -1000,15 +1171,17 @@
- stats->nreads_dup++;
- }
-
-+ uint32_t order = IS_PAIRED(bam_line) ? (IS_READ1(bam_line) ? READ_ORDER_FIRST : 0) + (IS_READ2(bam_line) ? READ_ORDER_LAST : 0) : READ_ORDER_FIRST;
-+
- int read_len = unclipped_length(bam_line);
- if ( read_len >= stats->nbases )
- realloc_buffers(stats,read_len);
- // Update max_len observed
- if ( stats->max_len<read_len )
- stats->max_len = read_len;
-- if ( IS_READ1(bam_line) && stats->max_len_1st < read_len )
-+ if ( order == READ_ORDER_FIRST && stats->max_len_1st < read_len )
- stats->max_len_1st = read_len;
-- if ( IS_READ2(bam_line) && stats->max_len_2nd < read_len )
-+ if ( order == READ_ORDER_LAST && stats->max_len_2nd < read_len )
- stats->max_len_2nd = read_len;
-
- int i;
-@@ -1019,8 +1192,8 @@
- if ( IS_ORIGINAL(bam_line) )
- {
- stats->read_lengths[read_len]++;
-- if ( IS_READ1(bam_line) ) stats->read_lengths_1st[read_len]++;
-- if ( IS_READ2(bam_line) ) stats->read_lengths_2nd[read_len]++;
-+ if ( order == READ_ORDER_FIRST ) stats->read_lengths_1st[read_len]++;
-+ if ( order == READ_ORDER_LAST ) stats->read_lengths_2nd[read_len]++;
- collect_orig_read_stats(bam_line, stats, &gc_count);
- }
-
-@@ -1041,7 +1214,7 @@
- isize = stats->info->nisize;
- if ( isize>0 || bam_line->core.tid==bam_line->core.mtid )
- {
-- int pos_fst = bam_line->core.mpos - bam_line->core.pos;
-+ hts_pos_t pos_fst = bam_line->core.mpos - bam_line->core.pos;
- int is_fst = IS_READ1(bam_line) ? 1 : -1;
- int is_fwd = IS_REVERSE(bam_line) ? -1 : 1;
- int is_mfwd = IS_MATE_REVERSE(bam_line) ? -1 : 1;
-@@ -1077,7 +1250,7 @@
- if ( stats->regions )
- {
- // Count only on-target bases
-- int iref = bam_line->core.pos + 1;
-+ hts_pos_t iref = bam_line->core.pos + 1;
- for (i=0; i<bam_line->core.n_cigar; i++)
- {
- int cig = bam_cigar_op(bam_get_cigar(bam_line)[i]);
-@@ -1131,7 +1304,7 @@
- }
-
- if ( stats->last_pair_tid != bam_line->core.tid) {
-- stats->pair_count -= cleanup_overlaps(read_pairs, INT_MAX-1);
-+ stats->pair_count -= cleanup_overlaps(read_pairs, INT64_MAX-1);
- stats->last_pair_tid = bam_line->core.tid;
- stats->last_read_flush = 0;
- }
-@@ -1183,8 +1356,9 @@
- // Coverage distribution graph
- round_buffer_flush(stats,bam_line->core.pos);
- if ( stats->regions ) {
-- uint32_t p = bam_line->core.pos, pnew, pmin, pmax, j;
-- pmin = pmax = i = j = 0;
-+ hts_pos_t p = bam_line->core.pos, pnew, pmin = 0, pmax = 0;
-+ uint32_t j = 0;
-+ i = 0;
- while ( j < bam_line->core.n_cigar && i < stats->nchunks ) {
- int op = bam_cigar_op(bam_get_cigar(bam_line)[j]);
- int oplen = bam_cigar_oplen(bam_get_cigar(bam_line)[j]);
-@@ -1192,13 +1366,13 @@
- case BAM_CMATCH:
- case BAM_CEQUAL:
- case BAM_CDIFF:
-- pmin = MAX(p, stats->chunks[i].from-1);
-- pmax = MIN(p+oplen, stats->chunks[i].to);
-- if ( pmax >= pmin ) {
-+ pmin = MAX(p, stats->chunks[i].beg-1); // 0 based
-+ pmax = MIN(p+oplen, stats->chunks[i].end); // 1 based
-+ if ( pmax > pmin ) {
- if ( stats->info->remove_overlaps )
- remove_overlaps(bam_line, read_pairs, stats, pmin, pmax);
- else
-- round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), pmin, pmax);
- }
- break;
- case BAM_CDEL:
-@@ -1206,7 +1380,7 @@
- }
- pnew = p + (bam_cigar_type(op)&2 ? oplen : 0); // consumes reference
-
-- if ( pnew >= stats->chunks[i].to ) {
-+ if ( pnew >= stats->chunks[i].end ) {
- // go to the next chunk
- i++;
- } else {
-@@ -1216,7 +1390,8 @@
- }
- }
- } else {
-- uint32_t p = bam_line->core.pos, j;
-+ hts_pos_t p = bam_line->core.pos;
-+ uint32_t j;
- for (j = 0; j < bam_line->core.n_cigar; j++) {
- int op = bam_cigar_op(bam_get_cigar(bam_line)[j]);
- int oplen = bam_cigar_oplen(bam_get_cigar(bam_line)[j]);
-@@ -1227,7 +1402,7 @@
- if ( stats->info->remove_overlaps )
- remove_overlaps(bam_line, read_pairs, stats, p, p+oplen);
- else
-- round_buffer_insert_read(&(stats->cov_rbuf), p, p+oplen-1);
-+ round_buffer_insert_read(&(stats->cov_rbuf), p, p+oplen);
- break;
- case BAM_CDEL:
- break;
-@@ -1236,7 +1411,7 @@
- }
- }
- if ( stats->info->remove_overlaps )
-- remove_overlaps(bam_line, read_pairs, stats, -1, -1); //remove the line from the hash table
-+ remove_overlaps(bam_line, read_pairs, stats, -1LL, -1LL); //remove the line from the hash table
- }
- }
-
-@@ -1257,7 +1432,7 @@
- float n,d;
- int k;
-
-- n = p*(N+1)/100;
-+ n = (float)p*(N+1)/100;
- k = n;
- if ( k<=0 )
- return gcd[0].depth;
-@@ -1322,9 +1497,9 @@
- fprintf(to, "# CHK, CRC32 of reads which passed filtering followed by addition (32bit overflow)\n");
- fprintf(to, "CHK\t%08x\t%08x\t%08x\n", stats->checksum.names,stats->checksum.reads,stats->checksum.quals);
- fprintf(to, "# Summary Numbers. Use `grep ^SN | cut -f 2-` to extract this part.\n");
-- fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd)); // not counting excluded seqs (and none of the below)
-+ fprintf(to, "SN\traw total sequences:\t%ld\n", (long)(stats->nreads_filtered+stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)); // not counting excluded seqs (and none of the below)
- fprintf(to, "SN\tfiltered sequences:\t%ld\n", (long)stats->nreads_filtered);
-- fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd));
-+ fprintf(to, "SN\tsequences:\t%ld\n", (long)(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other));
- fprintf(to, "SN\tis sorted:\t%d\n", stats->is_sorted ? 1 : 0);
- fprintf(to, "SN\t1st fragments:\t%ld\n", (long)stats->nreads_1st);
- fprintf(to, "SN\tlast fragments:\t%ld\n", (long)stats->nreads_2nd);
-@@ -1346,7 +1521,7 @@
- fprintf(to, "SN\tbases duplicated:\t%ld\n", (long)stats->total_len_dup);
- fprintf(to, "SN\tmismatches:\t%ld\t# from NM fields\n", (long)stats->nmismatches);
- fprintf(to, "SN\terror rate:\t%e\t# mismatches / bases mapped (cigar)\n", stats->nbases_mapped_cigar ? (float)stats->nmismatches/stats->nbases_mapped_cigar : 0);
-- float avg_read_length = (stats->nreads_1st+stats->nreads_2nd)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd):0;
-+ float avg_read_length = (stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)?stats->total_len/(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other):0;
- fprintf(to, "SN\taverage length:\t%.0f\n", avg_read_length);
- fprintf(to, "SN\taverage first fragment length:\t%.0f\n", stats->nreads_1st? (float)stats->total_len_1st/stats->nreads_1st:0);
- fprintf(to, "SN\taverage last fragment length:\t%.0f\n", stats->nreads_2nd? (float)stats->total_len_2nd/stats->nreads_2nd:0);
-@@ -1360,7 +1535,7 @@
- fprintf(to, "SN\toutward oriented pairs:\t%ld\n", (long)nisize_outward);
- fprintf(to, "SN\tpairs with other orientation:\t%ld\n", (long)nisize_other);
- fprintf(to, "SN\tpairs on different chromosomes:\t%ld\n", (long)stats->nreads_anomalous/2);
-- fprintf(to, "SN\tpercentage of properly paired reads (%%):\t%.1f\n", (stats->nreads_1st+stats->nreads_2nd)? (float)(100*stats->nreads_properly_paired)/(stats->nreads_1st+stats->nreads_2nd):0);
-+ fprintf(to, "SN\tpercentage of properly paired reads (%%):\t%.1f\n", (stats->nreads_1st+stats->nreads_2nd+stats->nreads_other)? (float)(100*stats->nreads_properly_paired)/(stats->nreads_1st+stats->nreads_2nd+stats->nreads_other):0);
- if ( stats->target_count ) {
- fprintf(to, "SN\tbases inside the target:\t%u\n", stats->target_count);
- for (icov=stats->info->cov_threshold+1; icov<stats->ncov; icov++)
-@@ -1441,11 +1616,18 @@
- 100.*(acgtno_count_1st->other + acgtno_count_2nd->other)/acgt_sum);
-
- }
-+
-+ uint64_t tA=0, tC=0, tG=0, tT=0, tN=0;
- fprintf(to, "# ACGT content per cycle for first fragments. Use `grep ^FBC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n");
- for (ibase=0; ibase<stats->max_len; ibase++)
- {
- acgtno_count_t *acgtno_count_1st = &(stats->acgtno_cycles_1st[ibase]);
- uint64_t acgt_sum_1st = acgtno_count_1st->a + acgtno_count_1st->c + acgtno_count_1st->g + acgtno_count_1st->t;
-+ tA += acgtno_count_1st->a;
-+ tC += acgtno_count_1st->c;
-+ tG += acgtno_count_1st->g;
-+ tT += acgtno_count_1st->t;
-+ tN += acgtno_count_1st->n;
-
- if ( acgt_sum_1st )
- fprintf(to, "FBC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1,
-@@ -1457,11 +1639,19 @@
- 100.*acgtno_count_1st->other/acgt_sum_1st);
-
- }
-+ fprintf(to, "# ACGT raw counters for first fragments. Use `grep ^FTC | cut -f 2-` to extract this part. The columns are: A,C,G,T,N base counters\n");
-+ fprintf(to, "FTC\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\n", tA, tC, tG, tT, tN);
-+ tA=0, tC=0, tG=0, tT=0, tN=0;
- fprintf(to, "# ACGT content per cycle for last fragments. Use `grep ^LBC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N and O counts as a percentage of all A/C/G/T bases [%%]\n");
- for (ibase=0; ibase<stats->max_len; ibase++)
- {
- acgtno_count_t *acgtno_count_2nd = &(stats->acgtno_cycles_2nd[ibase]);
- uint64_t acgt_sum_2nd = acgtno_count_2nd->a + acgtno_count_2nd->c + acgtno_count_2nd->g + acgtno_count_2nd->t;
-+ tA += acgtno_count_2nd->a;
-+ tC += acgtno_count_2nd->c;
-+ tG += acgtno_count_2nd->g;
-+ tT += acgtno_count_2nd->t;
-+ tN += acgtno_count_2nd->n;
-
- if ( acgt_sum_2nd )
- fprintf(to, "LBC\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", ibase+1,
-@@ -1473,6 +1663,52 @@
- 100.*acgtno_count_2nd->other/acgt_sum_2nd);
-
- }
-+ fprintf(to, "# ACGT raw counters for last fragments. Use `grep ^LTC | cut -f 2-` to extract this part. The columns are: A,C,G,T,N base counters\n");
-+ fprintf(to, "LTC\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\t%" PRId64 "\n", tA, tC, tG, tT, tN);
-+
-+ int tag;
-+ for (tag=0; tag<stats->ntags; tag++) {
-+ if (stats->tags_barcode[tag].nbases) {
-+ fprintf(to, "# ACGT content per cycle for barcodes. Use `grep ^%sC | cut -f 2-` to extract this part. The columns are: cycle; A,C,G,T base counts as a percentage of all A/C/G/T bases [%%]; and N counts as a percentage of all A/C/G/T bases [%%]\n",
-+ stats->tags_barcode[tag].tag_name);
-+ for (ibase=0; ibase<stats->tags_barcode[tag].nbases; ibase++)
-+ {
-+ if (ibase == stats->tags_barcode[tag].tag_sep)
-+ continue;
-+
-+ acgtno_count_t *acgtno_count = stats->acgtno_barcode + stats->tags_barcode[tag].offset + ibase;
-+ uint64_t acgt_sum = acgtno_count->a + acgtno_count->c + acgtno_count->g + acgtno_count->t;
-+
-+ if ( acgt_sum )
-+ fprintf(to, "%sC%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stats->tags_barcode[tag].tag_name,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? 1 : 2,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? ibase+1 : ibase-stats->tags_barcode[tag].tag_sep,
-+ 100.*acgtno_count->a/acgt_sum,
-+ 100.*acgtno_count->c/acgt_sum,
-+ 100.*acgtno_count->g/acgt_sum,
-+ 100.*acgtno_count->t/acgt_sum,
-+ 100.*acgtno_count->n/acgt_sum);
-+ }
-+
-+ fprintf(to, "# Barcode Qualities. Use `grep ^%sQ | cut -f 2-` to extract this part.\n", stats->tags_barcode[tag].qual_name);
-+ fprintf(to, "# Columns correspond to qualities and rows to barcode cycles. First column is the cycle number.\n");
-+ for (ibase=0; ibase<stats->tags_barcode[tag].nbases; ibase++)
-+ {
-+ if (ibase == stats->tags_barcode[tag].tag_sep)
-+ continue;
-+
-+ fprintf(to, "%sQ%d\t%d", stats->tags_barcode[tag].qual_name,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? 1 : 2,
-+ stats->tags_barcode[tag].tag_sep < 0 || ibase < stats->tags_barcode[tag].tag_sep ? ibase+1 : ibase-stats->tags_barcode[tag].tag_sep);
-+ for (iqual=0; iqual<=stats->tags_barcode[tag].max_qual; iqual++)
-+ {
-+ fprintf(to, "\t%ld", (long)stats->quals_barcode[(stats->tags_barcode[tag].offset + ibase)*stats->nquals+iqual]);
-+ }
-+ fprintf(to, "\n");
-+ }
-+ }
-+ }
-+
- fprintf(to, "# Insert sizes. Use `grep ^IS | cut -f 2-` to extract this part. The columns are: insert size, pairs total, inward oriented pairs, outward oriented pairs, other pairs\n");
- for (isize=0; isize<ibulk; isize++) {
- long in = (long)(stats->isize->inward(stats->isize->data, isize));
-@@ -1566,14 +1802,15 @@
- }
- }
-
--void init_regions(stats_t *stats, const char *file)
-+static void init_regions(stats_t *stats, const char *file)
- {
- FILE *fp = fopen(file,"r");
- if ( !fp ) error("%s: %s\n",file,strerror(errno));
-
- kstring_t line = { 0, 0, NULL };
- int warned = 0, r, p, new_p;
-- int prev_tid=-1, prev_pos=-1;
-+ int prev_tid=-1;
-+ hts_pos_t prev_pos=-1LL;
- while (line.l = 0, kgetline(&line, (kgets_func *)fgets, fp) >= 0)
- {
- if ( line.s[0] == '#' ) continue;
-@@ -1594,30 +1831,33 @@
-
- if ( tid >= stats->nregions )
- {
-- stats->regions = realloc(stats->regions,sizeof(regions_t)*(stats->nregions+100));
-+ if(!(stats->regions = realloc(stats->regions,sizeof(regions_t)*(tid+REG_INC))))
-+ error("Could not allocate memory for region.\n");
-+
- int j;
-- for (j=stats->nregions; j<stats->nregions+100; j++)
-+ for (j=stats->nregions; j<tid+REG_INC; j++)
- {
- stats->regions[j].npos = stats->regions[j].mpos = stats->regions[j].cpos = 0;
- stats->regions[j].pos = NULL;
- }
-- stats->nregions += 100;
-+ stats->nregions = tid+REG_INC;
- }
- int npos = stats->regions[tid].npos;
- if ( npos >= stats->regions[tid].mpos )
- {
-- stats->regions[tid].mpos += 1000;
-- stats->regions[tid].pos = realloc(stats->regions[tid].pos,sizeof(pos_t)*stats->regions[tid].mpos);
-+ stats->regions[tid].mpos = npos+POS_INC;
-+ if (!(stats->regions[tid].pos = realloc(stats->regions[tid].pos, sizeof(hts_pair_pos_t)*stats->regions[tid].mpos)))
-+ error("Could not allocate memory for interval.\n");
- }
-
-- if ( (sscanf(&line.s[i+1],"%u %u",&stats->regions[tid].pos[npos].from,&stats->regions[tid].pos[npos].to))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]);
-+ if ( (sscanf(&line.s[i+1],"%"SCNd64" %"SCNd64, &stats->regions[tid].pos[npos].beg, &stats->regions[tid].pos[npos].end))!=2 ) error("Could not parse the region [%s]\n", &line.s[i+1]);
- if ( prev_tid==-1 || prev_tid!=tid )
- {
- prev_tid = tid;
-- prev_pos = stats->regions[tid].pos[npos].from;
-+ prev_pos = stats->regions[tid].pos[npos].beg;
- }
-- if ( prev_pos>stats->regions[tid].pos[npos].from )
-- error("The positions are not in chromosomal order (%s:%d comes after %d)\n", line.s,stats->regions[tid].pos[npos].from,prev_pos);
-+ if ( prev_pos>stats->regions[tid].pos[npos].beg )
-+ error("The positions are not in chromosomal order (%s:%"PRIhts_pos" comes after %"PRIhts_pos")\n", line.s, stats->regions[tid].pos[npos].beg, prev_pos);
- stats->regions[tid].npos++;
- if ( stats->regions[tid].npos > stats->nchunks )
- stats->nchunks = stats->regions[tid].npos;
-@@ -1630,20 +1870,21 @@
- for (r = 0; r < stats->nregions; r++) {
- regions_t *reg = &stats->regions[r];
- if ( reg->npos > 1 ) {
-- qsort(reg->pos, reg->npos, sizeof(pos_t), regions_lt);
-+ qsort(reg->pos, reg->npos, sizeof(hts_pair_pos_t), regions_lt);
- for (new_p = 0, p = 1; p < reg->npos; p++) {
-- if ( reg->pos[new_p].to < reg->pos[p].from )
-+ if ( reg->pos[new_p].end < reg->pos[p].beg )
- reg->pos[++new_p] = reg->pos[p];
-- else if ( reg->pos[new_p].to < reg->pos[p].to )
-- reg->pos[new_p].to = reg->pos[p].to;
-+ else if ( reg->pos[new_p].end < reg->pos[p].end )
-+ reg->pos[new_p].end = reg->pos[p].end;
- }
- reg->npos = ++new_p;
- }
- for (p = 0; p < reg->npos; p++)
-- stats->target_count += (reg->pos[p].to - reg->pos[p].from + 1);
-+ stats->target_count += (reg->pos[p].end - reg->pos[p].beg + 1);
- }
-
-- stats->chunks = calloc(stats->nchunks, sizeof(pos_t));
-+ if (!(stats->chunks = calloc(stats->nchunks, sizeof(hts_pair_pos_t))))
-+ error("Could not allocate memory for chunk.\n");
- }
-
- void destroy_regions(stats_t *stats)
-@@ -1678,22 +1919,22 @@
- // Find a matching interval or skip this read. No splicing of reads is done, no indels or soft clips considered,
- // even small overlap is enough to include the read in the stats.
- int i = reg->cpos;
-- while ( i<reg->npos && reg->pos[i].to<=bam_line->core.pos ) i++;
-+ while ( i<reg->npos && reg->pos[i].end<=bam_line->core.pos ) i++;
- if ( i>=reg->npos ) { reg->cpos = reg->npos; return 0; }
- int64_t endpos = bam_endpos(bam_line);
-- if ( endpos < reg->pos[i].from ) return 0;
-+ if ( endpos < reg->pos[i].beg ) return 0;
-
- //found a read overlapping a region
- reg->cpos = i;
-- stats->reg_from = reg->pos[i].from;
-- stats->reg_to = reg->pos[i].to;
-+ stats->reg_from = reg->pos[i].beg;
-+ stats->reg_to = reg->pos[i].end;
-
- //now find all the overlapping chunks
- stats->nchunks = 0;
- while (i < reg->npos) {
-- if (bam_line->core.pos < reg->pos[i].to && endpos >= reg->pos[i].from) {
-- stats->chunks[stats->nchunks].from = MAX(bam_line->core.pos+1, reg->pos[i].from);
-- stats->chunks[stats->nchunks].to = MIN(endpos, reg->pos[i].to);
-+ if (bam_line->core.pos < reg->pos[i].end && endpos >= reg->pos[i].beg) {
-+ stats->chunks[stats->nchunks].beg = MAX(bam_line->core.pos+1, reg->pos[i].beg);
-+ stats->chunks[stats->nchunks].end = MIN(endpos, reg->pos[i].end);
- stats->nchunks++;
- }
- i++;
-@@ -1709,7 +1950,7 @@
- int i, j, tid;
- stats->nregions = iter->n_reg;
- stats->regions = calloc(stats->nregions, sizeof(regions_t));
-- stats->chunks = calloc(stats->nchunks, sizeof(pos_t));
-+ stats->chunks = calloc(stats->nchunks, sizeof(hts_pair_pos_t));
- if ( !stats->regions || !stats->chunks )
- return 1;
-
-@@ -1729,15 +1970,15 @@
- }
-
- stats->regions[tid].mpos = stats->regions[tid].npos = iter->reg_list[i].count;
-- stats->regions[tid].pos = calloc(stats->regions[tid].mpos, sizeof(pos_t));
-+ stats->regions[tid].pos = calloc(stats->regions[tid].mpos, sizeof(hts_pair_pos_t));
- if ( !stats->regions[tid].pos )
- return 1;
-
- for (j = 0; j < stats->regions[tid].npos; j++) {
-- stats->regions[tid].pos[j].from = iter->reg_list[i].intervals[j].beg+1;
-- stats->regions[tid].pos[j].to = iter->reg_list[i].intervals[j].end;
-+ stats->regions[tid].pos[j].beg = iter->reg_list[i].intervals[j].beg+1;
-+ stats->regions[tid].pos[j].end = iter->reg_list[i].intervals[j].end;
-
-- stats->target_count += (stats->regions[tid].pos[j].to - stats->regions[tid].pos[j].from + 1);
-+ stats->target_count += (stats->regions[tid].pos[j].end - stats->regions[tid].pos[j].beg + 1);
- }
- }
-
-@@ -1775,7 +2016,7 @@
- }
-
-
--static void error(const char *format, ...)
-+static void HTS_NORETURN error(const char *format, ...)
- {
- if ( !format )
- {
-@@ -1785,13 +2026,14 @@
- fprintf(samtools_stdout, "Options:\n");
- fprintf(samtools_stdout, " -c, --coverage <int>,<int>,<int> Coverage distribution min,max,step [1,1000,1]\n");
- fprintf(samtools_stdout, " -d, --remove-dups Exclude from statistics reads marked as duplicates\n");
-+ fprintf(samtools_stdout, " -X, --customized-index-file Use a customized index file\n");
- fprintf(samtools_stdout, " -f, --required-flag <str|int> Required flag, 0 for unset. See also `samtools flags` [0]\n");
- fprintf(samtools_stdout, " -F, --filtering-flag <str|int> Filtering flag, 0 for unset. See also `samtools flags` [0]\n");
- fprintf(samtools_stdout, " --GC-depth <float> the size of GC-depth bins (decreasing bin size increases memory requirement) [2e4]\n");
- fprintf(samtools_stdout, " -h, --help This help message\n");
- fprintf(samtools_stdout, " -i, --insert-size <int> Maximum insert size [8000]\n");
- fprintf(samtools_stdout, " -I, --id <string> Include only listed read group or sample name\n");
-- fprintf(samtools_stdout, " -l, --read-length <int> Include in the statistics only reads with the given read length []\n");
-+ fprintf(samtools_stdout, " -l, --read-length <int> Include in the statistics only reads with the given read length [-1]\n");
- fprintf(samtools_stdout, " -m, --most-inserts <float> Report only the main part of inserts [0.99]\n");
- fprintf(samtools_stdout, " -P, --split-prefix <str> Path or string prefix for filepaths output by -S (default is input filename)\n");
- fprintf(samtools_stdout, " -q, --trim-quality <int> The BWA trimming parameter [0]\n");
-@@ -1801,8 +2043,8 @@
- fprintf(samtools_stdout, " -t, --target-regions <file> Do stats in these regions only. Tab-delimited file chr,from,to, 1-based, inclusive.\n");
- fprintf(samtools_stdout, " -x, --sparse Suppress outputting IS rows where there are no insertions.\n");
- fprintf(samtools_stdout, " -p, --remove-overlaps Remove overlaps of paired-end reads from coverage and base count computations.\n");
-- fprintf(samtools_stdout, " -g, --cov-threshold Only bases with coverage above this value will be included in the target percentage computation.\n");
-- sam_global_opt_help(samtools_stdout, "-.--.@");
-+ fprintf(samtools_stdout, " -g, --cov-threshold <int> Only bases with coverage above this value will be included in the target percentage computation [0]\n");
-+ sam_global_opt_help(samtools_stdout, "-.--.@-.");
- fprintf(samtools_stdout, "\n");
- }
- else
-@@ -1842,6 +2084,9 @@
- free(stats->ins_cycles_2nd);
- free(stats->del_cycles_1st);
- free(stats->del_cycles_2nd);
-+ if (stats->acgtno_barcode) free(stats->acgtno_barcode);
-+ if (stats->quals_barcode) free(stats->quals_barcode);
-+ free(stats->tags_barcode);
- destroy_regions(stats);
- if ( stats->rg_hash ) khash_str2int_destroy(stats->rg_hash);
- free(stats->split_name);
-@@ -1880,6 +2125,9 @@
-
- void destroy_split_stats(khash_t(c2stats) *split_hash)
- {
-+ if (!split_hash)
-+ return;
-+
- int i = 0;
- stats_t *curr_stats = NULL;
- for(i = kh_begin(split_hash); i != kh_end(split_hash); ++i){
-@@ -1893,6 +2141,10 @@
- stats_info_t* stats_info_init(int argc, char *argv[])
- {
- stats_info_t* info = calloc(1, sizeof(stats_info_t));
-+ if (!info) {
-+ return NULL;
-+ }
-+
- info->nisize = 8000;
- info->isize_main_bulk = 0.99; // There are always outliers at the far end
- info->gcd_bin_size = 20e3;
-@@ -1928,11 +2180,15 @@
- stats_t* stats_init()
- {
- stats_t *stats = calloc(1,sizeof(stats_t));
-+ if (!stats)
-+ return NULL;
-+
- stats->ngc = 200;
- stats->nquals = 256;
- stats->nbases = 300;
- stats->rseq_pos = -1;
-- stats->tid = stats->gcd_pos = -1;
-+ stats->tid = -1;
-+ stats->gcd_pos = -1LL;
- stats->igcd = 0;
- stats->is_sorted = 1;
- stats->nindels = stats->nbases;
-@@ -1946,6 +2202,18 @@
- return stats;
- }
-
-+static int init_barcode_tags(stats_t* stats) {
-+ stats->ntags = 4;
-+ stats->tags_barcode = calloc(stats->ntags, sizeof(barcode_info_t));
-+ if (!stats->tags_barcode)
-+ return -1;
-+ stats->tags_barcode[0] = (barcode_info_t){"BC", "QT", 0, -1, -1, 0};
-+ stats->tags_barcode[1] = (barcode_info_t){"CR", "CY", 0, -1, -1, 0};
-+ stats->tags_barcode[2] = (barcode_info_t){"OX", "BZ", 0, -1, -1, 0};
-+ stats->tags_barcode[3] = (barcode_info_t){"RX", "QX", 0, -1, -1, 0};
-+ return 0;
-+}
-+
- static void init_stat_structs(stats_t* stats, stats_info_t* info, const char* group_id, const char* targets)
- {
- // Give stats_t a pointer to the info struct
-@@ -1963,32 +2231,60 @@
- stats->ncov = 3 + (info->cov_max-info->cov_min) / info->cov_step;
- info->cov_max = info->cov_min + ((info->cov_max-info->cov_min)/info->cov_step +1)*info->cov_step - 1;
- stats->cov = calloc(sizeof(uint64_t),stats->ncov);
-+ if (!stats->cov) goto nomem;
- stats->cov_rbuf.size = stats->nbases*5;
- stats->cov_rbuf.buffer = calloc(sizeof(int32_t),stats->cov_rbuf.size);
--
-+ if (!stats->cov_rbuf.buffer) goto nomem;
- if ( group_id ) init_group_id(stats, group_id);
- // .. arrays
- stats->quals_1st = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->quals_1st) goto nomem;
- stats->quals_2nd = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->quals_2nd) goto nomem;
- stats->gc_1st = calloc(stats->ngc,sizeof(uint64_t));
-+ if (!stats->gc_1st) goto nomem;
- stats->gc_2nd = calloc(stats->ngc,sizeof(uint64_t));
-+ if (!stats->gc_2nd) goto nomem;
- stats->isize = init_isize_t(info->nisize ?info->nisize+1 :0);
-+ if (!stats->isize) goto nomem;
- stats->gcd = calloc(stats->ngcd,sizeof(gc_depth_t));
-- stats->mpc_buf = info->fai ? calloc(stats->nquals*stats->nbases,sizeof(uint64_t)) : NULL;
-+ if (!stats->gcd) goto nomem;
-+ if (info->fai) {
-+ stats->mpc_buf = calloc(stats->nquals*stats->nbases,sizeof(uint64_t));
-+ if (!stats->mpc_buf) goto nomem;
-+ } else {
-+ stats->mpc_buf = NULL;
-+ }
- stats->acgtno_cycles_1st = calloc(stats->nbases,sizeof(acgtno_count_t));
-+ if (!stats->acgtno_cycles_1st) goto nomem;
- stats->acgtno_cycles_2nd = calloc(stats->nbases,sizeof(acgtno_count_t));
-+ if (!stats->acgtno_cycles_2nd) goto nomem;
- stats->read_lengths = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths) goto nomem;
- stats->read_lengths_1st = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths_1st) goto nomem;
- stats->read_lengths_2nd = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->read_lengths_2nd) goto nomem;
- stats->insertions = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->insertions) goto nomem;
- stats->deletions = calloc(stats->nbases,sizeof(uint64_t));
-+ if (!stats->deletions) goto nomem;
- stats->ins_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->ins_cycles_1st) goto nomem;
- stats->ins_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->ins_cycles_2nd) goto nomem;
- stats->del_cycles_1st = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->del_cycles_1st) goto nomem;
- stats->del_cycles_2nd = calloc(stats->nbases+1,sizeof(uint64_t));
-+ if (!stats->del_cycles_2nd) goto nomem;
-+ if (init_barcode_tags(stats) < 0)
-+ goto nomem;
- realloc_rseq_buffer(stats);
- if ( targets )
- init_regions(stats, targets);
-+ return;
-+ nomem:
-+ error("Out of memory");
- }
-
- static stats_t* get_curr_split_stats(bam1_t* bam_line, khash_t(c2stats)* split_hash, stats_info_t* info, char* targets)
-@@ -2004,6 +2300,9 @@
- khiter_t k = kh_get(c2stats, split_hash, split_name);
- if(k == kh_end(split_hash)){
- curr_stats = stats_init(); // mallocs new instance
-+ if (!curr_stats) {
-+ error("Couldn't allocate split stats");
-+ }
- init_stat_structs(curr_stats, info, NULL, targets);
- curr_stats->split_name = split_name;
-
-@@ -2026,11 +2325,16 @@
- {
- char *targets = NULL;
- char *bam_fname = NULL;
-+ char *bam_idx_fname = NULL;
- char *group_id = NULL;
-- int sparse = 0;
-+ int sparse = 0, has_index_file = 0, ret = 1;
- sam_global_args ga = SAM_GLOBAL_ARGS_INIT;
-
- stats_info_t *info = stats_info_init(argc, argv);
-+ if (!info) {
-+ fprintf(samtools_stderr, "Could not allocate memory for info.\n");
-+ return 1;
-+ }
-
- static const struct option loptions[] =
- {
-@@ -2038,6 +2342,7 @@
- {"help", no_argument, NULL, 'h'},
- {"remove-dups", no_argument, NULL, 'd'},
- {"sam", no_argument, NULL, 's'},
-+ {"customized-index-file", required_argument, NULL, 'X'},
- {"ref-seq", required_argument, NULL, 'r'},
- {"coverage", required_argument, NULL, 'c'},
- {"read-length", required_argument, NULL, 'l'},
-@@ -2058,13 +2363,14 @@
- };
- int opt;
-
-- while ( (opt=getopt_long(argc,argv,"?hdsxpr:c:l:i:t:m:q:f:F:g:I:1:S:P:@:",loptions,NULL))>0 )
-+ while ( (opt=getopt_long(argc,argv,"?hdsXxpr:c:l:i:t:m:q:f:F:g:I:S:P:@:",loptions,NULL))>0 )
- {
- switch (opt)
- {
- case 'f': info->flag_require = bam_str2flag(optarg); break;
- case 'F': info->flag_filter |= bam_str2flag(optarg); break;
- case 'd': info->flag_filter |= BAM_FDUP; break;
-+ case 'X': has_index_file = 1; break;
- case 's': break;
- case 'r': info->fai = fai_load(optarg);
- if (info->fai==NULL)
-@@ -2090,15 +2396,15 @@
- break;
- case '?':
- case 'h': error(NULL);
-+ /* no break */
- default:
- if (parse_sam_global_opt(opt, optarg, loptions, &ga) != 0)
- error("Unknown argument: %s\n", optarg);
- break;
- }
- }
-- if ( optind<argc )
-- bam_fname = argv[optind++];
-
-+ bam_fname = argv[optind++];
- if ( !bam_fname )
- {
- if ( isatty(STDIN_FILENO) )
-@@ -2110,82 +2416,91 @@
- free(info);
- return 1;
- }
-+
-+ if (has_index_file && !(bam_idx_fname = argv[optind++])) {
-+ fprintf(samtools_stderr, "No index file provided\n");
-+ free(info);
-+ return 1;
-+ }
-+
- if (ga.nthreads > 0)
- hts_set_threads(info->sam, ga.nthreads);
-
- stats_t *all_stats = stats_init();
-+ if (!all_stats) {
-+ fprintf(samtools_stderr, "Could not allocate memory for stats.\n");
-+ cleanup_stats_info(info);
-+ return 1;
-+ }
- stats_t *curr_stats = NULL;
- init_stat_structs(all_stats, info, group_id, targets);
- // Init
- // .. hash
- khash_t(c2stats)* split_hash = kh_init(c2stats);
-+ if (!split_hash) goto cleanup_all_stats;
-
- khash_t(qn2pair)* read_pairs = kh_init(qn2pair);
-+ if (!read_pairs) goto cleanup_split_hash;
-
- // Collect statistics
- bam1_t *bam_line = bam_init1();
-- if ( optind<argc )
-- {
-- int filter = 1;
-- // Prepare the region hash table for the multi-region iterator
-- void *region_hash = bed_hash_regions(NULL, argv, optind, argc, &filter);
-- if (region_hash) {
--
-- // Collect stats in selected regions only
-- hts_idx_t *bam_idx = sam_index_load(info->sam,bam_fname);
-- if (bam_idx) {
--
-- int regcount = 0;
-- hts_reglist_t *reglist = bed_reglist(region_hash, ALL, ®count);
-- if (reglist) {
--
-- hts_itr_multi_t *iter = sam_itr_regions(bam_idx, info->sam_header, reglist, regcount);
-- if (iter) {
--
-- if (!targets) {
-- all_stats->nchunks = argc-optind;
-- if ( replicate_regions(all_stats, iter) )
-- fprintf(samtools_stderr, "Replications of the regions failed.");
-- }
-+ if (!bam_line) goto cleanup_read_pairs;
-+
-+ if (optind < argc) {
-+ // Region:interval arguments in the command line
-+ hts_idx_t *bam_idx = NULL;
-+ if (has_index_file) {
-+ bam_idx = sam_index_load2(info->sam, bam_fname, bam_idx_fname);
-+ } else {
-+ // If an index filename has not been specified, look alongside the alignment file
-+ bam_idx = sam_index_load(info->sam, bam_fname);
-+ }
-+
-+ if (bam_idx) {
-+ hts_itr_multi_t *iter = sam_itr_regarray(bam_idx, info->sam_header, &argv[optind], argc - optind);
-+ if (iter) {
-+ if (!targets) {
-+ all_stats->nchunks = argc-optind;
-+ if (replicate_regions(all_stats, iter))
-+ fprintf(samtools_stderr, "Replications of the regions failed\n");
-+ }
-
-- if ( all_stats->nregions && all_stats->regions ) {
-- while (sam_itr_multi_next(info->sam, iter, bam_line) >= 0) {
-- if (info->split_tag) {
-- curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-- collect_stats(bam_line, curr_stats, read_pairs);
-- }
-- collect_stats(bam_line, all_stats, read_pairs);
-- }
-+ if ( all_stats->nregions && all_stats->regions ) {
-+ while ((ret = sam_itr_next(info->sam, iter, bam_line)) >= 0) {
-+ if (info->split_tag) {
-+ curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-+ collect_stats(bam_line, curr_stats, read_pairs);
- }
-+ collect_stats(bam_line, all_stats, read_pairs);
-+ }
-
-+ if (ret < -1) {
-+ fprintf(samtools_stderr, "Failure while running the iterator\n");
- hts_itr_multi_destroy(iter);
-- } else {
-- fprintf(samtools_stderr, "Creation of the region iterator failed.");
-- hts_reglist_free(reglist, regcount);
-+ hts_idx_destroy(bam_idx);
-+ goto cleanup;
- }
-- } else {
-- fprintf(samtools_stderr, "Creation of the region list failed.");
- }
--
-- hts_idx_destroy(bam_idx);
-+ hts_itr_multi_destroy(iter);
- } else {
-- fprintf(samtools_stderr, "Random alignment retrieval only works for indexed BAM files.\n");
-+ fprintf(samtools_stderr, "Multi-region iterator could not be created\n");
-+ hts_idx_destroy(bam_idx);
-+ goto cleanup;
- }
--
-- bed_destroy(region_hash);
-+ hts_idx_destroy(bam_idx);
- } else {
-- fprintf(samtools_stderr, "Creation of the region hash table failed.\n");
-+ if (has_index_file)
-+ fprintf(samtools_stderr, "Invalid index file '%s'\n", bam_idx_fname);
-+ fprintf(samtools_stderr, "Random alignment retrieval only works for indexed files\n");
-+ goto cleanup;
- }
-- }
-- else
-- {
-+ } else {
- if ( info->cov_threshold > 0 && !targets ) {
-- fprintf(samtools_stderr, "Coverage percentage calcuation requires a list of target regions\n");
-+ fprintf(samtools_stderr, "Coverage percentage calculation requires a list of target regions\n");
- goto cleanup;
- }
-
- // Stream through the entire BAM ignoring off-target regions if -t is given
-- int ret;
- while ((ret = sam_read1(info->sam, info->sam_header, bam_line)) >= 0) {
- if (info->split_tag) {
- curr_stats = get_curr_split_stats(bam_line, split_hash, info, targets);
-@@ -2196,7 +2511,7 @@
-
- if (ret < -1) {
- fprintf(samtools_stderr, "Failure while decoding file\n");
-- return 1;
-+ goto cleanup;
- }
- }
-
-@@ -2205,15 +2520,19 @@
- if (info->split_tag)
- output_split_stats(split_hash, bam_fname, sparse);
-
-+ ret = 0;
- cleanup:
- bam_destroy1(bam_line);
-- bam_hdr_destroy(info->sam_header);
-+ sam_hdr_destroy(info->sam_header);
- sam_global_args_free(&ga);
-
-+cleanup_read_pairs:
-+ cleanup_overlaps(read_pairs, INT64_MAX);
-+cleanup_split_hash:
-+ destroy_split_stats(split_hash);
-+cleanup_all_stats:
- cleanup_stats(all_stats);
- cleanup_stats_info(info);
-- destroy_split_stats(split_hash);
-- cleanup_overlaps(read_pairs, INT_MAX);
-
-- return 0;
-+ return ret;
- }
---- python-pysam.orig/samtools/stats_isize.c
-+++ python-pysam/samtools/stats_isize.c
-@@ -1,6 +1,6 @@
- /* stats_isize.c -- generalised insert size calculation for samtools stats.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014, 2018 Genome Research Ltd.
-
- Author: Nicholas Clarke <nc6@sanger.ac.uk>
-
-@@ -162,12 +162,23 @@
- if (bound <= 0) {
- // Use sparse data structure.
- isize_sparse_data_t *data = (isize_sparse_data_t *) malloc(sizeof(isize_sparse_data_t));
-+ if (!data)
-+ return NULL;
-
- // Initialise
- data->max = 0;
- data->array = kh_init(m32);
-+ if (!data->array) {
-+ free(data);
-+ return NULL;
-+ }
-
- isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
-+ if (!isize) {
-+ kh_destroy(m32, data->array);
-+ free(data);
-+ return NULL;
-+ }
-
- isize->data.sparse = data;
- isize->nitems = & sparse_nitems;
-@@ -192,13 +203,20 @@
- uint64_t* out = calloc(bound,sizeof(uint64_t));
- uint64_t* other = calloc(bound,sizeof(uint64_t));
- isize_dense_data_t *rec = (isize_dense_data_t *)malloc(sizeof(isize_dense_data_t));
-+ isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
-+ if (!in || !out || !other || !rec || !isize) {
-+ free(in);
-+ free(out);
-+ free(other);
-+ free(rec);
-+ free(isize);
-+ return NULL;
-+ }
- rec->isize_inward = in;
- rec->isize_outward = out;
- rec->isize_other = other;
- rec->total=bound;
-
-- isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
--
- isize->data.dense = rec;
- isize->nitems = & dense_nitems;
-
---- python-pysam.orig/samtools/stats_isize.c.pysam.c
-+++ python-pysam/samtools/stats_isize.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* stats_isize.c -- generalised insert size calculation for samtools stats.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014, 2018 Genome Research Ltd.
-
- Author: Nicholas Clarke <nc6@sanger.ac.uk>
-
-@@ -164,12 +164,23 @@
- if (bound <= 0) {
- // Use sparse data structure.
- isize_sparse_data_t *data = (isize_sparse_data_t *) malloc(sizeof(isize_sparse_data_t));
-+ if (!data)
-+ return NULL;
-
- // Initialise
- data->max = 0;
- data->array = kh_init(m32);
-+ if (!data->array) {
-+ free(data);
-+ return NULL;
-+ }
-
- isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
-+ if (!isize) {
-+ kh_destroy(m32, data->array);
-+ free(data);
-+ return NULL;
-+ }
-
- isize->data.sparse = data;
- isize->nitems = & sparse_nitems;
-@@ -194,13 +205,20 @@
- uint64_t* out = calloc(bound,sizeof(uint64_t));
- uint64_t* other = calloc(bound,sizeof(uint64_t));
- isize_dense_data_t *rec = (isize_dense_data_t *)malloc(sizeof(isize_dense_data_t));
-+ isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
-+ if (!in || !out || !other || !rec || !isize) {
-+ free(in);
-+ free(out);
-+ free(other);
-+ free(rec);
-+ free(isize);
-+ return NULL;
-+ }
- rec->isize_inward = in;
- rec->isize_outward = out;
- rec->isize_other = other;
- rec->total=bound;
-
-- isize_t *isize = (isize_t *)malloc(sizeof(isize_t));
--
- isize->data.dense = rec;
- isize->nitems = & dense_nitems;
-
---- python-pysam.orig/samtools/test/merge/test_bam_translate.c
-+++ python-pysam/samtools/test/merge/test_bam_translate.c
-@@ -31,10 +31,11 @@
- #include <string.h>
- #include <errno.h>
- #include <unistd.h>
-+#include <inttypes.h>
-
- void dump_read(bam1_t* b) {
- printf("->core.tid:(%d)\n", b->core.tid);
-- printf("->core.pos:(%d)\n", b->core.pos);
-+ printf("->core.pos:(%"PRId64")\n", (int64_t) b->core.pos);
- printf("->core.bin:(%d)\n", b->core.bin);
- printf("->core.qual:(%d)\n", b->core.qual);
- printf("->core.l_qname:(%d)\n", b->core.l_qname);
-@@ -42,8 +43,8 @@
- printf("->core.n_cigar:(%d)\n", b->core.n_cigar);
- printf("->core.l_qseq:(%d)\n", b->core.l_qseq);
- printf("->core.mtid:(%d)\n", b->core.mtid);
-- printf("->core.mpos:(%d)\n", b->core.mpos);
-- printf("->core.isize:(%d)\n", b->core.isize);
-+ printf("->core.mpos:(%"PRId64")\n", (int64_t) b->core.mpos);
-+ printf("->core.isize:(%"PRId64")\n", (int64_t) b->core.isize);
- if (b->data) {
- printf("->data:");
- int i;
-@@ -146,7 +147,7 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->rg_trans, iter) = strdup("goodbye");
-+ kh_value(tbl->rg_trans, iter) = "goodbye";
-
- b->core.tid = 0;
- b->core.pos = 1334;
-@@ -186,7 +187,7 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter = kh_put(c2c, tbl->pg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->pg_trans,iter) = strdup("goodbye");
-+ kh_value(tbl->pg_trans,iter) = "goodbye";
-
-
- b->core.tid = 0;
-@@ -302,9 +303,9 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter_rg = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->rg_trans, iter_rg) = strdup("goodbye");
-+ kh_value(tbl->rg_trans, iter_rg) = "goodbye";
- khiter_t iter_pg = kh_put(c2c, tbl->pg_trans, strdup("quail"), &in_there);
-- kh_value(tbl->pg_trans, iter_pg) = strdup("bird");
-+ kh_value(tbl->pg_trans, iter_pg) = "bird";
-
-
- b->core.tid = 0;
---- python-pysam.orig/samtools/test/merge/test_bam_translate.c.pysam.c
-+++ python-pysam/samtools/test/merge/test_bam_translate.c.pysam.c
-@@ -33,10 +33,11 @@
- #include <string.h>
- #include <errno.h>
- #include <unistd.h>
-+#include <inttypes.h>
-
- void dump_read(bam1_t* b) {
- fprintf(samtools_stdout, "->core.tid:(%d)\n", b->core.tid);
-- fprintf(samtools_stdout, "->core.pos:(%d)\n", b->core.pos);
-+ fprintf(samtools_stdout, "->core.pos:(%"PRId64")\n", (int64_t) b->core.pos);
- fprintf(samtools_stdout, "->core.bin:(%d)\n", b->core.bin);
- fprintf(samtools_stdout, "->core.qual:(%d)\n", b->core.qual);
- fprintf(samtools_stdout, "->core.l_qname:(%d)\n", b->core.l_qname);
-@@ -44,8 +45,8 @@
- fprintf(samtools_stdout, "->core.n_cigar:(%d)\n", b->core.n_cigar);
- fprintf(samtools_stdout, "->core.l_qseq:(%d)\n", b->core.l_qseq);
- fprintf(samtools_stdout, "->core.mtid:(%d)\n", b->core.mtid);
-- fprintf(samtools_stdout, "->core.mpos:(%d)\n", b->core.mpos);
-- fprintf(samtools_stdout, "->core.isize:(%d)\n", b->core.isize);
-+ fprintf(samtools_stdout, "->core.mpos:(%"PRId64")\n", (int64_t) b->core.mpos);
-+ fprintf(samtools_stdout, "->core.isize:(%"PRId64")\n", (int64_t) b->core.isize);
- if (b->data) {
- fprintf(samtools_stdout, "->data:");
- int i;
-@@ -148,7 +149,7 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->rg_trans, iter) = strdup("goodbye");
-+ kh_value(tbl->rg_trans, iter) = "goodbye";
-
- b->core.tid = 0;
- b->core.pos = 1334;
-@@ -188,7 +189,7 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter = kh_put(c2c, tbl->pg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->pg_trans,iter) = strdup("goodbye");
-+ kh_value(tbl->pg_trans,iter) = "goodbye";
-
-
- b->core.tid = 0;
-@@ -304,9 +305,9 @@
- tbl->tid_trans[3] = 8;
- int in_there = 0;
- khiter_t iter_rg = kh_put(c2c, tbl->rg_trans, strdup("hello"), &in_there);
-- kh_value(tbl->rg_trans, iter_rg) = strdup("goodbye");
-+ kh_value(tbl->rg_trans, iter_rg) = "goodbye";
- khiter_t iter_pg = kh_put(c2c, tbl->pg_trans, strdup("quail"), &in_there);
-- kh_value(tbl->pg_trans, iter_pg) = strdup("bird");
-+ kh_value(tbl->pg_trans, iter_pg) = "bird";
-
-
- b->core.tid = 0;
---- python-pysam.orig/samtools/test/merge/test_trans_tbl_init.c
-+++ python-pysam/samtools/test/merge/test_trans_tbl_init.c
-@@ -1,6 +1,6 @@
- /* test/merge/test_trans_tbl_init.c -- merge test harness.
-
-- Copyright (C) 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2013-2016, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -27,18 +27,19 @@
- #include "../../bam_sort.c"
- #include <assert.h>
- #include <regex.h>
-+#include <inttypes.h>
-
- typedef struct refseq_info {
- const char *name;
- uint32_t len;
- } refseq_info_t;
-
--void dump_header(bam_hdr_t* hdr) {
-- printf("->n_targets:(%d)\n", hdr->n_targets);
-+void dump_header(sam_hdr_t* hdr) {
-+ printf("->n_targets:(%d)\n", sam_hdr_nref(hdr));
- int i;
-- for (i = 0; i < hdr->n_targets; ++i) {
-- printf("->target_name[%d]:(%s)\n",i,hdr->target_name[i]);
-- printf("->target_len[%d]:(%d)\n",i,hdr->target_len[i]);
-+ for (i = 0; i < sam_hdr_nref(hdr); ++i) {
-+ printf("->target_name[%d]:(%s)\n", i, sam_hdr_tid2name(hdr, i));
-+ printf("->target_len[%d]:(%"PRId64")\n", i, (int64_t) sam_hdr_tid2len(hdr, i));
- }
-
- printf("->text:(");
-@@ -46,7 +47,7 @@
- printf(")\n");
- }
-
--static int populate_merged_header(bam_hdr_t *hdr, merged_header_t *merged_hdr) {
-+static int populate_merged_header(sam_hdr_t *hdr, merged_header_t *merged_hdr) {
- trans_tbl_t dummy;
- int res;
- res = trans_tbl_init(merged_hdr, hdr, &dummy, 0, 0, 1, NULL);
-@@ -56,55 +57,35 @@
-
- /*
- * Populate merged_hdr with data from bam0_header_text and bam0_refseqs.
-- * Return bam_hdr_t based on the content in bam1_header_text and bam1_refseqs.
-+ * Return sam_hdr_t based on the content in bam1_header_text and bam1_refseqs.
- */
-
--bam_hdr_t * setup_test(const char *bam0_header_text,
-+sam_hdr_t * setup_test(const char *bam0_header_text,
- const refseq_info_t *bam0_refseqs,
- int32_t bam0_n_refseqs,
- const char *bam1_header_text,
- const refseq_info_t *bam1_refseqs,
- int32_t bam1_n_refseqs,
- merged_header_t *merged_hdr) {
-- bam_hdr_t* bam0 = NULL;
-- bam_hdr_t* bam1 = NULL;
-- int32_t i;
--
-- bam0 = bam_hdr_init();
-- bam0->text = strdup(bam0_header_text);
-- if (!bam0->text) goto fail;
-- bam0->l_text = strlen(bam0_header_text);
-- bam0->n_targets = 1;
-- bam0->target_name = (char**)calloc(bam0_n_refseqs, sizeof(char*));
-- bam0->target_len = (uint32_t*)calloc(bam0_n_refseqs, sizeof(uint32_t));
-- for (i = 0; i < bam0_n_refseqs; i++) {
-- bam0->target_name[i] = strdup(bam0_refseqs[i].name);
-- if (!bam0->target_name[i]) goto fail;
-- bam0->target_len[i] = bam0_refseqs[i].len;
-- }
-+ sam_hdr_t* bam0 = NULL;
-+ sam_hdr_t* bam1 = NULL;
-+
-+ bam0 = sam_hdr_init();
-+ if (!bam0 || -1 == sam_hdr_add_lines(bam0, bam0_header_text, strlen(bam0_header_text)))
-+ goto fail;
-
- if (populate_merged_header(bam0, merged_hdr)) goto fail;
-
-- bam1 = bam_hdr_init();
-- if (!bam1) goto fail;
-- bam1->text = strdup(bam1_header_text);
-- if (!bam1->text) goto fail;
-- bam1->l_text = strlen(bam1_header_text);
-- bam1->n_targets = bam1_n_refseqs;
-- bam1->target_name = (char**)calloc(bam1_n_refseqs, sizeof(char*));
-- bam1->target_len = (uint32_t*)calloc(bam1_n_refseqs, sizeof(uint32_t));
-- for (i = 0; i < bam1_n_refseqs; i++) {
-- bam1->target_name[i] = strdup(bam1_refseqs[i].name);
-- if (!bam1->target_name[i]) goto fail;
-- bam1->target_len[i] = bam1_refseqs[i].len;
-- }
-+ bam1 = sam_hdr_init();
-+ if (!bam1 || -1 == sam_hdr_add_lines(bam1, bam1_header_text, strlen(bam1_header_text)))
-+ goto fail;
-
-- bam_hdr_destroy(bam0);
-+ sam_hdr_destroy(bam0);
- return bam1;
-
- fail:
-- bam_hdr_destroy(bam1);
-- bam_hdr_destroy(bam0);
-+ sam_hdr_destroy(bam1);
-+ sam_hdr_destroy(bam0);
- return NULL;
- }
-
-@@ -126,18 +107,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_1(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_1(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_1_trans_text, test_1_refs, NELE(test_1_refs),
- merged_hdr);
- }
-
--bool check_test_1(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_1(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_1_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen( test_1_trans_text)
-- || translate->n_targets != 1
-+ strncmp(test_1_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen( test_1_trans_text)
-+ || sam_hdr_nref(translate) != 1
- ) return false;
-
- // Check output header
-@@ -148,7 +129,7 @@
- regex_t check_regex;
- regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB);
-
-- if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 1 ) return false;
-+ if ( regexec(&check_regex, sam_hdr_str(out), 0, NULL, 0) != 0 || sam_hdr_nref(out) != 1 ) return false;
-
- regfree(&check_regex);
-
-@@ -161,25 +142,24 @@
- static const char test_2_trans_text[] =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:donkey\tLN:133\n"
--"@SQ\tSN:fish\tLN:133";
-+"@SQ\tSN:fish\tLN:133\n";
-
- static const refseq_info_t test_2_refs[2] = {
- { "donkey", 133 },
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_2(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_2(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_2_trans_text, test_2_refs, NELE(test_2_refs),
- merged_hdr);
- }
-
--bool check_test_2(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_2(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
-- if (
-- strncmp(test_2_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_2_trans_text)
-- || translate->n_targets != 2
-+ if (sam_hdr_length(translate) != strlen(test_2_trans_text)
-+ || strncmp(test_2_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_nref(translate) != 2
- ) return false;
-
- // Check output header
-@@ -191,7 +171,7 @@
- regex_t check_regex;
- regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB);
-
-- if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 2 ) return false;
-+ if ( regexec(&check_regex, sam_hdr_str(out), 0, NULL, 0) != 0 || sam_hdr_nref(out) != 2 ) return false;
-
- regfree(&check_regex);
-
-@@ -212,18 +192,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_3(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_3(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_3_trans_text, test_3_refs, NELE(test_3_refs),
- merged_hdr);
- }
-
--bool check_test_3(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_3(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_3_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_3_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_3_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_3_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -239,7 +219,7 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_4(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_4(merged_header_t *merged_hdr) {
- const char* t4_init_text =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:fish\tLN:133\tSP:frog\n"
-@@ -250,12 +230,12 @@
- merged_hdr);
- }
-
--bool check_test_4(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_4(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_4_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_4_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_4_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_4_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -273,7 +253,7 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_5(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_5(merged_header_t *merged_hdr) {
- const char* t5_init_text =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:fish\tLN:133\tSP:frog\n"
-@@ -286,12 +266,12 @@
- merged_hdr);
- }
-
--bool check_test_5(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_5(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_5_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_5_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_5_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_5_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -309,18 +289,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_6(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_6(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_6_trans_text, test_6_refs, NELE(test_6_refs),
- merged_hdr);
- }
-
--bool check_test_6(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_6(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_6_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_5_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_6_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_5_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -346,8 +326,8 @@
- const long GIMMICK_SEED = 0x1234330e;
- srand48(GIMMICK_SEED);
-
-- bam_hdr_t* out;
-- bam_hdr_t* translate;
-+ sam_hdr_t* out;
-+ sam_hdr_t* translate;
-
- if (verbose) printf("BEGIN test 1\n");
- // setup
-@@ -362,7 +342,8 @@
- }
- if (verbose) printf("RUN test 1\n");
- trans_tbl_init(merged_hdr, translate, &tbl_1, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 1\n");
- if (verbose > 1) {
-@@ -380,8 +361,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_1);
- if (verbose) printf("END test 1\n");
-
-@@ -399,7 +380,8 @@
- }
- if (verbose) printf("RUN test 2\n");
- trans_tbl_init(merged_hdr, translate, &tbl_2, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 2\n");
- if (verbose > 1) {
-@@ -417,8 +399,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_2);
- if (verbose) printf("END test 2\n");
-
-@@ -435,7 +417,8 @@
- }
- if (verbose) printf("RUN test 3\n");
- trans_tbl_init(merged_hdr, translate, &tbl_3, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 3\n");
- if (verbose > 1) {
-@@ -453,8 +436,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_3);
- if (verbose) printf("END test 3\n");
-
-@@ -471,7 +454,8 @@
- }
- if (verbose) printf("RUN test 4\n");
- trans_tbl_init(merged_hdr, translate, &tbl_4, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 4\n");
- if (verbose > 1) {
-@@ -489,8 +473,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_4);
- if (verbose) printf("END test 4\n");
-
-@@ -508,7 +492,8 @@
- }
- if (verbose) printf("RUN test 5\n");
- trans_tbl_init(merged_hdr, translate, &tbl_5, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 5\n");
- if (verbose > 1) {
-@@ -526,8 +511,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_5);
- if (verbose) printf("END test 5\n");
-
-@@ -544,7 +529,8 @@
- }
- if (verbose) printf("RUN test 6\n");
- trans_tbl_init(merged_hdr, translate, &tbl_6, false, false, true, "filename");
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) printf("END RUN test 6\n");
- if (verbose > 1) {
-@@ -562,8 +548,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_6);
- if (verbose) printf("END test 6\n");
-
---- python-pysam.orig/samtools/test/merge/test_trans_tbl_init.c.pysam.c
-+++ python-pysam/samtools/test/merge/test_trans_tbl_init.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* test/merge/test_trans_tbl_init.c -- merge test harness.
-
-- Copyright (C) 2013, 2014 Genome Research Ltd.
-+ Copyright (C) 2013-2016, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -29,18 +29,19 @@
- #include "../../bam_sort.c"
- #include <assert.h>
- #include <regex.h>
-+#include <inttypes.h>
-
- typedef struct refseq_info {
- const char *name;
- uint32_t len;
- } refseq_info_t;
-
--void dump_header(bam_hdr_t* hdr) {
-- fprintf(samtools_stdout, "->n_targets:(%d)\n", hdr->n_targets);
-+void dump_header(sam_hdr_t* hdr) {
-+ fprintf(samtools_stdout, "->n_targets:(%d)\n", sam_hdr_nref(hdr));
- int i;
-- for (i = 0; i < hdr->n_targets; ++i) {
-- fprintf(samtools_stdout, "->target_name[%d]:(%s)\n",i,hdr->target_name[i]);
-- fprintf(samtools_stdout, "->target_len[%d]:(%d)\n",i,hdr->target_len[i]);
-+ for (i = 0; i < sam_hdr_nref(hdr); ++i) {
-+ fprintf(samtools_stdout, "->target_name[%d]:(%s)\n", i, sam_hdr_tid2name(hdr, i));
-+ fprintf(samtools_stdout, "->target_len[%d]:(%"PRId64")\n", i, (int64_t) sam_hdr_tid2len(hdr, i));
- }
-
- fprintf(samtools_stdout, "->text:(");
-@@ -48,7 +49,7 @@
- fprintf(samtools_stdout, ")\n");
- }
-
--static int populate_merged_header(bam_hdr_t *hdr, merged_header_t *merged_hdr) {
-+static int populate_merged_header(sam_hdr_t *hdr, merged_header_t *merged_hdr) {
- trans_tbl_t dummy;
- int res;
- res = trans_tbl_init(merged_hdr, hdr, &dummy, 0, 0, 1, NULL);
-@@ -58,55 +59,35 @@
-
- /*
- * Populate merged_hdr with data from bam0_header_text and bam0_refseqs.
-- * Return bam_hdr_t based on the content in bam1_header_text and bam1_refseqs.
-+ * Return sam_hdr_t based on the content in bam1_header_text and bam1_refseqs.
- */
-
--bam_hdr_t * setup_test(const char *bam0_header_text,
-+sam_hdr_t * setup_test(const char *bam0_header_text,
- const refseq_info_t *bam0_refseqs,
- int32_t bam0_n_refseqs,
- const char *bam1_header_text,
- const refseq_info_t *bam1_refseqs,
- int32_t bam1_n_refseqs,
- merged_header_t *merged_hdr) {
-- bam_hdr_t* bam0 = NULL;
-- bam_hdr_t* bam1 = NULL;
-- int32_t i;
--
-- bam0 = bam_hdr_init();
-- bam0->text = strdup(bam0_header_text);
-- if (!bam0->text) goto fail;
-- bam0->l_text = strlen(bam0_header_text);
-- bam0->n_targets = 1;
-- bam0->target_name = (char**)calloc(bam0_n_refseqs, sizeof(char*));
-- bam0->target_len = (uint32_t*)calloc(bam0_n_refseqs, sizeof(uint32_t));
-- for (i = 0; i < bam0_n_refseqs; i++) {
-- bam0->target_name[i] = strdup(bam0_refseqs[i].name);
-- if (!bam0->target_name[i]) goto fail;
-- bam0->target_len[i] = bam0_refseqs[i].len;
-- }
-+ sam_hdr_t* bam0 = NULL;
-+ sam_hdr_t* bam1 = NULL;
-+
-+ bam0 = sam_hdr_init();
-+ if (!bam0 || -1 == sam_hdr_add_lines(bam0, bam0_header_text, strlen(bam0_header_text)))
-+ goto fail;
-
- if (populate_merged_header(bam0, merged_hdr)) goto fail;
-
-- bam1 = bam_hdr_init();
-- if (!bam1) goto fail;
-- bam1->text = strdup(bam1_header_text);
-- if (!bam1->text) goto fail;
-- bam1->l_text = strlen(bam1_header_text);
-- bam1->n_targets = bam1_n_refseqs;
-- bam1->target_name = (char**)calloc(bam1_n_refseqs, sizeof(char*));
-- bam1->target_len = (uint32_t*)calloc(bam1_n_refseqs, sizeof(uint32_t));
-- for (i = 0; i < bam1_n_refseqs; i++) {
-- bam1->target_name[i] = strdup(bam1_refseqs[i].name);
-- if (!bam1->target_name[i]) goto fail;
-- bam1->target_len[i] = bam1_refseqs[i].len;
-- }
-+ bam1 = sam_hdr_init();
-+ if (!bam1 || -1 == sam_hdr_add_lines(bam1, bam1_header_text, strlen(bam1_header_text)))
-+ goto fail;
-
-- bam_hdr_destroy(bam0);
-+ sam_hdr_destroy(bam0);
- return bam1;
-
- fail:
-- bam_hdr_destroy(bam1);
-- bam_hdr_destroy(bam0);
-+ sam_hdr_destroy(bam1);
-+ sam_hdr_destroy(bam0);
- return NULL;
- }
-
-@@ -128,18 +109,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_1(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_1(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_1_trans_text, test_1_refs, NELE(test_1_refs),
- merged_hdr);
- }
-
--bool check_test_1(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_1(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_1_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen( test_1_trans_text)
-- || translate->n_targets != 1
-+ strncmp(test_1_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen( test_1_trans_text)
-+ || sam_hdr_nref(translate) != 1
- ) return false;
-
- // Check output header
-@@ -150,7 +131,7 @@
- regex_t check_regex;
- regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB);
-
-- if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 1 ) return false;
-+ if ( regexec(&check_regex, sam_hdr_str(out), 0, NULL, 0) != 0 || sam_hdr_nref(out) != 1 ) return false;
-
- regfree(&check_regex);
-
-@@ -163,25 +144,24 @@
- static const char test_2_trans_text[] =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:donkey\tLN:133\n"
--"@SQ\tSN:fish\tLN:133";
-+"@SQ\tSN:fish\tLN:133\n";
-
- static const refseq_info_t test_2_refs[2] = {
- { "donkey", 133 },
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_2(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_2(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_2_trans_text, test_2_refs, NELE(test_2_refs),
- merged_hdr);
- }
-
--bool check_test_2(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_2(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
-- if (
-- strncmp(test_2_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_2_trans_text)
-- || translate->n_targets != 2
-+ if (sam_hdr_length(translate) != strlen(test_2_trans_text)
-+ || strncmp(test_2_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_nref(translate) != 2
- ) return false;
-
- // Check output header
-@@ -193,7 +173,7 @@
- regex_t check_regex;
- regcomp(&check_regex, out_regex, REG_EXTENDED|REG_NOSUB);
-
-- if ( regexec(&check_regex, out->text, 0, NULL, 0) != 0 || out->n_targets != 2 ) return false;
-+ if ( regexec(&check_regex, sam_hdr_str(out), 0, NULL, 0) != 0 || sam_hdr_nref(out) != 2 ) return false;
-
- regfree(&check_regex);
-
-@@ -214,18 +194,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_3(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_3(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_3_trans_text, test_3_refs, NELE(test_3_refs),
- merged_hdr);
- }
-
--bool check_test_3(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_3(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_3_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_3_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_3_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_3_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -241,7 +221,7 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_4(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_4(merged_header_t *merged_hdr) {
- const char* t4_init_text =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:fish\tLN:133\tSP:frog\n"
-@@ -252,12 +232,12 @@
- merged_hdr);
- }
-
--bool check_test_4(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_4(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_4_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_4_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_4_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_4_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -275,7 +255,7 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_5(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_5(merged_header_t *merged_hdr) {
- const char* t5_init_text =
- "@HD\tVN:1.4\tSO:unknown\n"
- "@SQ\tSN:fish\tLN:133\tSP:frog\n"
-@@ -288,12 +268,12 @@
- merged_hdr);
- }
-
--bool check_test_5(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_5(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_5_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_5_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_5_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_5_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -311,18 +291,18 @@
- { "fish", 133 }
- };
-
--bam_hdr_t * setup_test_6(merged_header_t *merged_hdr) {
-+sam_hdr_t * setup_test_6(merged_header_t *merged_hdr) {
- return setup_test(init_text, init_refs, NELE(init_refs),
- test_6_trans_text, test_6_refs, NELE(test_6_refs),
- merged_hdr);
- }
-
--bool check_test_6(bam_hdr_t* translate, bam_hdr_t* out, trans_tbl_t* tbl) {
-+bool check_test_6(sam_hdr_t* translate, sam_hdr_t* out, trans_tbl_t* tbl) {
- // Check input is unchanged
- if (
-- strncmp(test_6_trans_text, translate->text, translate->l_text)
-- || translate->l_text != strlen(test_5_trans_text)
-- || translate->n_targets != 2
-+ strncmp(test_6_trans_text, sam_hdr_str(translate), sam_hdr_length(translate))
-+ || sam_hdr_length(translate) != strlen(test_5_trans_text)
-+ || sam_hdr_nref(translate) != 2
- ) return false;
- return true;
- }
-@@ -348,8 +328,8 @@
- const long GIMMICK_SEED = 0x1234330e;
- srand48(GIMMICK_SEED);
-
-- bam_hdr_t* out;
-- bam_hdr_t* translate;
-+ sam_hdr_t* out;
-+ sam_hdr_t* translate;
-
- if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n");
- // setup
-@@ -364,7 +344,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 1\n");
- trans_tbl_init(merged_hdr, translate, &tbl_1, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 1\n");
- if (verbose > 1) {
-@@ -382,8 +363,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_1);
- if (verbose) fprintf(samtools_stdout, "END test 1\n");
-
-@@ -401,7 +382,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 2\n");
- trans_tbl_init(merged_hdr, translate, &tbl_2, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 2\n");
- if (verbose > 1) {
-@@ -419,8 +401,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_2);
- if (verbose) fprintf(samtools_stdout, "END test 2\n");
-
-@@ -437,7 +419,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 3\n");
- trans_tbl_init(merged_hdr, translate, &tbl_3, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 3\n");
- if (verbose > 1) {
-@@ -455,8 +438,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_3);
- if (verbose) fprintf(samtools_stdout, "END test 3\n");
-
-@@ -473,7 +456,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 4\n");
- trans_tbl_init(merged_hdr, translate, &tbl_4, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 4\n");
- if (verbose > 1) {
-@@ -491,8 +475,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_4);
- if (verbose) fprintf(samtools_stdout, "END test 4\n");
-
-@@ -510,7 +494,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 5\n");
- trans_tbl_init(merged_hdr, translate, &tbl_5, false, false, true, NULL);
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 5\n");
- if (verbose > 1) {
-@@ -528,8 +513,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_5);
- if (verbose) fprintf(samtools_stdout, "END test 5\n");
-
-@@ -546,7 +531,8 @@
- }
- if (verbose) fprintf(samtools_stdout, "RUN test 6\n");
- trans_tbl_init(merged_hdr, translate, &tbl_6, false, false, true, "filename");
-- out = finish_merged_header(merged_hdr);
-+ finish_merged_header(merged_hdr);
-+ out = merged_hdr->hdr;
- free_merged_header(merged_hdr);
- if (verbose) fprintf(samtools_stdout, "END RUN test 6\n");
- if (verbose > 1) {
-@@ -564,8 +550,8 @@
- ++failure;
- }
- // teardown
-- bam_hdr_destroy(translate);
-- bam_hdr_destroy(out);
-+ sam_hdr_destroy(translate);
-+ sam_hdr_destroy(out);
- trans_tbl_destroy(&tbl_6);
- if (verbose) fprintf(samtools_stdout, "END test 6\n");
-
---- python-pysam.orig/samtools/test/split/test_count_rg.c
-+++ python-pysam/samtools/test/split/test_count_rg.c
-@@ -1,6 +1,6 @@
- /* test/split/test_count_rg.c -- split test cases.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -29,15 +29,14 @@
- #include <stdlib.h>
- #include <unistd.h>
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:150\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
- int main(int argc, char**argv)
-@@ -66,13 +65,14 @@
-
- // Setup stderr redirect
- kstring_t res = { 0, 0, NULL };
-- FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr
-+ int orig_stderr = dup(STDERR_FILENO); // Save stderr
-+ int redirected_stderr;
- char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp";
- FILE* check = NULL;
-
- // setup
- if (verbose) printf("BEGIN test 1\n"); // TID test
-- bam_hdr_t* hdr1;
-+ sam_hdr_t* hdr1;
- size_t count;
- char** output;
- setup_test_1(&hdr1);
-@@ -83,9 +83,9 @@
- if (verbose) printf("RUN test 1\n");
-
- // test
-- xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe
-+ redirected_stderr = redirect_stderr(tempfname);
- bool result_1 = count_RG(hdr1, &count, &output);
-- fclose(stderr);
-+ flush_and_restore_stderr(orig_stderr, redirected_stderr);
-
- if (verbose) printf("END RUN test 1\n");
- if (verbose > 1) {
-@@ -111,15 +111,15 @@
- free(output[i]);
- }
- free(output);
-- bam_hdr_destroy(hdr1);
-+ sam_hdr_destroy(hdr1);
- if (verbose) printf("END test 1\n");
-
- // Cleanup
- free(res.s);
- remove(tempfname);
- if (failure > 0)
-- fprintf(orig_stderr, "%d failures %d successes\n", failure, success);
-- fclose(orig_stderr);
-+ fprintf(stderr, "%d failures %d successes\n", failure, success);
-+ close(orig_stderr);
-
- return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/test/split/test_count_rg.c.pysam.c
-+++ python-pysam/samtools/test/split/test_count_rg.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* test/split/test_count_rg.c -- split test cases.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -31,15 +31,14 @@
- #include <stdlib.h>
- #include <unistd.h>
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:150\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
- int samtools_test_count_rg_main(int argc, char**argv)
-@@ -68,13 +67,14 @@
-
- // Setup samtools_stderr redirect
- kstring_t res = { 0, 0, NULL };
-- FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr
-+ int orig_samtools_stderr = dup(STDERR_FILENO); // Save samtools_stderr
-+ int redirected_samtools_stderr;
- char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp";
- FILE* check = NULL;
-
- // setup
- if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // TID test
-- bam_hdr_t* hdr1;
-+ sam_hdr_t* hdr1;
- size_t count;
- char** output;
- setup_test_1(&hdr1);
-@@ -85,9 +85,9 @@
- if (verbose) fprintf(samtools_stdout, "RUN test 1\n");
-
- // test
-- xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe
-+ redirected_samtools_stderr = redirect_samtools_stderr(tempfname);
- bool result_1 = count_RG(hdr1, &count, &output);
-- fclose(samtools_stderr);
-+ flush_and_restore_samtools_stderr(orig_samtools_stderr, redirected_samtools_stderr);
-
- if (verbose) fprintf(samtools_stdout, "END RUN test 1\n");
- if (verbose > 1) {
-@@ -113,15 +113,15 @@
- free(output[i]);
- }
- free(output);
-- bam_hdr_destroy(hdr1);
-+ sam_hdr_destroy(hdr1);
- if (verbose) fprintf(samtools_stdout, "END test 1\n");
-
- // Cleanup
- free(res.s);
- remove(tempfname);
- if (failure > 0)
-- fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success);
-- fclose(orig_samtools_stderr);
-+ fprintf(samtools_stderr, "%d failures %d successes\n", failure, success);
-+ close(orig_samtools_stderr);
-
- return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/test/split/test_expand_format_string.c
-+++ python-pysam/samtools/test/split/test_expand_format_string.c
-@@ -29,15 +29,14 @@
- #include <stdlib.h>
- #include <unistd.h>
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
- "@SQ\tSN:blah\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
- int main(int argc, char**argv)
---- python-pysam.orig/samtools/test/split/test_expand_format_string.c.pysam.c
-+++ python-pysam/samtools/test/split/test_expand_format_string.c.pysam.c
-@@ -31,15 +31,14 @@
- #include <stdlib.h>
- #include <unistd.h>
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
- "@SQ\tSN:blah\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
- int samtools_test_expand_format_string_main(int argc, char**argv)
---- python-pysam.orig/samtools/test/split/test_filter_header_rg.c
-+++ python-pysam/samtools/test/split/test_filter_header_rg.c
-@@ -1,6 +1,6 @@
- /* test/split/test_filter_header_rg.c -- split test cases.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2018, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -24,61 +24,133 @@
-
- #include <config.h>
-
--#include "../../bam_split.c"
- #include "../test.h"
- #include <unistd.h>
-+#include <stdbool.h>
-+#include "samtools.h"
-+#include <string.h>
-+#include <stdlib.h>
-+#include "htslib/kstring.h"
-+
-+int line_cmp(const void *av, const void *bv) {
-+ const char *a = *(const char **) av;
-+ const char *b = *(const char **) bv;
-+ size_t al = strcspn(a, "\n");
-+ size_t bl = strcspn(b, "\n");
-+ size_t min = al < bl ? al : bl;
-+ int m = memcmp(a, b, min);
-+ if (m != 0) return m;
-+ if (al < bl) return -1;
-+ return al == bl ? 0 : 1;
-+}
-+
-+bool hdrcmp(const char *hdr1, const char *hdr2) {
-+ size_t nl1, nl2, count1 = 0, count2 = 0, i;
-+ const char *l;
-+ const char **lines1, **lines2;
-+ int res = 0;
-+
-+ // First line should be @HD
-+ if (strncmp(hdr1, "@HD\t", 4) != 0) return false;
-+ if (strncmp(hdr2, "@HD\t", 4) != 0) return false;
-+ nl1 = strcspn(hdr1, "\n");
-+ nl2 = strcspn(hdr2, "\n");
-+ if (nl1 != nl2 || memcmp(hdr1, hdr2, nl1) != 0) return false;
-+
-+ // Count lines.
-+ for (l = hdr1 + nl1; *l != '\0'; l += strcspn(l, "\n")) ++l, ++count1;
-+ for (l = hdr2 + nl2; *l != '\0'; l += strcspn(l, "\n")) ++l, ++count2;
-+ if (count1 != count2) return false;
-+
-+ lines1 = malloc(count1 * sizeof(*lines1));
-+ if (!lines1) return false;
-+ lines2 = malloc(count2 * sizeof(*lines2));
-+ if (!lines2) { free(lines1); return false; }
-+
-+ for (i = 0, l = hdr1 + nl1; *l != '\0'; l += strcspn(l, "\n"))
-+ lines1[i++] = ++l;
-+ for (i = 0, l = hdr2 + nl2; *l != '\0'; l += strcspn(l, "\n"))
-+ lines2[i++] = ++l;
-+
-+ qsort(lines1, count1, sizeof(*lines1), line_cmp);
-+ qsort(lines2, count2, sizeof(*lines2), line_cmp);
-+
-+ for (i = 0; i < count1; i++) {
-+ res = line_cmp(&lines1[i], &lines2[i]);
-+ if (res != 0) break;
-+ }
-+
-+ free(lines1);
-+ free(lines2);
-+
-+ return res?false:true;
-+}
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
--bool check_test_1(const bam_hdr_t* hdr) {
-+bool check_test_1(sam_hdr_t* hdr) {
- const char *test1_res =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-
-- if (strcmp(hdr->text, test1_res)) {
-- return false;
-- }
-- return true;
-+ return hdrcmp(sam_hdr_str(hdr), test1_res);
- }
-
--void setup_test_2(bam_hdr_t** hdr_in)
-+void setup_test_2(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test2 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test2);
-- (*hdr_in)->l_text = strlen(test2);
-+ sam_hdr_add_lines(*hdr_in, test2, 0);
- }
-
--bool check_test_2(const bam_hdr_t* hdr) {
-+bool check_test_2(sam_hdr_t* hdr) {
- const char *test2_res =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n"
- "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-
-- if (strcmp(hdr->text, test2_res)) {
-- return false;
-- }
-- return true;
-+ return hdrcmp(sam_hdr_str(hdr), test2_res);
-+}
-+
-+void setup_test_3(sam_hdr_t** hdr_in)
-+{
-+ *hdr_in = sam_hdr_init();
-+ const char *test3 =
-+ "@HD\tVN:1.4\n"
-+ "@SQ\tSN:blah\tLN:1\n"
-+ "@RG\tID:fish1\n"
-+ "@RG\tID:fish2\n"
-+ "@RG\tID:fish3\n"
-+ "@RG\tID:fish4\n";
-+ sam_hdr_add_lines(*hdr_in, test3, 0);
-+}
-+
-+bool check_test_3(sam_hdr_t* hdr) {
-+ const char *test3_res =
-+ "@HD\tVN:1.4\n"
-+ "@SQ\tSN:blah\tLN:1\n"
-+ "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-+
-+ return hdrcmp(sam_hdr_str(hdr), test3_res);
- }
-
- int main(int argc, char *argv[])
- {
- // test state
-- const int NUM_TESTS = 2;
-+ const int NUM_TESTS = 3;
- int verbose = 0;
- int success = 0;
- int failure = 0;
-@@ -103,13 +175,14 @@
-
- // Setup stderr redirect
- kstring_t res = { 0, 0, NULL };
-- FILE* orig_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save stderr
-+ int orig_stderr = dup(STDERR_FILENO); // Save stderr
-+ int redirected_stderr;
- char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp";
- FILE* check = NULL;
-
- // setup
- if (verbose) printf("BEGIN test 1\n"); // test eliminating a tag that isn't there
-- bam_hdr_t* hdr1;
-+ sam_hdr_t* hdr1;
- const char* id_to_keep_1 = "1#2.3";
- setup_test_1(&hdr1);
- if (verbose > 1) {
-@@ -119,9 +192,13 @@
- if (verbose) printf("RUN test 1\n");
-
- // test
-- xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe
-- bool result_1 = filter_header_rg(hdr1, id_to_keep_1, arg_list);
-- fclose(stderr);
-+ redirected_stderr = redirect_stderr(tempfname);
-+ bool result_1 = (!sam_hdr_remove_except(hdr1, "RG", "ID", id_to_keep_1) &&
-+ !sam_hdr_add_pg(hdr1, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_stderr(orig_stderr, redirected_stderr);
-
- if (verbose) printf("END RUN test 1\n");
- if (verbose > 1) {
-@@ -144,11 +221,11 @@
- fclose(check);
-
- // teardown
-- bam_hdr_destroy(hdr1);
-+ sam_hdr_destroy(hdr1);
- if (verbose) printf("END test 1\n");
-
- if (verbose) printf("BEGIN test 2\n"); // test eliminating a tag that is there
-- bam_hdr_t* hdr2;
-+ sam_hdr_t* hdr2;
- const char* id_to_keep_2 = "fish";
- setup_test_2(&hdr2);
- if (verbose > 1) {
-@@ -158,9 +235,13 @@
- if (verbose) printf("RUN test 2\n");
-
- // test
-- xfreopen(tempfname, "w", stderr); // Redirect stderr to pipe
-- bool result_2 = filter_header_rg(hdr2, id_to_keep_2, arg_list);
-- fclose(stderr);
-+ redirected_stderr = redirect_stderr(tempfname);
-+ bool result_2 = (!sam_hdr_remove_except(hdr2, "RG", "ID", id_to_keep_2) &&
-+ !sam_hdr_add_pg(hdr2, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_stderr(orig_stderr, redirected_stderr);
-
- if (verbose) printf("END RUN test 2\n");
- if (verbose > 1) {
-@@ -183,17 +264,58 @@
- fclose(check);
-
- // teardown
-- bam_hdr_destroy(hdr2);
-+ sam_hdr_destroy(hdr2);
- if (verbose) printf("END test 2\n");
-
-+ if (verbose) printf("BEGIN test 3\n"); // test eliminating a tag that is there
-+ sam_hdr_t* hdr3;
-+ setup_test_3(&hdr3);
-+ if (verbose > 1) {
-+ printf("hdr3\n");
-+ dump_hdr(hdr3);
-+ }
-+ if (verbose) printf("RUN test 3\n");
-+
-+ // test
-+ redirected_stderr = redirect_stderr(tempfname);
-+ bool result_3 = (!sam_hdr_remove_except(hdr3, "RG", NULL, NULL) &&
-+ !sam_hdr_add_pg(hdr3, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_stderr(orig_stderr, redirected_stderr);
-+
-+ if (verbose) printf("END RUN test 3\n");
-+ if (verbose > 1) {
-+ printf("hdr3\n");
-+ dump_hdr(hdr3);
-+ }
-+
-+ // check result
-+ res.l = 0;
-+ check = fopen(tempfname, "r");
-+ if ( result_3
-+ && check_test_3(hdr3)
-+ && kgetline(&res, (kgets_func *)fgets, check) < 0
-+ && (feof(check) || res.l == 0)) {
-+ ++success;
-+ } else {
-+ ++failure;
-+ if (verbose) printf("FAIL test 3\n");
-+ }
-+ fclose(check);
-+
-+ // teardown
-+ sam_hdr_destroy(hdr3);
-+ if (verbose) printf("END test 3\n");
-
- // Cleanup
- free(res.s);
- free(arg_list);
- remove(tempfname);
- if (failure > 0)
-- fprintf(orig_stderr, "%d failures %d successes\n", failure, success);
-- fclose(orig_stderr);
-+ fprintf(stderr, "%d failures %d successes\n", failure, success);
-+ close(orig_stderr);
-
- return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/test/split/test_filter_header_rg.c.pysam.c
-+++ python-pysam/samtools/test/split/test_filter_header_rg.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* test/split/test_filter_header_rg.c -- split test cases.
-
-- Copyright (C) 2014 Genome Research Ltd.
-+ Copyright (C) 2014-2016, 2018, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -26,61 +26,133 @@
-
- #include <config.h>
-
--#include "../../bam_split.c"
- #include "../test.h"
- #include <unistd.h>
-+#include <stdbool.h>
-+#include "samtools.h"
-+#include <string.h>
-+#include <stdlib.h>
-+#include "htslib/kstring.h"
-+
-+int line_cmp(const void *av, const void *bv) {
-+ const char *a = *(const char **) av;
-+ const char *b = *(const char **) bv;
-+ size_t al = strcspn(a, "\n");
-+ size_t bl = strcspn(b, "\n");
-+ size_t min = al < bl ? al : bl;
-+ int m = memcmp(a, b, min);
-+ if (m != 0) return m;
-+ if (al < bl) return -1;
-+ return al == bl ? 0 : 1;
-+}
-+
-+bool hdrcmp(const char *hdr1, const char *hdr2) {
-+ size_t nl1, nl2, count1 = 0, count2 = 0, i;
-+ const char *l;
-+ const char **lines1, **lines2;
-+ int res = 0;
-+
-+ // First line should be @HD
-+ if (strncmp(hdr1, "@HD\t", 4) != 0) return false;
-+ if (strncmp(hdr2, "@HD\t", 4) != 0) return false;
-+ nl1 = strcspn(hdr1, "\n");
-+ nl2 = strcspn(hdr2, "\n");
-+ if (nl1 != nl2 || memcmp(hdr1, hdr2, nl1) != 0) return false;
-+
-+ // Count lines.
-+ for (l = hdr1 + nl1; *l != '\0'; l += strcspn(l, "\n")) ++l, ++count1;
-+ for (l = hdr2 + nl2; *l != '\0'; l += strcspn(l, "\n")) ++l, ++count2;
-+ if (count1 != count2) return false;
-+
-+ lines1 = malloc(count1 * sizeof(*lines1));
-+ if (!lines1) return false;
-+ lines2 = malloc(count2 * sizeof(*lines2));
-+ if (!lines2) { free(lines1); return false; }
-+
-+ for (i = 0, l = hdr1 + nl1; *l != '\0'; l += strcspn(l, "\n"))
-+ lines1[i++] = ++l;
-+ for (i = 0, l = hdr2 + nl2; *l != '\0'; l += strcspn(l, "\n"))
-+ lines2[i++] = ++l;
-+
-+ qsort(lines1, count1, sizeof(*lines1), line_cmp);
-+ qsort(lines2, count2, sizeof(*lines2), line_cmp);
-+
-+ for (i = 0; i < count1; i++) {
-+ res = line_cmp(&lines1[i], &lines2[i]);
-+ if (res != 0) break;
-+ }
-+
-+ free(lines1);
-+ free(lines2);
-+
-+ return res?false:true;
-+}
-
--void setup_test_1(bam_hdr_t** hdr_in)
-+void setup_test_1(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test1 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test1);
-- (*hdr_in)->l_text = strlen(test1);
-+ sam_hdr_add_lines(*hdr_in, test1, 0);
- }
-
--bool check_test_1(const bam_hdr_t* hdr) {
-+bool check_test_1(sam_hdr_t* hdr) {
- const char *test1_res =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-
-- if (strcmp(hdr->text, test1_res)) {
-- return false;
-- }
-- return true;
-+ return hdrcmp(sam_hdr_str(hdr), test1_res);
- }
-
--void setup_test_2(bam_hdr_t** hdr_in)
-+void setup_test_2(sam_hdr_t** hdr_in)
- {
-- *hdr_in = bam_hdr_init();
-+ *hdr_in = sam_hdr_init();
- const char *test2 =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n";
-- (*hdr_in)->text = strdup(test2);
-- (*hdr_in)->l_text = strlen(test2);
-+ sam_hdr_add_lines(*hdr_in, test2, 0);
- }
-
--bool check_test_2(const bam_hdr_t* hdr) {
-+bool check_test_2(sam_hdr_t* hdr) {
- const char *test2_res =
- "@HD\tVN:1.4\n"
-- "@SQ\tSN:blah\n"
-+ "@SQ\tSN:blah\tLN:1\n"
- "@RG\tID:fish\n"
- "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-
-- if (strcmp(hdr->text, test2_res)) {
-- return false;
-- }
-- return true;
-+ return hdrcmp(sam_hdr_str(hdr), test2_res);
-+}
-+
-+void setup_test_3(sam_hdr_t** hdr_in)
-+{
-+ *hdr_in = sam_hdr_init();
-+ const char *test3 =
-+ "@HD\tVN:1.4\n"
-+ "@SQ\tSN:blah\tLN:1\n"
-+ "@RG\tID:fish1\n"
-+ "@RG\tID:fish2\n"
-+ "@RG\tID:fish3\n"
-+ "@RG\tID:fish4\n";
-+ sam_hdr_add_lines(*hdr_in, test3, 0);
-+}
-+
-+bool check_test_3(sam_hdr_t* hdr) {
-+ const char *test3_res =
-+ "@HD\tVN:1.4\n"
-+ "@SQ\tSN:blah\tLN:1\n"
-+ "@PG\tID:samtools\tPN:samtools\tVN:x.y.test\tCL:test_filter_header_rg foo bar baz\n";
-+
-+ return hdrcmp(sam_hdr_str(hdr), test3_res);
- }
-
- int samtools_test_filter_header_rg_main(int argc, char *argv[])
- {
- // test state
-- const int NUM_TESTS = 2;
-+ const int NUM_TESTS = 3;
- int verbose = 0;
- int success = 0;
- int failure = 0;
-@@ -105,13 +177,14 @@
-
- // Setup samtools_stderr redirect
- kstring_t res = { 0, 0, NULL };
-- FILE* orig_samtools_stderr = fdopen(dup(STDERR_FILENO), "a"); // Save samtools_stderr
-+ int orig_samtools_stderr = dup(STDERR_FILENO); // Save samtools_stderr
-+ int redirected_samtools_stderr;
- char* tempfname = (optind < argc)? argv[optind] : "test_count_rg.tmp";
- FILE* check = NULL;
-
- // setup
- if (verbose) fprintf(samtools_stdout, "BEGIN test 1\n"); // test eliminating a tag that isn't there
-- bam_hdr_t* hdr1;
-+ sam_hdr_t* hdr1;
- const char* id_to_keep_1 = "1#2.3";
- setup_test_1(&hdr1);
- if (verbose > 1) {
-@@ -121,9 +194,13 @@
- if (verbose) fprintf(samtools_stdout, "RUN test 1\n");
-
- // test
-- xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe
-- bool result_1 = filter_header_rg(hdr1, id_to_keep_1, arg_list);
-- fclose(samtools_stderr);
-+ redirected_samtools_stderr = redirect_samtools_stderr(tempfname);
-+ bool result_1 = (!sam_hdr_remove_except(hdr1, "RG", "ID", id_to_keep_1) &&
-+ !sam_hdr_add_pg(hdr1, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_samtools_stderr(orig_samtools_stderr, redirected_samtools_stderr);
-
- if (verbose) fprintf(samtools_stdout, "END RUN test 1\n");
- if (verbose > 1) {
-@@ -146,11 +223,11 @@
- fclose(check);
-
- // teardown
-- bam_hdr_destroy(hdr1);
-+ sam_hdr_destroy(hdr1);
- if (verbose) fprintf(samtools_stdout, "END test 1\n");
-
- if (verbose) fprintf(samtools_stdout, "BEGIN test 2\n"); // test eliminating a tag that is there
-- bam_hdr_t* hdr2;
-+ sam_hdr_t* hdr2;
- const char* id_to_keep_2 = "fish";
- setup_test_2(&hdr2);
- if (verbose > 1) {
-@@ -160,9 +237,13 @@
- if (verbose) fprintf(samtools_stdout, "RUN test 2\n");
-
- // test
-- xfreopen(tempfname, "w", samtools_stderr); // Redirect samtools_stderr to pipe
-- bool result_2 = filter_header_rg(hdr2, id_to_keep_2, arg_list);
-- fclose(samtools_stderr);
-+ redirected_samtools_stderr = redirect_samtools_stderr(tempfname);
-+ bool result_2 = (!sam_hdr_remove_except(hdr2, "RG", "ID", id_to_keep_2) &&
-+ !sam_hdr_add_pg(hdr2, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_samtools_stderr(orig_samtools_stderr, redirected_samtools_stderr);
-
- if (verbose) fprintf(samtools_stdout, "END RUN test 2\n");
- if (verbose > 1) {
-@@ -185,17 +266,58 @@
- fclose(check);
-
- // teardown
-- bam_hdr_destroy(hdr2);
-+ sam_hdr_destroy(hdr2);
- if (verbose) fprintf(samtools_stdout, "END test 2\n");
-
-+ if (verbose) fprintf(samtools_stdout, "BEGIN test 3\n"); // test eliminating a tag that is there
-+ sam_hdr_t* hdr3;
-+ setup_test_3(&hdr3);
-+ if (verbose > 1) {
-+ fprintf(samtools_stdout, "hdr3\n");
-+ dump_hdr(hdr3);
-+ }
-+ if (verbose) fprintf(samtools_stdout, "RUN test 3\n");
-+
-+ // test
-+ redirected_samtools_stderr = redirect_samtools_stderr(tempfname);
-+ bool result_3 = (!sam_hdr_remove_except(hdr3, "RG", NULL, NULL) &&
-+ !sam_hdr_add_pg(hdr3, "samtools", "VN", samtools_version(),
-+ arg_list ? "CL": NULL,
-+ arg_list ? arg_list : NULL,
-+ NULL));
-+ flush_and_restore_samtools_stderr(orig_samtools_stderr, redirected_samtools_stderr);
-+
-+ if (verbose) fprintf(samtools_stdout, "END RUN test 3\n");
-+ if (verbose > 1) {
-+ fprintf(samtools_stdout, "hdr3\n");
-+ dump_hdr(hdr3);
-+ }
-+
-+ // check result
-+ res.l = 0;
-+ check = fopen(tempfname, "r");
-+ if ( result_3
-+ && check_test_3(hdr3)
-+ && kgetline(&res, (kgets_func *)fgets, check) < 0
-+ && (feof(check) || res.l == 0)) {
-+ ++success;
-+ } else {
-+ ++failure;
-+ if (verbose) fprintf(samtools_stdout, "FAIL test 3\n");
-+ }
-+ fclose(check);
-+
-+ // teardown
-+ sam_hdr_destroy(hdr3);
-+ if (verbose) fprintf(samtools_stdout, "END test 3\n");
-
- // Cleanup
- free(res.s);
- free(arg_list);
- remove(tempfname);
- if (failure > 0)
-- fprintf(orig_samtools_stderr, "%d failures %d successes\n", failure, success);
-- fclose(orig_samtools_stderr);
-+ fprintf(samtools_stderr, "%d failures %d successes\n", failure, success);
-+ close(orig_samtools_stderr);
-
- return (success == NUM_TESTS)? EXIT_SUCCESS : EXIT_FAILURE;
- }
---- python-pysam.orig/samtools/test/test.c
-+++ python-pysam/samtools/test/test.c
-@@ -1,6 +1,6 @@
- /* test/test.c -- test harness utility routines.
-
-- Copyright (C) 2014, 2016 Genome Research Ltd.
-+ Copyright (C) 2014, 2016, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -28,6 +28,12 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <inttypes.h>
- #include <htslib/sam.h>
-
- #include "test.h"
-@@ -41,17 +47,34 @@
- }
- }
-
--void dump_hdr(const bam_hdr_t* hdr)
-+int redirect_stderr(const char *path) {
-+ int fd = open(path, O_WRONLY|O_TRUNC|O_CREAT, 0666);
-+ if (!fd) {
-+ fprintf(stderr, "Couldn't open \"%s\" : %s\n", path, strerror(errno));
-+ exit(2);
-+ }
-+ fflush(stderr);
-+ dup2(fd, STDERR_FILENO);
-+ return fd;
-+}
-+
-+void flush_and_restore_stderr(int orig_stderr, int redirect_fd) {
-+ fflush(stderr);
-+ dup2(orig_stderr, STDERR_FILENO);
-+ close(redirect_fd);
-+}
-+
-+void dump_hdr(const sam_hdr_t* hdr)
- {
-- printf("n_targets: %d\n", hdr->n_targets);
-+ printf("n_targets: %d\n", sam_hdr_nref(hdr));
- printf("ignore_sam_err: %d\n", hdr->ignore_sam_err);
-- printf("l_text: %u\n", hdr->l_text);
-+ printf("l_text: %zu\n", (size_t) sam_hdr_length((sam_hdr_t*)hdr));
- printf("idx\ttarget_len\ttarget_name:\n");
- int32_t target;
-- for (target = 0; target < hdr->n_targets; ++target) {
-- printf("%d\t%u\t\"%s\"\n", target, hdr->target_len[target], hdr->target_name[target]);
-+ for (target = 0; target < sam_hdr_nref(hdr); ++target) {
-+ printf("%d\t%"PRId64"\t\"%s\"\n", target, (int64_t) sam_hdr_tid2len(hdr, target), sam_hdr_tid2name(hdr, target));
- }
-- printf("text: \"%s\"\n", hdr->text);
-+ printf("text: \"%s\"\n", sam_hdr_str((sam_hdr_t*)hdr));
- }
-
- // For tests, just return a constant that can be embedded in expected output.
---- python-pysam.orig/samtools/test/test.c.pysam.c
-+++ python-pysam/samtools/test/test.c.pysam.c
-@@ -2,7 +2,7 @@
-
- /* test/test.c -- test harness utility routines.
-
-- Copyright (C) 2014, 2016 Genome Research Ltd.
-+ Copyright (C) 2014, 2016, 2019 Genome Research Ltd.
-
- Author: Martin O. Pollard <mp15@sanger.ac.uk>
-
-@@ -30,6 +30,12 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <inttypes.h>
- #include <htslib/sam.h>
-
- #include "test.h"
-@@ -43,17 +49,34 @@
- }
- }
-
--void dump_hdr(const bam_hdr_t* hdr)
-+int redirect_samtools_stderr(const char *path) {
-+ int fd = open(path, O_WRONLY|O_TRUNC|O_CREAT, 0666);
-+ if (!fd) {
-+ fprintf(samtools_stderr, "Couldn't open \"%s\" : %s\n", path, strerror(errno));
-+ exit(2);
-+ }
-+ fflush(samtools_stderr);
-+ dup2(fd, STDERR_FILENO);
-+ return fd;
-+}
-+
-+void flush_and_restore_samtools_stderr(int orig_samtools_stderr, int redirect_fd) {
-+ fflush(samtools_stderr);
-+ dup2(orig_samtools_stderr, STDERR_FILENO);
-+ close(redirect_fd);
-+}
-+
-+void dump_hdr(const sam_hdr_t* hdr)
- {
-- fprintf(samtools_stdout, "n_targets: %d\n", hdr->n_targets);
-+ fprintf(samtools_stdout, "n_targets: %d\n", sam_hdr_nref(hdr));
- fprintf(samtools_stdout, "ignore_sam_err: %d\n", hdr->ignore_sam_err);
-- fprintf(samtools_stdout, "l_text: %u\n", hdr->l_text);
-+ fprintf(samtools_stdout, "l_text: %zu\n", (size_t) sam_hdr_length((sam_hdr_t*)hdr));
- fprintf(samtools_stdout, "idx\ttarget_len\ttarget_name:\n");
- int32_t target;
-- for (target = 0; target < hdr->n_targets; ++target) {
-- fprintf(samtools_stdout, "%d\t%u\t\"%s\"\n", target, hdr->target_len[target], hdr->target_name[target]);
-+ for (target = 0; target < sam_hdr_nref(hdr); ++target) {
-+ fprintf(samtools_stdout, "%d\t%"PRId64"\t\"%s\"\n", target, (int64_t) sam_hdr_tid2len(hdr, target), sam_hdr_tid2name(hdr, target));
- }
-- fprintf(samtools_stdout, "text: \"%s\"\n", hdr->text);
-+ fprintf(samtools_stdout, "text: \"%s\"\n", sam_hdr_str((sam_hdr_t*)hdr));
- }
-
- // For tests, just return a constant that can be embedded in expected output.
---- python-pysam.orig/samtools/test/test.h
-+++ python-pysam/samtools/test/test.h
-@@ -30,6 +30,9 @@
-
- void xfreopen(const char *path, const char *mode, FILE *stream);
-
--void dump_hdr(const bam_hdr_t* hdr);
-+int redirect_stderr(const char *path);
-+void flush_and_restore_stderr(int orig_stderr, int redirect_fd);
-+
-+void dump_hdr(const sam_hdr_t* hdr);
-
- #endif
---- python-pysam.orig/samtools/tmp_file.c
-+++ python-pysam/samtools/tmp_file.c
-@@ -2,7 +2,7 @@
- tmp_file.c - write to and read from a temporary binary file
- for fast storage plus added compression.
-
-- Copyright (C) 2017 Genome Research Ltd.
-+ Copyright (C) 2017, 2018 Genome Research Ltd.
-
- Author: Andrew Whitwham <aw7@sanger.ac.uk>
-
-@@ -66,7 +66,6 @@
- tmp->max_data_size = TMP_SAM_MAX_DATA + sizeof(bam1_t); // arbitrary but growable
- tmp->ring_buffer_size = TMP_SAM_RING_SIZE; // arbitrary (min 64K) but growable
- tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size * tmp->group_size);
-- tmp->data = NULL;
- tmp->ring_buffer = malloc(sizeof(uint8_t) * tmp->ring_buffer_size);
- tmp->ring_index = tmp->ring_buffer;
- tmp->comp_buffer = malloc(tmp->comp_buffer_size);
-@@ -184,7 +183,7 @@
-
-
- /*
-- * This does the actual compression and writing to disk. On disk format consists of a
-+ * This does the actual compression and writing to a file. The file format consists of a
- * single size_t for the size of the compressed data followed by the data itself.
- * Returns 0 on success, a negative number on failure.
- */
-@@ -244,16 +243,16 @@
-
- /*
- * Stores an in memory bam structure for writing and if enough are gathered together writes
-- * it to disk. Mulitiple alignments compress better that single ones though after a certain number
-+ * it to a file. Multiple alignments compress better that single ones though after a certain number
- * there is a law of diminishing returns.
- * Returns 0 on success, a negative number on failure.
- */
- int tmp_file_write(tmp_file_t *tmp, bam1_t *inbam) {
-
-- if ((tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) {
-+ if ((tmp->offset + tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) {
- int ret;
-
-- if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 5))) {
-+ if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->offset + tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 2))) {
- tmp_print_error(tmp, "[tmp_file] Error: input line too big. (%ld).\n",
- (tmp->input_size + inbam->l_data));
-
-@@ -283,70 +282,8 @@
-
-
- /*
-- * Closes the file after writing out any remaining alignments. Adds a size_t 0 to
-- * mark the end of the file. Companion function to tmp_file_open_read below.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_close_write(tmp_file_t *tmp) {
-- size_t terminator = 0;
--
-- if (tmp->entry_number) {
-- int ret;
--
-- if ((ret = tmp_file_write_to_file(tmp))) {
-- return ret;
-- }
-- }
--
-- if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) {
-- tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n");
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- if (fclose(tmp->fp)) {
-- tmp_print_error(tmp, "[tmp_file] Error: closing tmp file %s failed.\n", tmp->name);
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- LZ4_freeStream(tmp->stream);
--
-- return TMP_SAM_OK;
--}
--
--
--/*
-- * Opens the file for reading. Optionally, if given a pointer to an existing
-- * bam1_t structure, it will free the data entry to prevent memory leaks.
-- * Companion function to tmp_file_close_write above.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam) {
--
-- if ((tmp->fp = fopen(tmp->name, "rb")) == NULL) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to open read file %s.\n", tmp->name);
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- tmp->dstream = LZ4_createStreamDecode();
-- tmp->offset = 0;
--
-- if (inbam) {
-- free(inbam->data);
-- }
--
-- if (!tmp->dstream) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n");
-- return TMP_SAM_MEM_ERROR;
-- }
--
--
-- return TMP_SAM_OK;
--}
--
--
--/*
-- * An alternative to tmp_file_close_write that does the same job without actually
-- * closing the file. Companion function to tmp_file_begin_read below.
-+ * Marks the end of file writing. Adds a size_t 0 to mark the end of
-+ * the file. Companion function to tmp_file_begin_read below.
- * Returns 0 on success, a negative number on failure.
- */
- int tmp_file_end_write(tmp_file_t *tmp) {
-@@ -374,11 +311,11 @@
-
-
- /*
-- * An alternative to tmp_file_open_read but works on an open file.
-+ * Prepares the file for reading.
- * Companion function to tmp_file_end_write above.
- * Returns 0 on success, a negative number on failure.
- */
--int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam) {
-+int tmp_file_begin_read(tmp_file_t *tmp) {
-
- rewind(tmp->fp);
-
-@@ -386,10 +323,6 @@
- tmp->offset = 0;
- tmp->entry_number = tmp->group_size;
-
-- if (inbam) {
-- free(inbam->data);
-- }
--
- if (!tmp->dstream) {
- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n");
- return TMP_SAM_MEM_ERROR;
-@@ -400,11 +333,19 @@
-
-
- /*
-- * Read the next alignment, either from memory or from disk.
-+ * Read the next alignment, either from memory or from a file.
- * Returns size of entry on success, 0 on end of file or a negative on error.
- */
- int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam) {
- int entry_size;
-+ uint8_t *data = inbam->data;
-+
-+ /* while tmp_file_read assumes that the same bam1_t variable
-+ is being used in each call, this may not be the case. So
-+ default to the lowest memory size for safety. */
-+ if (tmp->data_size > inbam->m_data) {
-+ tmp->data_size = inbam->m_data;
-+ }
-
- if (tmp->entry_number == tmp->group_size) {
- // read more data
-@@ -438,17 +379,22 @@
-
- tmp->ring_index = tmp->ring_buffer + tmp->offset;
- memcpy(inbam, tmp->ring_index, sizeof(bam1_t));
-+ inbam->data = data; // put the pointer to real bam data back
-
- if ((unsigned int)inbam->l_data > tmp->data_size) {
-- if ((tmp->data = realloc(tmp->data, sizeof(uint8_t) * inbam->l_data)) == NULL) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp data memory.\n");
-+ uint8_t *tmp_data;
-+ tmp->data_size = inbam->l_data; kroundup32(tmp->data_size);
-+
-+ if ((tmp_data = realloc(inbam->data, sizeof(uint8_t) * tmp->data_size)) == NULL) {
-+ tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp bam data memory.\n");
- return TMP_SAM_MEM_ERROR;
- }
-
-- tmp->data_size = inbam->l_data;
-+ inbam->data = tmp_data;
- }
-
-- inbam->data = tmp->data;
-+ inbam->m_data = tmp->data_size; // set to the actual data size
-+
- entry_size = sizeof(bam1_t);
-
- memcpy(inbam->data, tmp->ring_index + entry_size, inbam->l_data);
-@@ -474,34 +420,19 @@
-
-
- /*
-- * Frees up memory, closes the file and optionally deletes it. Giving this function
-- * pointer to the bam1_t structure used for reading will set its data value to null,
-- * preventing bam_destroy1() from trying to free already freed memory.
-- * Returns 0 on success, a negative number or EOF on failure.
-+ * Frees up memory, closes the file and deletes it.
-+ * Returns 0 on success or EOF on failure.
- */
--int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete) {
-+int tmp_file_destroy(tmp_file_t *tmp) {
- int ret = 0;
-
- ret = fclose(tmp->fp);
-
-- if (delete && ret == 0) {
-- if (unlink(tmp->name)) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to delete file %s.\n", tmp->name);
-- ret = TMP_SAM_FILE_ERROR;
-- }
-- }
--
- LZ4_freeStreamDecode(tmp->dstream);
- free(tmp->ring_buffer);
- free(tmp->comp_buffer);
- free(tmp->name);
-- free(tmp->data);
- free(tmp->dict);
-
--
-- if (inbam) {
-- inbam->data = NULL;
-- }
--
- return ret;
- }
---- python-pysam.orig/samtools/tmp_file.c.pysam.c
-+++ python-pysam/samtools/tmp_file.c.pysam.c
-@@ -4,7 +4,7 @@
- tmp_file.c - write to and read from a temporary binary file
- for fast storage plus added compression.
-
-- Copyright (C) 2017 Genome Research Ltd.
-+ Copyright (C) 2017, 2018 Genome Research Ltd.
-
- Author: Andrew Whitwham <aw7@sanger.ac.uk>
-
-@@ -68,7 +68,6 @@
- tmp->max_data_size = TMP_SAM_MAX_DATA + sizeof(bam1_t); // arbitrary but growable
- tmp->ring_buffer_size = TMP_SAM_RING_SIZE; // arbitrary (min 64K) but growable
- tmp->comp_buffer_size = LZ4_COMPRESSBOUND(tmp->max_data_size * tmp->group_size);
-- tmp->data = NULL;
- tmp->ring_buffer = malloc(sizeof(uint8_t) * tmp->ring_buffer_size);
- tmp->ring_index = tmp->ring_buffer;
- tmp->comp_buffer = malloc(tmp->comp_buffer_size);
-@@ -186,7 +185,7 @@
-
-
- /*
-- * This does the actual compression and writing to disk. On disk format consists of a
-+ * This does the actual compression and writing to a file. The file format consists of a
- * single size_t for the size of the compressed data followed by the data itself.
- * Returns 0 on success, a negative number on failure.
- */
-@@ -246,16 +245,16 @@
-
- /*
- * Stores an in memory bam structure for writing and if enough are gathered together writes
-- * it to disk. Mulitiple alignments compress better that single ones though after a certain number
-+ * it to a file. Multiple alignments compress better that single ones though after a certain number
- * there is a law of diminishing returns.
- * Returns 0 on success, a negative number on failure.
- */
- int tmp_file_write(tmp_file_t *tmp, bam1_t *inbam) {
-
-- if ((tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) {
-+ if ((tmp->offset + tmp->input_size + sizeof(bam1_t) + inbam->l_data) >= tmp->ring_buffer_size) {
- int ret;
-
-- if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 5))) {
-+ if ((ret = tmp_file_grow_ring_buffer(tmp, (tmp->offset + tmp->input_size + sizeof(bam1_t) + inbam->l_data) * 2))) {
- tmp_print_error(tmp, "[tmp_file] Error: input line too big. (%ld).\n",
- (tmp->input_size + inbam->l_data));
-
-@@ -285,70 +284,8 @@
-
-
- /*
-- * Closes the file after writing out any remaining alignments. Adds a size_t 0 to
-- * mark the end of the file. Companion function to tmp_file_open_read below.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_close_write(tmp_file_t *tmp) {
-- size_t terminator = 0;
--
-- if (tmp->entry_number) {
-- int ret;
--
-- if ((ret = tmp_file_write_to_file(tmp))) {
-- return ret;
-- }
-- }
--
-- if (fwrite(&terminator, sizeof(size_t), 1, tmp->fp) < 1) {
-- tmp_print_error(tmp, "[tmp_file] Error: tmp file write terminator failed.\n");
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- if (fclose(tmp->fp)) {
-- tmp_print_error(tmp, "[tmp_file] Error: closing tmp file %s failed.\n", tmp->name);
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- LZ4_freeStream(tmp->stream);
--
-- return TMP_SAM_OK;
--}
--
--
--/*
-- * Opens the file for reading. Optionally, if given a pointer to an existing
-- * bam1_t structure, it will free the data entry to prevent memory leaks.
-- * Companion function to tmp_file_close_write above.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam) {
--
-- if ((tmp->fp = fopen(tmp->name, "rb")) == NULL) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to open read file %s.\n", tmp->name);
-- return TMP_SAM_FILE_ERROR;
-- }
--
-- tmp->dstream = LZ4_createStreamDecode();
-- tmp->offset = 0;
--
-- if (inbam) {
-- free(inbam->data);
-- }
--
-- if (!tmp->dstream) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n");
-- return TMP_SAM_MEM_ERROR;
-- }
--
--
-- return TMP_SAM_OK;
--}
--
--
--/*
-- * An alternative to tmp_file_close_write that does the same job without actually
-- * closing the file. Companion function to tmp_file_begin_read below.
-+ * Marks the end of file writing. Adds a size_t 0 to mark the end of
-+ * the file. Companion function to tmp_file_begin_read below.
- * Returns 0 on success, a negative number on failure.
- */
- int tmp_file_end_write(tmp_file_t *tmp) {
-@@ -376,11 +313,11 @@
-
-
- /*
-- * An alternative to tmp_file_open_read but works on an open file.
-+ * Prepares the file for reading.
- * Companion function to tmp_file_end_write above.
- * Returns 0 on success, a negative number on failure.
- */
--int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam) {
-+int tmp_file_begin_read(tmp_file_t *tmp) {
-
- rewind(tmp->fp);
-
-@@ -388,10 +325,6 @@
- tmp->offset = 0;
- tmp->entry_number = tmp->group_size;
-
-- if (inbam) {
-- free(inbam->data);
-- }
--
- if (!tmp->dstream) {
- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate compression stream.\n");
- return TMP_SAM_MEM_ERROR;
-@@ -402,11 +335,19 @@
-
-
- /*
-- * Read the next alignment, either from memory or from disk.
-+ * Read the next alignment, either from memory or from a file.
- * Returns size of entry on success, 0 on end of file or a negative on error.
- */
- int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam) {
- int entry_size;
-+ uint8_t *data = inbam->data;
-+
-+ /* while tmp_file_read assumes that the same bam1_t variable
-+ is being used in each call, this may not be the case. So
-+ default to the lowest memory size for safety. */
-+ if (tmp->data_size > inbam->m_data) {
-+ tmp->data_size = inbam->m_data;
-+ }
-
- if (tmp->entry_number == tmp->group_size) {
- // read more data
-@@ -440,17 +381,22 @@
-
- tmp->ring_index = tmp->ring_buffer + tmp->offset;
- memcpy(inbam, tmp->ring_index, sizeof(bam1_t));
-+ inbam->data = data; // put the pointer to real bam data back
-
- if ((unsigned int)inbam->l_data > tmp->data_size) {
-- if ((tmp->data = realloc(tmp->data, sizeof(uint8_t) * inbam->l_data)) == NULL) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp data memory.\n");
-+ uint8_t *tmp_data;
-+ tmp->data_size = inbam->l_data; kroundup32(tmp->data_size);
-+
-+ if ((tmp_data = realloc(inbam->data, sizeof(uint8_t) * tmp->data_size)) == NULL) {
-+ tmp_print_error(tmp, "[tmp_file] Error: unable to allocate tmp bam data memory.\n");
- return TMP_SAM_MEM_ERROR;
- }
-
-- tmp->data_size = inbam->l_data;
-+ inbam->data = tmp_data;
- }
-
-- inbam->data = tmp->data;
-+ inbam->m_data = tmp->data_size; // set to the actual data size
-+
- entry_size = sizeof(bam1_t);
-
- memcpy(inbam->data, tmp->ring_index + entry_size, inbam->l_data);
-@@ -476,34 +422,19 @@
-
-
- /*
-- * Frees up memory, closes the file and optionally deletes it. Giving this function
-- * pointer to the bam1_t structure used for reading will set its data value to null,
-- * preventing bam_destroy1() from trying to free already freed memory.
-- * Returns 0 on success, a negative number or EOF on failure.
-+ * Frees up memory, closes the file and deletes it.
-+ * Returns 0 on success or EOF on failure.
- */
--int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete) {
-+int tmp_file_destroy(tmp_file_t *tmp) {
- int ret = 0;
-
- ret = fclose(tmp->fp);
-
-- if (delete && ret == 0) {
-- if (unlink(tmp->name)) {
-- tmp_print_error(tmp, "[tmp_file] Error: unable to delete file %s.\n", tmp->name);
-- ret = TMP_SAM_FILE_ERROR;
-- }
-- }
--
- LZ4_freeStreamDecode(tmp->dstream);
- free(tmp->ring_buffer);
- free(tmp->comp_buffer);
- free(tmp->name);
-- free(tmp->data);
- free(tmp->dict);
-
--
-- if (inbam) {
-- inbam->data = NULL;
-- }
--
- return ret;
- }
---- python-pysam.orig/samtools/tmp_file.h
-+++ python-pysam/samtools/tmp_file.h
-@@ -2,7 +2,7 @@
- tmp_file.h - write to and read from a temporary binary file
- for fast storage plus added compression.
-
-- Copyright (C) 2017 Genome Research Ltd.
-+ Copyright (C) 2017, 2018 Genome Research Ltd.
-
- Author: Andrew Whitwham <aw7@sanger.ac.uk>
-
-@@ -58,7 +58,6 @@
- size_t ring_buffer_size;
- size_t comp_buffer_size;
- size_t offset;
-- uint8_t *data;
- uint8_t *ring_buffer;
- uint8_t *ring_index;
- char *comp_buffer;
-@@ -84,7 +83,7 @@
-
- /*
- * Stores an in memory bam structure for writing and if enough are gathered together writes
-- * it to disk. Mulitiple alignments compress better that single ones though after a certain number
-+ * it to a file. Multiple alignments compress better that single ones though after a certain number
- * there is a law of diminishing returns.
- * Returns 0 on success, a negative number on failure.
- */
-@@ -92,50 +91,31 @@
-
-
- /*
-- * Closes the file after writing out any remaining alignments. Adds a size_t 0 to
-- * mark the end of the file. Companion function to tmp_file_open_read below.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_close_write(tmp_file_t *tmp);
--
--
--/*
-- * Opens the file for reading. Optionally, if given a pointer to an existing
-- * bam1_t structure, it will free the data entry to prevent memory leaks.
-- * Companion function to tmp_file_close_write above.
-- * Returns 0 on success, a negative number on failure.
-- */
--int tmp_file_open_read(tmp_file_t *tmp, bam1_t *inbam);
--
--
--/*
-- * An alternative to tmp_file_close_write that does the same job without actually
-- * closing the file. Companion function to tmp_file_begin_read below.
-+ * Marks the end of file writing. Adds a size_t 0 to mark the end of
-+ * the file. Companion function to tmp_file_begin_read below.
- * Returns 0 on success, a negative number on failure.
- */
- int tmp_file_end_write(tmp_file_t *tmp);
-
- /*
-- * An alternative to tmp_file_open_read but works on an open file.
-+ * Prepares the file for reading.
- * Companion function to tmp_file_end_write above.
- * Returns 0 on success, a negative number on failure.
- */
--int tmp_file_begin_read(tmp_file_t *tmp, bam1_t *inbam);
-+int tmp_file_begin_read(tmp_file_t *tmp);
-
- /*
-- * Read the next alignment, either from memory or from disk.
-+ * Read the next alignment, either from memory or from a file.
- * Returns size of entry on success, 0 on end of file or a negative on error.
- */
- int tmp_file_read(tmp_file_t *tmp, bam1_t *inbam);
-
-
- /*
-- * Frees up memory, closes the file and optionally deletes it. Giving this function
-- * pointer to the bam1_t structure used for reading will set its data value to null,
-- * preventing bam_destroy1() from trying to free already freed memory.
-- * Returns 0 on success, a negative number or EOF on failure.
-+ * Frees up memory, closes the file and deletes it.
-+ * Returns 0 on success or EOF on failure.
- */
--int tmp_file_destroy(tmp_file_t *tmp, bam1_t *inbam, int delete);
-+int tmp_file_destroy(tmp_file_t *tmp);
-
- #ifdef __cplusplus
- }
---- python-pysam.orig/samtools/version.h
-+++ python-pysam/samtools/version.h
-@@ -1 +1 @@
--#define SAMTOOLS_VERSION "1.9"
-+#define SAMTOOLS_VERSION "1.10"
---- python-pysam.orig/samtools/win32/xcurses.h
-+++ /dev/null
-@@ -1,1377 +0,0 @@
--/* Public Domain Curses */
--
--/* $Id: curses.h,v 1.295 2008/07/15 17:13:25 wmcbrine Exp $ */
--
--/*----------------------------------------------------------------------*
-- * PDCurses *
-- *----------------------------------------------------------------------*/
--
--#ifndef __PDCURSES__
--#define __PDCURSES__ 1
--
--/*man-start**************************************************************
--
--PDCurses definitions list: (Only define those needed)
--
-- XCURSES True if compiling for X11.
-- PDC_RGB True if you want to use RGB color definitions
-- (Red = 1, Green = 2, Blue = 4) instead of BGR.
-- PDC_WIDE True if building wide-character support.
-- PDC_DLL_BUILD True if building a Win32 DLL.
-- NCURSES_MOUSE_VERSION Use the ncurses mouse API instead
-- of PDCurses' traditional mouse API.
--
--PDCurses portable platform definitions list:
--
-- PDC_BUILD Defines API build version.
-- PDCURSES Enables access to PDCurses-only routines.
-- XOPEN Always true.
-- SYSVcurses True if you are compiling for SYSV portability.
-- BSDcurses True if you are compiling for BSD portability.
--
--**man-end****************************************************************/
--
--#define PDC_BUILD 3401
--#define PDCURSES 1 /* PDCurses-only routines */
--#define XOPEN 1 /* X/Open Curses routines */
--#define SYSVcurses 1 /* System V Curses routines */
--#define BSDcurses 1 /* BSD Curses routines */
--#define CHTYPE_LONG 1 /* size of chtype; long */
--
--/*----------------------------------------------------------------------*/
--
--#include <stdarg.h>
--#include <stddef.h>
--#include <stdio.h> /* Required by X/Open usage below */
--
--#ifdef PDC_WIDE
--# include <wchar.h>
--#endif
--
--#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS)
--extern "C"
--{
--# define bool _bool
--#endif
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses Manifest Constants
-- *
-- */
--
--#ifndef FALSE
--# define FALSE 0
--#endif
--#ifndef TRUE
--# define TRUE 1
--#endif
--#ifndef NULL
--# define NULL (void *)0
--#endif
--#ifndef ERR
--# define ERR (-1)
--#endif
--#ifndef OK
--# define OK 0
--#endif
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses Type Declarations
-- *
-- */
--
--typedef unsigned char bool; /* PDCurses Boolean type */
--
--#ifdef CHTYPE_LONG
--# if _LP64
--typedef unsigned int chtype;
--# else
--typedef unsigned long chtype; /* 16-bit attr + 16-bit char */
--# endif
--#else
--typedef unsigned short chtype; /* 8-bit attr + 8-bit char */
--#endif
--
--#ifdef PDC_WIDE
--typedef chtype cchar_t;
--#endif
--
--typedef chtype attr_t;
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses Mouse Interface -- SYSVR4, with extensions
-- *
-- */
--
--typedef struct
--{
-- int x; /* absolute column, 0 based, measured in characters */
-- int y; /* absolute row, 0 based, measured in characters */
-- short button[3]; /* state of each button */
-- int changes; /* flags indicating what has changed with the mouse */
--} MOUSE_STATUS;
--
--#define BUTTON_RELEASED 0x0000
--#define BUTTON_PRESSED 0x0001
--#define BUTTON_CLICKED 0x0002
--#define BUTTON_DOUBLE_CLICKED 0x0003
--#define BUTTON_TRIPLE_CLICKED 0x0004
--#define BUTTON_MOVED 0x0005 /* PDCurses */
--#define WHEEL_SCROLLED 0x0006 /* PDCurses */
--#define BUTTON_ACTION_MASK 0x0007 /* PDCurses */
--
--#define PDC_BUTTON_SHIFT 0x0008 /* PDCurses */
--#define PDC_BUTTON_CONTROL 0x0010 /* PDCurses */
--#define PDC_BUTTON_ALT 0x0020 /* PDCurses */
--#define BUTTON_MODIFIER_MASK 0x0038 /* PDCurses */
--
--#define MOUSE_X_POS (Mouse_status.x)
--#define MOUSE_Y_POS (Mouse_status.y)
--
--/*
-- * Bits associated with the .changes field:
-- * 3 2 1 0
-- * 210987654321098765432109876543210
-- * 1 <- button 1 has changed
-- * 10 <- button 2 has changed
-- * 100 <- button 3 has changed
-- * 1000 <- mouse has moved
-- * 10000 <- mouse position report
-- * 100000 <- mouse wheel up
-- * 1000000 <- mouse wheel down
-- */
--
--#define PDC_MOUSE_MOVED 0x0008
--#define PDC_MOUSE_POSITION 0x0010
--#define PDC_MOUSE_WHEEL_UP 0x0020
--#define PDC_MOUSE_WHEEL_DOWN 0x0040
--
--#define A_BUTTON_CHANGED (Mouse_status.changes & 7)
--#define MOUSE_MOVED (Mouse_status.changes & PDC_MOUSE_MOVED)
--#define MOUSE_POS_REPORT (Mouse_status.changes & PDC_MOUSE_POSITION)
--#define BUTTON_CHANGED(x) (Mouse_status.changes & (1 << ((x) - 1)))
--#define BUTTON_STATUS(x) (Mouse_status.button[(x) - 1])
--#define MOUSE_WHEEL_UP (Mouse_status.changes & PDC_MOUSE_WHEEL_UP)
--#define MOUSE_WHEEL_DOWN (Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN)
--
--/* mouse bit-masks */
--
--#define BUTTON1_RELEASED 0x00000001L
--#define BUTTON1_PRESSED 0x00000002L
--#define BUTTON1_CLICKED 0x00000004L
--#define BUTTON1_DOUBLE_CLICKED 0x00000008L
--#define BUTTON1_TRIPLE_CLICKED 0x00000010L
--#define BUTTON1_MOVED 0x00000010L /* PDCurses */
--
--#define BUTTON2_RELEASED 0x00000020L
--#define BUTTON2_PRESSED 0x00000040L
--#define BUTTON2_CLICKED 0x00000080L
--#define BUTTON2_DOUBLE_CLICKED 0x00000100L
--#define BUTTON2_TRIPLE_CLICKED 0x00000200L
--#define BUTTON2_MOVED 0x00000200L /* PDCurses */
--
--#define BUTTON3_RELEASED 0x00000400L
--#define BUTTON3_PRESSED 0x00000800L
--#define BUTTON3_CLICKED 0x00001000L
--#define BUTTON3_DOUBLE_CLICKED 0x00002000L
--#define BUTTON3_TRIPLE_CLICKED 0x00004000L
--#define BUTTON3_MOVED 0x00004000L /* PDCurses */
--
--/* For the ncurses-compatible functions only, BUTTON4_PRESSED and
-- BUTTON5_PRESSED are returned for mouse scroll wheel up and down;
-- otherwise PDCurses doesn't support buttons 4 and 5 */
--
--#define BUTTON4_RELEASED 0x00008000L
--#define BUTTON4_PRESSED 0x00010000L
--#define BUTTON4_CLICKED 0x00020000L
--#define BUTTON4_DOUBLE_CLICKED 0x00040000L
--#define BUTTON4_TRIPLE_CLICKED 0x00080000L
--
--#define BUTTON5_RELEASED 0x00100000L
--#define BUTTON5_PRESSED 0x00200000L
--#define BUTTON5_CLICKED 0x00400000L
--#define BUTTON5_DOUBLE_CLICKED 0x00800000L
--#define BUTTON5_TRIPLE_CLICKED 0x01000000L
--
--#define MOUSE_WHEEL_SCROLL 0x02000000L /* PDCurses */
--#define BUTTON_MODIFIER_SHIFT 0x04000000L /* PDCurses */
--#define BUTTON_MODIFIER_CONTROL 0x08000000L /* PDCurses */
--#define BUTTON_MODIFIER_ALT 0x10000000L /* PDCurses */
--
--#define ALL_MOUSE_EVENTS 0x1fffffffL
--#define REPORT_MOUSE_POSITION 0x20000000L
--
--/* ncurses mouse interface */
--
--typedef unsigned long mmask_t;
--
--typedef struct
--{
-- short id; /* unused, always 0 */
-- int x, y, z; /* x, y same as MOUSE_STATUS; z unused */
-- mmask_t bstate; /* equivalent to changes + button[], but
-- in the same format as used for mousemask() */
--} MEVENT;
--
--#ifdef NCURSES_MOUSE_VERSION
--# define BUTTON_SHIFT BUTTON_MODIFIER_SHIFT
--# define BUTTON_CONTROL BUTTON_MODIFIER_CONTROL
--# define BUTTON_CTRL BUTTON_MODIFIER_CONTROL
--# define BUTTON_ALT BUTTON_MODIFIER_ALT
--#else
--# define BUTTON_SHIFT PDC_BUTTON_SHIFT
--# define BUTTON_CONTROL PDC_BUTTON_CONTROL
--# define BUTTON_ALT PDC_BUTTON_ALT
--#endif
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses Structure Definitions
-- *
-- */
--
--typedef struct _win /* definition of a window */
--{
-- int _cury; /* current pseudo-cursor */
-- int _curx;
-- int _maxy; /* max window coordinates */
-- int _maxx;
-- int _begy; /* origin on screen */
-- int _begx;
-- int _flags; /* window properties */
-- chtype _attrs; /* standard attributes and colors */
-- chtype _bkgd; /* background, normally blank */
-- bool _clear; /* causes clear at next refresh */
-- bool _leaveit; /* leaves cursor where it is */
-- bool _scroll; /* allows window scrolling */
-- bool _nodelay; /* input character wait flag */
-- bool _immed; /* immediate update flag */
-- bool _sync; /* synchronise window ancestors */
-- bool _use_keypad; /* flags keypad key mode active */
-- chtype **_y; /* pointer to line pointer array */
-- int *_firstch; /* first changed character in line */
-- int *_lastch; /* last changed character in line */
-- int _tmarg; /* top of scrolling region */
-- int _bmarg; /* bottom of scrolling region */
-- int _delayms; /* milliseconds of delay for getch() */
-- int _parx, _pary; /* coords relative to parent (0,0) */
-- struct _win *_parent; /* subwin's pointer to parent win */
--} WINDOW;
--
--/* Avoid using the SCREEN struct directly -- use the corresponding
-- functions if possible. This struct may eventually be made private. */
--
--typedef struct
--{
-- bool alive; /* if initscr() called, and not endwin() */
-- bool autocr; /* if cr -> lf */
-- bool cbreak; /* if terminal unbuffered */
-- bool echo; /* if terminal echo */
-- bool raw_inp; /* raw input mode (v. cooked input) */
-- bool raw_out; /* raw output mode (7 v. 8 bits) */
-- bool audible; /* FALSE if the bell is visual */
-- bool mono; /* TRUE if current screen is mono */
-- bool resized; /* TRUE if TERM has been resized */
-- bool orig_attr; /* TRUE if we have the original colors */
-- short orig_fore; /* original screen foreground color */
-- short orig_back; /* original screen foreground color */
-- int cursrow; /* position of physical cursor */
-- int curscol; /* position of physical cursor */
-- int visibility; /* visibility of cursor */
-- int orig_cursor; /* original cursor size */
-- int lines; /* new value for LINES */
-- int cols; /* new value for COLS */
-- unsigned long _trap_mbe; /* trap these mouse button events */
-- unsigned long _map_mbe_to_key; /* map mouse buttons to slk */
-- int mouse_wait; /* time to wait (in ms) for a
-- button release after a press, in
-- order to count it as a click */
-- int slklines; /* lines in use by slk_init() */
-- WINDOW *slk_winptr; /* window for slk */
-- int linesrippedoff; /* lines ripped off via ripoffline() */
-- int linesrippedoffontop; /* lines ripped off on
-- top via ripoffline() */
-- int delaytenths; /* 1/10ths second to wait block
-- getch() for */
-- bool _preserve; /* TRUE if screen background
-- to be preserved */
-- int _restore; /* specifies if screen background
-- to be restored, and how */
-- bool save_key_modifiers; /* TRUE if each key modifiers saved
-- with each key press */
-- bool return_key_modifiers; /* TRUE if modifier keys are
-- returned as "real" keys */
-- bool key_code; /* TRUE if last key is a special key;
-- used internally by get_wch() */
--#ifdef XCURSES
-- int XcurscrSize; /* size of Xcurscr shared memory block */
-- bool sb_on;
-- int sb_viewport_y;
-- int sb_viewport_x;
-- int sb_total_y;
-- int sb_total_x;
-- int sb_cur_y;
-- int sb_cur_x;
--#endif
-- short line_color; /* color of line attributes - default -1 */
--} SCREEN;
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses External Variables
-- *
-- */
--
--#ifdef PDC_DLL_BUILD
--# ifdef CURSES_LIBRARY
--# define PDCEX __declspec(dllexport) extern
--# else
--# define PDCEX __declspec(dllimport)
--# endif
--#else
--# define PDCEX extern
--#endif
--
--PDCEX int LINES; /* terminal height */
--PDCEX int COLS; /* terminal width */
--PDCEX WINDOW *stdscr; /* the default screen window */
--PDCEX WINDOW *curscr; /* the current screen image */
--PDCEX SCREEN *SP; /* curses variables */
--PDCEX MOUSE_STATUS Mouse_status;
--PDCEX int COLORS;
--PDCEX int COLOR_PAIRS;
--PDCEX int TABSIZE;
--PDCEX chtype acs_map[]; /* alternate character set map */
--PDCEX char ttytype[]; /* terminal name/description */
--
--/*man-start**************************************************************
--
--PDCurses Text Attributes
--========================
--
--Originally, PDCurses used a short (16 bits) for its chtype. To include
--color, a number of things had to be sacrificed from the strict Unix and
--System V support. The main problem was fitting all character attributes
--and color into an unsigned char (all 8 bits!).
--
--Today, PDCurses by default uses a long (32 bits) for its chtype, as in
--System V. The short chtype is still available, by undefining CHTYPE_LONG
--and rebuilding the library.
--
--The following is the structure of a win->_attrs chtype:
--
--short form:
--
---------------------------------------------------
--|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
---------------------------------------------------
-- color number | attrs | character eg 'a'
--
--The available non-color attributes are bold, reverse and blink. Others
--have no effect. The high order char is an index into an array of
--physical colors (defined in color.c) -- 32 foreground/background color
--pairs (5 bits) plus 3 bits for other attributes.
--
--long form:
--
------------------------------------------------------------------------------
--|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|..| 3| 2| 1| 0|
------------------------------------------------------------------------------
-- color number | modifiers | character eg 'a'
--
--The available non-color attributes are bold, underline, invisible,
--right-line, left-line, protect, reverse and blink. 256 color pairs (8
--bits), 8 bits for other attributes, and 16 bits for character data.
--
--**man-end****************************************************************/
--
--/*** Video attribute macros ***/
--
--#define A_NORMAL (chtype)0
--
--#ifdef CHTYPE_LONG
--# define A_ALTCHARSET (chtype)0x00010000
--# define A_RIGHTLINE (chtype)0x00020000
--# define A_LEFTLINE (chtype)0x00040000
--# define A_INVIS (chtype)0x00080000
--# define A_UNDERLINE (chtype)0x00100000
--# define A_REVERSE (chtype)0x00200000
--# define A_BLINK (chtype)0x00400000
--# define A_BOLD (chtype)0x00800000
--
--# define A_ATTRIBUTES (chtype)0xffff0000
--# define A_CHARTEXT (chtype)0x0000ffff
--# define A_COLOR (chtype)0xff000000
--
--# define A_ITALIC A_INVIS
--# define A_PROTECT (A_UNDERLINE | A_LEFTLINE | A_RIGHTLINE)
--
--# define PDC_ATTR_SHIFT 19
--# define PDC_COLOR_SHIFT 24
--#else
--# define A_BOLD (chtype)0x0100 /* X/Open */
--# define A_REVERSE (chtype)0x0200 /* X/Open */
--# define A_BLINK (chtype)0x0400 /* X/Open */
--
--# define A_ATTRIBUTES (chtype)0xff00 /* X/Open */
--# define A_CHARTEXT (chtype)0x00ff /* X/Open */
--# define A_COLOR (chtype)0xf800 /* System V */
--
--# define A_ALTCHARSET A_NORMAL /* X/Open */
--# define A_PROTECT A_NORMAL /* X/Open */
--# define A_UNDERLINE A_NORMAL /* X/Open */
--
--# define A_LEFTLINE A_NORMAL
--# define A_RIGHTLINE A_NORMAL
--# define A_ITALIC A_NORMAL
--# define A_INVIS A_NORMAL
--
--# define PDC_ATTR_SHIFT 8
--# define PDC_COLOR_SHIFT 11
--#endif
--
--#define A_STANDOUT (A_REVERSE | A_BOLD) /* X/Open */
--#define A_DIM A_NORMAL
--
--#define CHR_MSK A_CHARTEXT /* Obsolete */
--#define ATR_MSK A_ATTRIBUTES /* Obsolete */
--#define ATR_NRM A_NORMAL /* Obsolete */
--
--/* For use with attr_t -- X/Open says, "these shall be distinct", so
-- this is a non-conforming implementation. */
--
--#define WA_ALTCHARSET A_ALTCHARSET
--#define WA_BLINK A_BLINK
--#define WA_BOLD A_BOLD
--#define WA_DIM A_DIM
--#define WA_INVIS A_INVIS
--#define WA_LEFT A_LEFTLINE
--#define WA_PROTECT A_PROTECT
--#define WA_REVERSE A_REVERSE
--#define WA_RIGHT A_RIGHTLINE
--#define WA_STANDOUT A_STANDOUT
--#define WA_UNDERLINE A_UNDERLINE
--
--#define WA_HORIZONTAL A_NORMAL
--#define WA_LOW A_NORMAL
--#define WA_TOP A_NORMAL
--#define WA_VERTICAL A_NORMAL
--
--/*** Alternate character set macros ***/
--
--/* 'w' = 32-bit chtype; acs_map[] index | A_ALTCHARSET
-- 'n' = 16-bit chtype; it gets the fallback set because no bit is
-- available for A_ALTCHARSET */
--
--#ifdef CHTYPE_LONG
--# define ACS_PICK(w, n) ((chtype)w | A_ALTCHARSET)
--#else
--# define ACS_PICK(w, n) ((chtype)n)
--#endif
--
--/* VT100-compatible symbols -- box chars */
--
--#define ACS_ULCORNER ACS_PICK('l', '+')
--#define ACS_LLCORNER ACS_PICK('m', '+')
--#define ACS_URCORNER ACS_PICK('k', '+')
--#define ACS_LRCORNER ACS_PICK('j', '+')
--#define ACS_RTEE ACS_PICK('u', '+')
--#define ACS_LTEE ACS_PICK('t', '+')
--#define ACS_BTEE ACS_PICK('v', '+')
--#define ACS_TTEE ACS_PICK('w', '+')
--#define ACS_HLINE ACS_PICK('q', '-')
--#define ACS_VLINE ACS_PICK('x', '|')
--#define ACS_PLUS ACS_PICK('n', '+')
--
--/* VT100-compatible symbols -- other */
--
--#define ACS_S1 ACS_PICK('o', '-')
--#define ACS_S9 ACS_PICK('s', '_')
--#define ACS_DIAMOND ACS_PICK('`', '+')
--#define ACS_CKBOARD ACS_PICK('a', ':')
--#define ACS_DEGREE ACS_PICK('f', '\'')
--#define ACS_PLMINUS ACS_PICK('g', '#')
--#define ACS_BULLET ACS_PICK('~', 'o')
--
--/* Teletype 5410v1 symbols -- these are defined in SysV curses, but
-- are not well-supported by most terminals. Stick to VT100 characters
-- for optimum portability. */
--
--#define ACS_LARROW ACS_PICK(',', '<')
--#define ACS_RARROW ACS_PICK('+', '>')
--#define ACS_DARROW ACS_PICK('.', 'v')
--#define ACS_UARROW ACS_PICK('-', '^')
--#define ACS_BOARD ACS_PICK('h', '#')
--#define ACS_LANTERN ACS_PICK('i', '*')
--#define ACS_BLOCK ACS_PICK('0', '#')
--
--/* That goes double for these -- undocumented SysV symbols. Don't use
-- them. */
--
--#define ACS_S3 ACS_PICK('p', '-')
--#define ACS_S7 ACS_PICK('r', '-')
--#define ACS_LEQUAL ACS_PICK('y', '<')
--#define ACS_GEQUAL ACS_PICK('z', '>')
--#define ACS_PI ACS_PICK('{', 'n')
--#define ACS_NEQUAL ACS_PICK('|', '+')
--#define ACS_STERLING ACS_PICK('}', 'L')
--
--/* Box char aliases */
--
--#define ACS_BSSB ACS_ULCORNER
--#define ACS_SSBB ACS_LLCORNER
--#define ACS_BBSS ACS_URCORNER
--#define ACS_SBBS ACS_LRCORNER
--#define ACS_SBSS ACS_RTEE
--#define ACS_SSSB ACS_LTEE
--#define ACS_SSBS ACS_BTEE
--#define ACS_BSSS ACS_TTEE
--#define ACS_BSBS ACS_HLINE
--#define ACS_SBSB ACS_VLINE
--#define ACS_SSSS ACS_PLUS
--
--/* cchar_t aliases */
--
--#ifdef PDC_WIDE
--# define WACS_ULCORNER (&(acs_map['l']))
--# define WACS_LLCORNER (&(acs_map['m']))
--# define WACS_URCORNER (&(acs_map['k']))
--# define WACS_LRCORNER (&(acs_map['j']))
--# define WACS_RTEE (&(acs_map['u']))
--# define WACS_LTEE (&(acs_map['t']))
--# define WACS_BTEE (&(acs_map['v']))
--# define WACS_TTEE (&(acs_map['w']))
--# define WACS_HLINE (&(acs_map['q']))
--# define WACS_VLINE (&(acs_map['x']))
--# define WACS_PLUS (&(acs_map['n']))
--
--# define WACS_S1 (&(acs_map['o']))
--# define WACS_S9 (&(acs_map['s']))
--# define WACS_DIAMOND (&(acs_map['`']))
--# define WACS_CKBOARD (&(acs_map['a']))
--# define WACS_DEGREE (&(acs_map['f']))
--# define WACS_PLMINUS (&(acs_map['g']))
--# define WACS_BULLET (&(acs_map['~']))
--
--# define WACS_LARROW (&(acs_map[',']))
--# define WACS_RARROW (&(acs_map['+']))
--# define WACS_DARROW (&(acs_map['.']))
--# define WACS_UARROW (&(acs_map['-']))
--# define WACS_BOARD (&(acs_map['h']))
--# define WACS_LANTERN (&(acs_map['i']))
--# define WACS_BLOCK (&(acs_map['0']))
--
--# define WACS_S3 (&(acs_map['p']))
--# define WACS_S7 (&(acs_map['r']))
--# define WACS_LEQUAL (&(acs_map['y']))
--# define WACS_GEQUAL (&(acs_map['z']))
--# define WACS_PI (&(acs_map['{']))
--# define WACS_NEQUAL (&(acs_map['|']))
--# define WACS_STERLING (&(acs_map['}']))
--
--# define WACS_BSSB WACS_ULCORNER
--# define WACS_SSBB WACS_LLCORNER
--# define WACS_BBSS WACS_URCORNER
--# define WACS_SBBS WACS_LRCORNER
--# define WACS_SBSS WACS_RTEE
--# define WACS_SSSB WACS_LTEE
--# define WACS_SSBS WACS_BTEE
--# define WACS_BSSS WACS_TTEE
--# define WACS_BSBS WACS_HLINE
--# define WACS_SBSB WACS_VLINE
--# define WACS_SSSS WACS_PLUS
--#endif
--
--/*** Color macros ***/
--
--#define COLOR_BLACK 0
--
--#ifdef PDC_RGB /* RGB */
--# define COLOR_RED 1
--# define COLOR_GREEN 2
--# define COLOR_BLUE 4
--#else /* BGR */
--# define COLOR_BLUE 1
--# define COLOR_GREEN 2
--# define COLOR_RED 4
--#endif
--
--#define COLOR_CYAN (COLOR_BLUE | COLOR_GREEN)
--#define COLOR_MAGENTA (COLOR_RED | COLOR_BLUE)
--#define COLOR_YELLOW (COLOR_RED | COLOR_GREEN)
--
--#define COLOR_WHITE 7
--
--/*----------------------------------------------------------------------
-- *
-- * Function and Keypad Key Definitions.
-- * Many are just for compatibility.
-- *
-- */
--
--#define KEY_CODE_YES 0x100 /* If get_wch() gives a key code */
--
--#define KEY_BREAK 0x101 /* Not on PC KBD */
--#define KEY_DOWN 0x102 /* Down arrow key */
--#define KEY_UP 0x103 /* Up arrow key */
--#define KEY_LEFT 0x104 /* Left arrow key */
--#define KEY_RIGHT 0x105 /* Right arrow key */
--#define KEY_HOME 0x106 /* home key */
--#define KEY_BACKSPACE 0x107 /* not on pc */
--#define KEY_F0 0x108 /* function keys; 64 reserved */
--
--#define KEY_DL 0x148 /* delete line */
--#define KEY_IL 0x149 /* insert line */
--#define KEY_DC 0x14a /* delete character */
--#define KEY_IC 0x14b /* insert char or enter ins mode */
--#define KEY_EIC 0x14c /* exit insert char mode */
--#define KEY_CLEAR 0x14d /* clear screen */
--#define KEY_EOS 0x14e /* clear to end of screen */
--#define KEY_EOL 0x14f /* clear to end of line */
--#define KEY_SF 0x150 /* scroll 1 line forward */
--#define KEY_SR 0x151 /* scroll 1 line back (reverse) */
--#define KEY_NPAGE 0x152 /* next page */
--#define KEY_PPAGE 0x153 /* previous page */
--#define KEY_STAB 0x154 /* set tab */
--#define KEY_CTAB 0x155 /* clear tab */
--#define KEY_CATAB 0x156 /* clear all tabs */
--#define KEY_ENTER 0x157 /* enter or send (unreliable) */
--#define KEY_SRESET 0x158 /* soft/reset (partial/unreliable) */
--#define KEY_RESET 0x159 /* reset/hard reset (unreliable) */
--#define KEY_PRINT 0x15a /* print/copy */
--#define KEY_LL 0x15b /* home down/bottom (lower left) */
--#define KEY_ABORT 0x15c /* abort/terminate key (any) */
--#define KEY_SHELP 0x15d /* short help */
--#define KEY_LHELP 0x15e /* long help */
--#define KEY_BTAB 0x15f /* Back tab key */
--#define KEY_BEG 0x160 /* beg(inning) key */
--#define KEY_CANCEL 0x161 /* cancel key */
--#define KEY_CLOSE 0x162 /* close key */
--#define KEY_COMMAND 0x163 /* cmd (command) key */
--#define KEY_COPY 0x164 /* copy key */
--#define KEY_CREATE 0x165 /* create key */
--#define KEY_END 0x166 /* end key */
--#define KEY_EXIT 0x167 /* exit key */
--#define KEY_FIND 0x168 /* find key */
--#define KEY_HELP 0x169 /* help key */
--#define KEY_MARK 0x16a /* mark key */
--#define KEY_MESSAGE 0x16b /* message key */
--#define KEY_MOVE 0x16c /* move key */
--#define KEY_NEXT 0x16d /* next object key */
--#define KEY_OPEN 0x16e /* open key */
--#define KEY_OPTIONS 0x16f /* options key */
--#define KEY_PREVIOUS 0x170 /* previous object key */
--#define KEY_REDO 0x171 /* redo key */
--#define KEY_REFERENCE 0x172 /* ref(erence) key */
--#define KEY_REFRESH 0x173 /* refresh key */
--#define KEY_REPLACE 0x174 /* replace key */
--#define KEY_RESTART 0x175 /* restart key */
--#define KEY_RESUME 0x176 /* resume key */
--#define KEY_SAVE 0x177 /* save key */
--#define KEY_SBEG 0x178 /* shifted beginning key */
--#define KEY_SCANCEL 0x179 /* shifted cancel key */
--#define KEY_SCOMMAND 0x17a /* shifted command key */
--#define KEY_SCOPY 0x17b /* shifted copy key */
--#define KEY_SCREATE 0x17c /* shifted create key */
--#define KEY_SDC 0x17d /* shifted delete char key */
--#define KEY_SDL 0x17e /* shifted delete line key */
--#define KEY_SELECT 0x17f /* select key */
--#define KEY_SEND 0x180 /* shifted end key */
--#define KEY_SEOL 0x181 /* shifted clear line key */
--#define KEY_SEXIT 0x182 /* shifted exit key */
--#define KEY_SFIND 0x183 /* shifted find key */
--#define KEY_SHOME 0x184 /* shifted home key */
--#define KEY_SIC 0x185 /* shifted input key */
--
--#define KEY_SLEFT 0x187 /* shifted left arrow key */
--#define KEY_SMESSAGE 0x188 /* shifted message key */
--#define KEY_SMOVE 0x189 /* shifted move key */
--#define KEY_SNEXT 0x18a /* shifted next key */
--#define KEY_SOPTIONS 0x18b /* shifted options key */
--#define KEY_SPREVIOUS 0x18c /* shifted prev key */
--#define KEY_SPRINT 0x18d /* shifted print key */
--#define KEY_SREDO 0x18e /* shifted redo key */
--#define KEY_SREPLACE 0x18f /* shifted replace key */
--#define KEY_SRIGHT 0x190 /* shifted right arrow */
--#define KEY_SRSUME 0x191 /* shifted resume key */
--#define KEY_SSAVE 0x192 /* shifted save key */
--#define KEY_SSUSPEND 0x193 /* shifted suspend key */
--#define KEY_SUNDO 0x194 /* shifted undo key */
--#define KEY_SUSPEND 0x195 /* suspend key */
--#define KEY_UNDO 0x196 /* undo key */
--
--/* PDCurses-specific key definitions -- PC only */
--
--#define ALT_0 0x197
--#define ALT_1 0x198
--#define ALT_2 0x199
--#define ALT_3 0x19a
--#define ALT_4 0x19b
--#define ALT_5 0x19c
--#define ALT_6 0x19d
--#define ALT_7 0x19e
--#define ALT_8 0x19f
--#define ALT_9 0x1a0
--#define ALT_A 0x1a1
--#define ALT_B 0x1a2
--#define ALT_C 0x1a3
--#define ALT_D 0x1a4
--#define ALT_E 0x1a5
--#define ALT_F 0x1a6
--#define ALT_G 0x1a7
--#define ALT_H 0x1a8
--#define ALT_I 0x1a9
--#define ALT_J 0x1aa
--#define ALT_K 0x1ab
--#define ALT_L 0x1ac
--#define ALT_M 0x1ad
--#define ALT_N 0x1ae
--#define ALT_O 0x1af
--#define ALT_P 0x1b0
--#define ALT_Q 0x1b1
--#define ALT_R 0x1b2
--#define ALT_S 0x1b3
--#define ALT_T 0x1b4
--#define ALT_U 0x1b5
--#define ALT_V 0x1b6
--#define ALT_W 0x1b7
--#define ALT_X 0x1b8
--#define ALT_Y 0x1b9
--#define ALT_Z 0x1ba
--
--#define CTL_LEFT 0x1bb /* Control-Left-Arrow */
--#define CTL_RIGHT 0x1bc
--#define CTL_PGUP 0x1bd
--#define CTL_PGDN 0x1be
--#define CTL_HOME 0x1bf
--#define CTL_END 0x1c0
--
--#define KEY_A1 0x1c1 /* upper left on Virtual keypad */
--#define KEY_A2 0x1c2 /* upper middle on Virt. keypad */
--#define KEY_A3 0x1c3 /* upper right on Vir. keypad */
--#define KEY_B1 0x1c4 /* middle left on Virt. keypad */
--#define KEY_B2 0x1c5 /* center on Virt. keypad */
--#define KEY_B3 0x1c6 /* middle right on Vir. keypad */
--#define KEY_C1 0x1c7 /* lower left on Virt. keypad */
--#define KEY_C2 0x1c8 /* lower middle on Virt. keypad */
--#define KEY_C3 0x1c9 /* lower right on Vir. keypad */
--
--#define PADSLASH 0x1ca /* slash on keypad */
--#define PADENTER 0x1cb /* enter on keypad */
--#define CTL_PADENTER 0x1cc /* ctl-enter on keypad */
--#define ALT_PADENTER 0x1cd /* alt-enter on keypad */
--#define PADSTOP 0x1ce /* stop on keypad */
--#define PADSTAR 0x1cf /* star on keypad */
--#define PADMINUS 0x1d0 /* minus on keypad */
--#define PADPLUS 0x1d1 /* plus on keypad */
--#define CTL_PADSTOP 0x1d2 /* ctl-stop on keypad */
--#define CTL_PADCENTER 0x1d3 /* ctl-enter on keypad */
--#define CTL_PADPLUS 0x1d4 /* ctl-plus on keypad */
--#define CTL_PADMINUS 0x1d5 /* ctl-minus on keypad */
--#define CTL_PADSLASH 0x1d6 /* ctl-slash on keypad */
--#define CTL_PADSTAR 0x1d7 /* ctl-star on keypad */
--#define ALT_PADPLUS 0x1d8 /* alt-plus on keypad */
--#define ALT_PADMINUS 0x1d9 /* alt-minus on keypad */
--#define ALT_PADSLASH 0x1da /* alt-slash on keypad */
--#define ALT_PADSTAR 0x1db /* alt-star on keypad */
--#define ALT_PADSTOP 0x1dc /* alt-stop on keypad */
--#define CTL_INS 0x1dd /* ctl-insert */
--#define ALT_DEL 0x1de /* alt-delete */
--#define ALT_INS 0x1df /* alt-insert */
--#define CTL_UP 0x1e0 /* ctl-up arrow */
--#define CTL_DOWN 0x1e1 /* ctl-down arrow */
--#define CTL_TAB 0x1e2 /* ctl-tab */
--#define ALT_TAB 0x1e3
--#define ALT_MINUS 0x1e4
--#define ALT_EQUAL 0x1e5
--#define ALT_HOME 0x1e6
--#define ALT_PGUP 0x1e7
--#define ALT_PGDN 0x1e8
--#define ALT_END 0x1e9
--#define ALT_UP 0x1ea /* alt-up arrow */
--#define ALT_DOWN 0x1eb /* alt-down arrow */
--#define ALT_RIGHT 0x1ec /* alt-right arrow */
--#define ALT_LEFT 0x1ed /* alt-left arrow */
--#define ALT_ENTER 0x1ee /* alt-enter */
--#define ALT_ESC 0x1ef /* alt-escape */
--#define ALT_BQUOTE 0x1f0 /* alt-back quote */
--#define ALT_LBRACKET 0x1f1 /* alt-left bracket */
--#define ALT_RBRACKET 0x1f2 /* alt-right bracket */
--#define ALT_SEMICOLON 0x1f3 /* alt-semi-colon */
--#define ALT_FQUOTE 0x1f4 /* alt-forward quote */
--#define ALT_COMMA 0x1f5 /* alt-comma */
--#define ALT_STOP 0x1f6 /* alt-stop */
--#define ALT_FSLASH 0x1f7 /* alt-forward slash */
--#define ALT_BKSP 0x1f8 /* alt-backspace */
--#define CTL_BKSP 0x1f9 /* ctl-backspace */
--#define PAD0 0x1fa /* keypad 0 */
--
--#define CTL_PAD0 0x1fb /* ctl-keypad 0 */
--#define CTL_PAD1 0x1fc
--#define CTL_PAD2 0x1fd
--#define CTL_PAD3 0x1fe
--#define CTL_PAD4 0x1ff
--#define CTL_PAD5 0x200
--#define CTL_PAD6 0x201
--#define CTL_PAD7 0x202
--#define CTL_PAD8 0x203
--#define CTL_PAD9 0x204
--
--#define ALT_PAD0 0x205 /* alt-keypad 0 */
--#define ALT_PAD1 0x206
--#define ALT_PAD2 0x207
--#define ALT_PAD3 0x208
--#define ALT_PAD4 0x209
--#define ALT_PAD5 0x20a
--#define ALT_PAD6 0x20b
--#define ALT_PAD7 0x20c
--#define ALT_PAD8 0x20d
--#define ALT_PAD9 0x20e
--
--#define CTL_DEL 0x20f /* clt-delete */
--#define ALT_BSLASH 0x210 /* alt-back slash */
--#define CTL_ENTER 0x211 /* ctl-enter */
--
--#define SHF_PADENTER 0x212 /* shift-enter on keypad */
--#define SHF_PADSLASH 0x213 /* shift-slash on keypad */
--#define SHF_PADSTAR 0x214 /* shift-star on keypad */
--#define SHF_PADPLUS 0x215 /* shift-plus on keypad */
--#define SHF_PADMINUS 0x216 /* shift-minus on keypad */
--#define SHF_UP 0x217 /* shift-up on keypad */
--#define SHF_DOWN 0x218 /* shift-down on keypad */
--#define SHF_IC 0x219 /* shift-insert on keypad */
--#define SHF_DC 0x21a /* shift-delete on keypad */
--
--#define KEY_MOUSE 0x21b /* "mouse" key */
--#define KEY_SHIFT_L 0x21c /* Left-shift */
--#define KEY_SHIFT_R 0x21d /* Right-shift */
--#define KEY_CONTROL_L 0x21e /* Left-control */
--#define KEY_CONTROL_R 0x21f /* Right-control */
--#define KEY_ALT_L 0x220 /* Left-alt */
--#define KEY_ALT_R 0x221 /* Right-alt */
--#define KEY_RESIZE 0x222 /* Window resize */
--#define KEY_SUP 0x223 /* Shifted up arrow */
--#define KEY_SDOWN 0x224 /* Shifted down arrow */
--
--#define KEY_MIN KEY_BREAK /* Minimum curses key value */
--#define KEY_MAX KEY_SDOWN /* Maximum curses key */
--
--#define KEY_F(n) (KEY_F0 + (n))
--
--/*----------------------------------------------------------------------
-- *
-- * PDCurses Function Declarations
-- *
-- */
--
--/* Standard */
--
--int addch(const chtype);
--int addchnstr(const chtype *, int);
--int addchstr(const chtype *);
--int addnstr(const char *, int);
--int addstr(const char *);
--int attroff(chtype);
--int attron(chtype);
--int attrset(chtype);
--int attr_get(attr_t *, short *, void *);
--int attr_off(attr_t, void *);
--int attr_on(attr_t, void *);
--int attr_set(attr_t, short, void *);
--int baudrate(void);
--int beep(void);
--int bkgd(chtype);
--void bkgdset(chtype);
--int border(chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype);
--int box(WINDOW *, chtype, chtype);
--bool can_change_color(void);
--int cbreak(void);
--int chgat(int, attr_t, short, const void *);
--int clearok(WINDOW *, bool);
--int clear(void);
--int clrtobot(void);
--int clrtoeol(void);
--int color_content(short, short *, short *, short *);
--int color_set(short, void *);
--int copywin(const WINDOW *, WINDOW *, int, int, int, int, int, int, int);
--int curs_set(int);
--int def_prog_mode(void);
--int def_shell_mode(void);
--int delay_output(int);
--int delch(void);
--int deleteln(void);
--void delscreen(SCREEN *);
--int delwin(WINDOW *);
--WINDOW *derwin(WINDOW *, int, int, int, int);
--int doupdate(void);
--WINDOW *dupwin(WINDOW *);
--int echochar(const chtype);
--int echo(void);
--int endwin(void);
--char erasechar(void);
--int erase(void);
--void filter(void);
--int flash(void);
--int flushinp(void);
--chtype getbkgd(WINDOW *);
--int getnstr(char *, int);
--int getstr(char *);
--WINDOW *getwin(FILE *);
--int halfdelay(int);
--bool has_colors(void);
--bool has_ic(void);
--bool has_il(void);
--int hline(chtype, int);
--void idcok(WINDOW *, bool);
--int idlok(WINDOW *, bool);
--void immedok(WINDOW *, bool);
--int inchnstr(chtype *, int);
--int inchstr(chtype *);
--chtype inch(void);
--int init_color(short, short, short, short);
--int init_pair(short, short, short);
--WINDOW *initscr(void);
--int innstr(char *, int);
--int insch(chtype);
--int insdelln(int);
--int insertln(void);
--int insnstr(const char *, int);
--int insstr(const char *);
--int instr(char *);
--int intrflush(WINDOW *, bool);
--bool isendwin(void);
--bool is_linetouched(WINDOW *, int);
--bool is_wintouched(WINDOW *);
--char *keyname(int);
--int keypad(WINDOW *, bool);
--char killchar(void);
--int leaveok(WINDOW *, bool);
--char *longname(void);
--int meta(WINDOW *, bool);
--int move(int, int);
--int mvaddch(int, int, const chtype);
--int mvaddchnstr(int, int, const chtype *, int);
--int mvaddchstr(int, int, const chtype *);
--int mvaddnstr(int, int, const char *, int);
--int mvaddstr(int, int, const char *);
--int mvchgat(int, int, int, attr_t, short, const void *);
--int mvcur(int, int, int, int);
--int mvdelch(int, int);
--int mvderwin(WINDOW *, int, int);
--int mvgetch(int, int);
--int mvgetnstr(int, int, char *, int);
--int mvgetstr(int, int, char *);
--int mvhline(int, int, chtype, int);
--chtype mvinch(int, int);
--int mvinchnstr(int, int, chtype *, int);
--int mvinchstr(int, int, chtype *);
--int mvinnstr(int, int, char *, int);
--int mvinsch(int, int, chtype);
--int mvinsnstr(int, int, const char *, int);
--int mvinsstr(int, int, const char *);
--int mvinstr(int, int, char *);
--int mvprintw(int, int, const char *, ...);
--int mvscanw(int, int, const char *, ...);
--int mvvline(int, int, chtype, int);
--int mvwaddchnstr(WINDOW *, int, int, const chtype *, int);
--int mvwaddchstr(WINDOW *, int, int, const chtype *);
--int mvwaddch(WINDOW *, int, int, const chtype);
--int mvwaddnstr(WINDOW *, int, int, const char *, int);
--int mvwaddstr(WINDOW *, int, int, const char *);
--int mvwchgat(WINDOW *, int, int, int, attr_t, short, const void *);
--int mvwdelch(WINDOW *, int, int);
--int mvwgetch(WINDOW *, int, int);
--int mvwgetnstr(WINDOW *, int, int, char *, int);
--int mvwgetstr(WINDOW *, int, int, char *);
--int mvwhline(WINDOW *, int, int, chtype, int);
--int mvwinchnstr(WINDOW *, int, int, chtype *, int);
--int mvwinchstr(WINDOW *, int, int, chtype *);
--chtype mvwinch(WINDOW *, int, int);
--int mvwinnstr(WINDOW *, int, int, char *, int);
--int mvwinsch(WINDOW *, int, int, chtype);
--int mvwinsnstr(WINDOW *, int, int, const char *, int);
--int mvwinsstr(WINDOW *, int, int, const char *);
--int mvwinstr(WINDOW *, int, int, char *);
--int mvwin(WINDOW *, int, int);
--int mvwprintw(WINDOW *, int, int, const char *, ...);
--int mvwscanw(WINDOW *, int, int, const char *, ...);
--int mvwvline(WINDOW *, int, int, chtype, int);
--int napms(int);
--WINDOW *newpad(int, int);
--SCREEN *newterm(const char *, FILE *, FILE *);
--WINDOW *newwin(int, int, int, int);
--int nl(void);
--int nocbreak(void);
--int nodelay(WINDOW *, bool);
--int noecho(void);
--int nonl(void);
--void noqiflush(void);
--int noraw(void);
--int notimeout(WINDOW *, bool);
--int overlay(const WINDOW *, WINDOW *);
--int overwrite(const WINDOW *, WINDOW *);
--int pair_content(short, short *, short *);
--int pechochar(WINDOW *, chtype);
--int pnoutrefresh(WINDOW *, int, int, int, int, int, int);
--int prefresh(WINDOW *, int, int, int, int, int, int);
--int printw(const char *, ...);
--int putwin(WINDOW *, FILE *);
--void qiflush(void);
--int raw(void);
--int redrawwin(WINDOW *);
--int refresh(void);
--int reset_prog_mode(void);
--int reset_shell_mode(void);
--int resetty(void);
--int ripoffline(int, int (*)(WINDOW *, int));
--int savetty(void);
--int scanw(const char *, ...);
--int scr_dump(const char *);
--int scr_init(const char *);
--int scr_restore(const char *);
--int scr_set(const char *);
--int scrl(int);
--int scroll(WINDOW *);
--int scrollok(WINDOW *, bool);
--SCREEN *set_term(SCREEN *);
--int setscrreg(int, int);
--int slk_attroff(const chtype);
--int slk_attr_off(const attr_t, void *);
--int slk_attron(const chtype);
--int slk_attr_on(const attr_t, void *);
--int slk_attrset(const chtype);
--int slk_attr_set(const attr_t, short, void *);
--int slk_clear(void);
--int slk_color(short);
--int slk_init(int);
--char *slk_label(int);
--int slk_noutrefresh(void);
--int slk_refresh(void);
--int slk_restore(void);
--int slk_set(int, const char *, int);
--int slk_touch(void);
--int standend(void);
--int standout(void);
--int start_color(void);
--WINDOW *subpad(WINDOW *, int, int, int, int);
--WINDOW *subwin(WINDOW *, int, int, int, int);
--int syncok(WINDOW *, bool);
--chtype termattrs(void);
--attr_t term_attrs(void);
--char *termname(void);
--void timeout(int);
--int touchline(WINDOW *, int, int);
--int touchwin(WINDOW *);
--int typeahead(int);
--int untouchwin(WINDOW *);
--void use_env(bool);
--int vidattr(chtype);
--int vid_attr(attr_t, short, void *);
--int vidputs(chtype, int (*)(int));
--int vid_puts(attr_t, short, void *, int (*)(int));
--int vline(chtype, int);
--int vw_printw(WINDOW *, const char *, va_list);
--int vwprintw(WINDOW *, const char *, va_list);
--int vw_scanw(WINDOW *, const char *, va_list);
--int vwscanw(WINDOW *, const char *, va_list);
--int waddchnstr(WINDOW *, const chtype *, int);
--int waddchstr(WINDOW *, const chtype *);
--int waddch(WINDOW *, const chtype);
--int waddnstr(WINDOW *, const char *, int);
--int waddstr(WINDOW *, const char *);
--int wattroff(WINDOW *, chtype);
--int wattron(WINDOW *, chtype);
--int wattrset(WINDOW *, chtype);
--int wattr_get(WINDOW *, attr_t *, short *, void *);
--int wattr_off(WINDOW *, attr_t, void *);
--int wattr_on(WINDOW *, attr_t, void *);
--int wattr_set(WINDOW *, attr_t, short, void *);
--void wbkgdset(WINDOW *, chtype);
--int wbkgd(WINDOW *, chtype);
--int wborder(WINDOW *, chtype, chtype, chtype, chtype,
-- chtype, chtype, chtype, chtype);
--int wchgat(WINDOW *, int, attr_t, short, const void *);
--int wclear(WINDOW *);
--int wclrtobot(WINDOW *);
--int wclrtoeol(WINDOW *);
--int wcolor_set(WINDOW *, short, void *);
--void wcursyncup(WINDOW *);
--int wdelch(WINDOW *);
--int wdeleteln(WINDOW *);
--int wechochar(WINDOW *, const chtype);
--int werase(WINDOW *);
--int wgetch(WINDOW *);
--int wgetnstr(WINDOW *, char *, int);
--int wgetstr(WINDOW *, char *);
--int whline(WINDOW *, chtype, int);
--int winchnstr(WINDOW *, chtype *, int);
--int winchstr(WINDOW *, chtype *);
--chtype winch(WINDOW *);
--int winnstr(WINDOW *, char *, int);
--int winsch(WINDOW *, chtype);
--int winsdelln(WINDOW *, int);
--int winsertln(WINDOW *);
--int winsnstr(WINDOW *, const char *, int);
--int winsstr(WINDOW *, const char *);
--int winstr(WINDOW *, char *);
--int wmove(WINDOW *, int, int);
--int wnoutrefresh(WINDOW *);
--int wprintw(WINDOW *, const char *, ...);
--int wredrawln(WINDOW *, int, int);
--int wrefresh(WINDOW *);
--int wscanw(WINDOW *, const char *, ...);
--int wscrl(WINDOW *, int);
--int wsetscrreg(WINDOW *, int, int);
--int wstandend(WINDOW *);
--int wstandout(WINDOW *);
--void wsyncdown(WINDOW *);
--void wsyncup(WINDOW *);
--void wtimeout(WINDOW *, int);
--int wtouchln(WINDOW *, int, int, int);
--int wvline(WINDOW *, chtype, int);
--
--/* Wide-character functions */
--
--#ifdef PDC_WIDE
--int addnwstr(const wchar_t *, int);
--int addwstr(const wchar_t *);
--int add_wch(const cchar_t *);
--int add_wchnstr(const cchar_t *, int);
--int add_wchstr(const cchar_t *);
--int border_set(const cchar_t *, const cchar_t *, const cchar_t *,
-- const cchar_t *, const cchar_t *, const cchar_t *,
-- const cchar_t *, const cchar_t *);
--int box_set(WINDOW *, const cchar_t *, const cchar_t *);
--int echo_wchar(const cchar_t *);
--int erasewchar(wchar_t *);
--int getbkgrnd(cchar_t *);
--int getcchar(const cchar_t *, wchar_t *, attr_t *, short *, void *);
--int getn_wstr(wint_t *, int);
--int get_wch(wint_t *);
--int get_wstr(wint_t *);
--int hline_set(const cchar_t *, int);
--int innwstr(wchar_t *, int);
--int ins_nwstr(const wchar_t *, int);
--int ins_wch(const cchar_t *);
--int ins_wstr(const wchar_t *);
--int inwstr(wchar_t *);
--int in_wch(cchar_t *);
--int in_wchnstr(cchar_t *, int);
--int in_wchstr(cchar_t *);
--char *key_name(wchar_t);
--int killwchar(wchar_t *);
--int mvaddnwstr(int, int, const wchar_t *, int);
--int mvaddwstr(int, int, const wchar_t *);
--int mvadd_wch(int, int, const cchar_t *);
--int mvadd_wchnstr(int, int, const cchar_t *, int);
--int mvadd_wchstr(int, int, const cchar_t *);
--int mvgetn_wstr(int, int, wint_t *, int);
--int mvget_wch(int, int, wint_t *);
--int mvget_wstr(int, int, wint_t *);
--int mvhline_set(int, int, const cchar_t *, int);
--int mvinnwstr(int, int, wchar_t *, int);
--int mvins_nwstr(int, int, const wchar_t *, int);
--int mvins_wch(int, int, const cchar_t *);
--int mvins_wstr(int, int, const wchar_t *);
--int mvinwstr(int, int, wchar_t *);
--int mvin_wch(int, int, cchar_t *);
--int mvin_wchnstr(int, int, cchar_t *, int);
--int mvin_wchstr(int, int, cchar_t *);
--int mvvline_set(int, int, const cchar_t *, int);
--int mvwaddnwstr(WINDOW *, int, int, const wchar_t *, int);
--int mvwaddwstr(WINDOW *, int, int, const wchar_t *);
--int mvwadd_wch(WINDOW *, int, int, const cchar_t *);
--int mvwadd_wchnstr(WINDOW *, int, int, const cchar_t *, int);
--int mvwadd_wchstr(WINDOW *, int, int, const cchar_t *);
--int mvwgetn_wstr(WINDOW *, int, int, wint_t *, int);
--int mvwget_wch(WINDOW *, int, int, wint_t *);
--int mvwget_wstr(WINDOW *, int, int, wint_t *);
--int mvwhline_set(WINDOW *, int, int, const cchar_t *, int);
--int mvwinnwstr(WINDOW *, int, int, wchar_t *, int);
--int mvwins_nwstr(WINDOW *, int, int, const wchar_t *, int);
--int mvwins_wch(WINDOW *, int, int, const cchar_t *);
--int mvwins_wstr(WINDOW *, int, int, const wchar_t *);
--int mvwin_wch(WINDOW *, int, int, cchar_t *);
--int mvwin_wchnstr(WINDOW *, int, int, cchar_t *, int);
--int mvwin_wchstr(WINDOW *, int, int, cchar_t *);
--int mvwinwstr(WINDOW *, int, int, wchar_t *);
--int mvwvline_set(WINDOW *, int, int, const cchar_t *, int);
--int pecho_wchar(WINDOW *, const cchar_t*);
--int setcchar(cchar_t*, const wchar_t*, const attr_t, short, const void*);
--int slk_wset(int, const wchar_t *, int);
--int unget_wch(const wchar_t);
--int vline_set(const cchar_t *, int);
--int waddnwstr(WINDOW *, const wchar_t *, int);
--int waddwstr(WINDOW *, const wchar_t *);
--int wadd_wch(WINDOW *, const cchar_t *);
--int wadd_wchnstr(WINDOW *, const cchar_t *, int);
--int wadd_wchstr(WINDOW *, const cchar_t *);
--int wbkgrnd(WINDOW *, const cchar_t *);
--void wbkgrndset(WINDOW *, const cchar_t *);
--int wborder_set(WINDOW *, const cchar_t *, const cchar_t *,
-- const cchar_t *, const cchar_t *, const cchar_t *,
-- const cchar_t *, const cchar_t *, const cchar_t *);
--int wecho_wchar(WINDOW *, const cchar_t *);
--int wgetbkgrnd(WINDOW *, cchar_t *);
--int wgetn_wstr(WINDOW *, wint_t *, int);
--int wget_wch(WINDOW *, wint_t *);
--int wget_wstr(WINDOW *, wint_t *);
--int whline_set(WINDOW *, const cchar_t *, int);
--int winnwstr(WINDOW *, wchar_t *, int);
--int wins_nwstr(WINDOW *, const wchar_t *, int);
--int wins_wch(WINDOW *, const cchar_t *);
--int wins_wstr(WINDOW *, const wchar_t *);
--int winwstr(WINDOW *, wchar_t *);
--int win_wch(WINDOW *, cchar_t *);
--int win_wchnstr(WINDOW *, cchar_t *, int);
--int win_wchstr(WINDOW *, cchar_t *);
--wchar_t *wunctrl(cchar_t *);
--int wvline_set(WINDOW *, const cchar_t *, int);
--#endif
--
--/* Quasi-standard */
--
--chtype getattrs(WINDOW *);
--int getbegx(WINDOW *);
--int getbegy(WINDOW *);
--int getmaxx(WINDOW *);
--int getmaxy(WINDOW *);
--int getparx(WINDOW *);
--int getpary(WINDOW *);
--int getcurx(WINDOW *);
--int getcury(WINDOW *);
--void traceoff(void);
--void traceon(void);
--char *unctrl(chtype);
--
--int crmode(void);
--int nocrmode(void);
--int draino(int);
--int resetterm(void);
--int fixterm(void);
--int saveterm(void);
--int setsyx(int, int);
--
--int mouse_set(unsigned long);
--int mouse_on(unsigned long);
--int mouse_off(unsigned long);
--int request_mouse_pos(void);
--int map_button(unsigned long);
--void wmouse_position(WINDOW *, int *, int *);
--unsigned long getmouse(void);
--unsigned long getbmap(void);
--
--/* ncurses */
--
--int assume_default_colors(int, int);
--const char *curses_version(void);
--bool has_key(int);
--int use_default_colors(void);
--int wresize(WINDOW *, int, int);
--
--int mouseinterval(int);
--mmask_t mousemask(mmask_t, mmask_t *);
--bool mouse_trafo(int *, int *, bool);
--int nc_getmouse(MEVENT *);
--int ungetmouse(MEVENT *);
--bool wenclose(const WINDOW *, int, int);
--bool wmouse_trafo(const WINDOW *, int *, int *, bool);
--
--/* PDCurses */
--
--int addrawch(chtype);
--int insrawch(chtype);
--bool is_termresized(void);
--int mvaddrawch(int, int, chtype);
--int mvdeleteln(int, int);
--int mvinsertln(int, int);
--int mvinsrawch(int, int, chtype);
--int mvwaddrawch(WINDOW *, int, int, chtype);
--int mvwdeleteln(WINDOW *, int, int);
--int mvwinsertln(WINDOW *, int, int);
--int mvwinsrawch(WINDOW *, int, int, chtype);
--int raw_output(bool);
--int resize_term(int, int);
--WINDOW *resize_window(WINDOW *, int, int);
--int waddrawch(WINDOW *, chtype);
--int winsrawch(WINDOW *, chtype);
--char wordchar(void);
--
--#ifdef PDC_WIDE
--wchar_t *slk_wlabel(int);
--#endif
--
--void PDC_debug(const char *, ...);
--int PDC_ungetch(int);
--int PDC_set_blink(bool);
--int PDC_set_line_color(short);
--void PDC_set_title(const char *);
--
--int PDC_clearclipboard(void);
--int PDC_freeclipboard(char *);
--int PDC_getclipboard(char **, long *);
--int PDC_setclipboard(const char *, long);
--
--unsigned long PDC_get_input_fd(void);
--unsigned long PDC_get_key_modifiers(void);
--int PDC_return_key_modifiers(bool);
--int PDC_save_key_modifiers(bool);
--
--#ifdef XCURSES
--WINDOW *Xinitscr(int, char **);
--void XCursesExit(void);
--int sb_init(void);
--int sb_set_horz(int, int, int);
--int sb_set_vert(int, int, int);
--int sb_get_horz(int *, int *, int *);
--int sb_get_vert(int *, int *, int *);
--int sb_refresh(void);
--#endif
--
--/*** Functions defined as macros ***/
--
--/* getch() and ungetch() conflict with some DOS libraries */
--
--#define getch() wgetch(stdscr)
--#define ungetch(ch) PDC_ungetch(ch)
--
--#define COLOR_PAIR(n) (((chtype)(n) << PDC_COLOR_SHIFT) & A_COLOR)
--#define PAIR_NUMBER(n) (((n) & A_COLOR) >> PDC_COLOR_SHIFT)
--
--/* These will _only_ work as macros */
--
--#define getbegyx(w, y, x) (y = getbegy(w), x = getbegx(w))
--#define getmaxyx(w, y, x) (y = getmaxy(w), x = getmaxx(w))
--#define getparyx(w, y, x) (y = getpary(w), x = getparx(w))
--#define getyx(w, y, x) (y = getcury(w), x = getcurx(w))
--
--#define getsyx(y, x) { if (curscr->_leaveit) (y)=(x)=-1; \
-- else getyx(curscr,(y),(x)); }
--
--#ifdef NCURSES_MOUSE_VERSION
--# define getmouse(x) nc_getmouse(x)
--#endif
--
--/* return codes from PDC_getclipboard() and PDC_setclipboard() calls */
--
--#define PDC_CLIP_SUCCESS 0
--#define PDC_CLIP_ACCESS_ERROR 1
--#define PDC_CLIP_EMPTY 2
--#define PDC_CLIP_MEMORY_ERROR 3
--
--/* PDCurses key modifier masks */
--
--#define PDC_KEY_MODIFIER_SHIFT 1
--#define PDC_KEY_MODIFIER_CONTROL 2
--#define PDC_KEY_MODIFIER_ALT 4
--#define PDC_KEY_MODIFIER_NUMLOCK 8
--
--#if defined(__cplusplus) || defined(__cplusplus__) || defined(__CPLUSPLUS)
--# undef bool
--}
--#endif
--
--#endif /* __PDCURSES__ */
---- python-pysam.orig/samtools/win32/zconf.h
-+++ /dev/null
-@@ -1,332 +0,0 @@
--/* zconf.h -- configuration of the zlib compression library
-- * Copyright (C) 1995-2005 Jean-loup Gailly.
-- * For conditions of distribution and use, see copyright notice in zlib.h
-- */
--
--/* @(#) $Id$ */
--
--#ifndef ZCONF_H
--#define ZCONF_H
--
--/*
-- * If you *really* need a unique prefix for all types and library functions,
-- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
-- */
--#ifdef Z_PREFIX
--# define deflateInit_ z_deflateInit_
--# define deflate z_deflate
--# define deflateEnd z_deflateEnd
--# define inflateInit_ z_inflateInit_
--# define inflate z_inflate
--# define inflateEnd z_inflateEnd
--# define deflateInit2_ z_deflateInit2_
--# define deflateSetDictionary z_deflateSetDictionary
--# define deflateCopy z_deflateCopy
--# define deflateReset z_deflateReset
--# define deflateParams z_deflateParams
--# define deflateBound z_deflateBound
--# define deflatePrime z_deflatePrime
--# define inflateInit2_ z_inflateInit2_
--# define inflateSetDictionary z_inflateSetDictionary
--# define inflateSync z_inflateSync
--# define inflateSyncPoint z_inflateSyncPoint
--# define inflateCopy z_inflateCopy
--# define inflateReset z_inflateReset
--# define inflateBack z_inflateBack
--# define inflateBackEnd z_inflateBackEnd
--# define compress z_compress
--# define compress2 z_compress2
--# define compressBound z_compressBound
--# define uncompress z_uncompress
--# define adler32 z_adler32
--# define crc32 z_crc32
--# define get_crc_table z_get_crc_table
--# define zError z_zError
--
--# define alloc_func z_alloc_func
--# define free_func z_free_func
--# define in_func z_in_func
--# define out_func z_out_func
--# define Byte z_Byte
--# define uInt z_uInt
--# define uLong z_uLong
--# define Bytef z_Bytef
--# define charf z_charf
--# define intf z_intf
--# define uIntf z_uIntf
--# define uLongf z_uLongf
--# define voidpf z_voidpf
--# define voidp z_voidp
--#endif
--
--#if defined(__MSDOS__) && !defined(MSDOS)
--# define MSDOS
--#endif
--#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
--# define OS2
--#endif
--#if defined(_WINDOWS) && !defined(WINDOWS)
--# define WINDOWS
--#endif
--#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
--# ifndef WIN32
--# define WIN32
--# endif
--#endif
--#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
--# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
--# ifndef SYS16BIT
--# define SYS16BIT
--# endif
--# endif
--#endif
--
--/*
-- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
-- * than 64k bytes at a time (needed on systems with 16-bit int).
-- */
--#ifdef SYS16BIT
--# define MAXSEG_64K
--#endif
--#ifdef MSDOS
--# define UNALIGNED_OK
--#endif
--
--#ifdef __STDC_VERSION__
--# ifndef STDC
--# define STDC
--# endif
--# if __STDC_VERSION__ >= 199901L
--# ifndef STDC99
--# define STDC99
--# endif
--# endif
--#endif
--#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
--# define STDC
--#endif
--#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
--# define STDC
--#endif
--#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
--# define STDC
--#endif
--#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
--# define STDC
--#endif
--
--#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
--# define STDC
--#endif
--
--#ifndef STDC
--# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
--# define const /* note: need a more gentle solution here */
--# endif
--#endif
--
--/* Some Mac compilers merge all .h files incorrectly: */
--#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
--# define NO_DUMMY_DECL
--#endif
--
--/* Maximum value for memLevel in deflateInit2 */
--#ifndef MAX_MEM_LEVEL
--# ifdef MAXSEG_64K
--# define MAX_MEM_LEVEL 8
--# else
--# define MAX_MEM_LEVEL 9
--# endif
--#endif
--
--/* Maximum value for windowBits in deflateInit2 and inflateInit2.
-- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
-- * created by gzip. (Files created by minigzip can still be extracted by
-- * gzip.)
-- */
--#ifndef MAX_WBITS
--# define MAX_WBITS 15 /* 32K LZ77 window */
--#endif
--
--/* The memory requirements for deflate are (in bytes):
-- (1 << (windowBits+2)) + (1 << (memLevel+9))
-- that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
-- plus a few kilobytes for small objects. For example, if you want to reduce
-- the default memory requirements from 256K to 128K, compile with
-- make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
-- Of course this will generally degrade compression (there's no free lunch).
--
-- The memory requirements for inflate are (in bytes) 1 << windowBits
-- that is, 32K for windowBits=15 (default value) plus a few kilobytes
-- for small objects.
--*/
--
-- /* Type declarations */
--
--#ifndef OF /* function prototypes */
--# ifdef STDC
--# define OF(args) args
--# else
--# define OF(args) ()
--# endif
--#endif
--
--/* The following definitions for FAR are needed only for MSDOS mixed
-- * model programming (small or medium model with some far allocations).
-- * This was tested only with MSC; for other MSDOS compilers you may have
-- * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
-- * just define FAR to be empty.
-- */
--#ifdef SYS16BIT
--# if defined(M_I86SM) || defined(M_I86MM)
-- /* MSC small or medium model */
--# define SMALL_MEDIUM
--# ifdef _MSC_VER
--# define FAR _far
--# else
--# define FAR far
--# endif
--# endif
--# if (defined(__SMALL__) || defined(__MEDIUM__))
-- /* Turbo C small or medium model */
--# define SMALL_MEDIUM
--# ifdef __BORLANDC__
--# define FAR _far
--# else
--# define FAR far
--# endif
--# endif
--#endif
--
--#if defined(WINDOWS) || defined(WIN32)
-- /* If building or using zlib as a DLL, define ZLIB_DLL.
-- * This is not mandatory, but it offers a little performance increase.
-- */
--# ifdef ZLIB_DLL
--# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
--# ifdef ZLIB_INTERNAL
--# define ZEXTERN extern __declspec(dllexport)
--# else
--# define ZEXTERN extern __declspec(dllimport)
--# endif
--# endif
--# endif /* ZLIB_DLL */
-- /* If building or using zlib with the WINAPI/WINAPIV calling convention,
-- * define ZLIB_WINAPI.
-- * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
-- */
--# ifdef ZLIB_WINAPI
--# ifdef FAR
--# undef FAR
--# endif
--# include <windows.h>
-- /* No need for _export, use ZLIB.DEF instead. */
-- /* For complete Windows compatibility, use WINAPI, not __stdcall. */
--# define ZEXPORT WINAPI
--# ifdef WIN32
--# define ZEXPORTVA WINAPIV
--# else
--# define ZEXPORTVA FAR CDECL
--# endif
--# endif
--#endif
--
--#if defined (__BEOS__)
--# ifdef ZLIB_DLL
--# ifdef ZLIB_INTERNAL
--# define ZEXPORT __declspec(dllexport)
--# define ZEXPORTVA __declspec(dllexport)
--# else
--# define ZEXPORT __declspec(dllimport)
--# define ZEXPORTVA __declspec(dllimport)
--# endif
--# endif
--#endif
--
--#ifndef ZEXTERN
--# define ZEXTERN extern
--#endif
--#ifndef ZEXPORT
--# define ZEXPORT
--#endif
--#ifndef ZEXPORTVA
--# define ZEXPORTVA
--#endif
--
--#ifndef FAR
--# define FAR
--#endif
--
--#if !defined(__MACTYPES__)
--typedef unsigned char Byte; /* 8 bits */
--#endif
--typedef unsigned int uInt; /* 16 bits or more */
--typedef unsigned long uLong; /* 32 bits or more */
--
--#ifdef SMALL_MEDIUM
-- /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
--# define Bytef Byte FAR
--#else
-- typedef Byte FAR Bytef;
--#endif
--typedef char FAR charf;
--typedef int FAR intf;
--typedef uInt FAR uIntf;
--typedef uLong FAR uLongf;
--
--#ifdef STDC
-- typedef void const *voidpc;
-- typedef void FAR *voidpf;
-- typedef void *voidp;
--#else
-- typedef Byte const *voidpc;
-- typedef Byte FAR *voidpf;
-- typedef Byte *voidp;
--#endif
--
--#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */
--# include <sys/types.h> /* for off_t */
--# include <unistd.h> /* for SEEK_* and off_t */
--# ifdef VMS
--# include <unixio.h> /* for off_t */
--# endif
--# define z_off_t off_t
--#endif
--#ifndef SEEK_SET
--# define SEEK_SET 0 /* Seek from beginning of file. */
--# define SEEK_CUR 1 /* Seek from current position. */
--# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
--#endif
--#ifndef z_off_t
--# define z_off_t long
--#endif
--
--#if defined(__OS400__)
--# define NO_vsnprintf
--#endif
--
--#if defined(__MVS__)
--# define NO_vsnprintf
--# ifdef FAR
--# undef FAR
--# endif
--#endif
--
--/* MVS linker does not support external names larger than 8 bytes */
--#if defined(__MVS__)
--# pragma map(deflateInit_,"DEIN")
--# pragma map(deflateInit2_,"DEIN2")
--# pragma map(deflateEnd,"DEEND")
--# pragma map(deflateBound,"DEBND")
--# pragma map(inflateInit_,"ININ")
--# pragma map(inflateInit2_,"ININ2")
--# pragma map(inflateEnd,"INEND")
--# pragma map(inflateSync,"INSY")
--# pragma map(inflateSetDictionary,"INSEDI")
--# pragma map(compressBound,"CMBND")
--# pragma map(inflate_table,"INTABL")
--# pragma map(inflate_fast,"INFA")
--# pragma map(inflate_copyright,"INCOPY")
--#endif
--
--#endif /* ZCONF_H */
---- python-pysam.orig/samtools/win32/zlib.h
-+++ /dev/null
-@@ -1,1357 +0,0 @@
--/* zlib.h -- interface of the 'zlib' general purpose compression library
-- version 1.2.3, July 18th, 2005
--
-- Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
--
-- This software is provided 'as-is', without any express or implied
-- warranty. In no event will the authors be held liable for any damages
-- arising from the use of this software.
--
-- Permission is granted to anyone to use this software for any purpose,
-- including commercial applications, and to alter it and redistribute it
-- freely, subject to the following restrictions:
--
-- 1. The origin of this software must not be misrepresented; you must not
-- claim that you wrote the original software. If you use this software
-- in a product, an acknowledgment in the product documentation would be
-- appreciated but is not required.
-- 2. Altered source versions must be plainly marked as such, and must not be
-- misrepresented as being the original software.
-- 3. This notice may not be removed or altered from any source distribution.
--
-- Jean-loup Gailly Mark Adler
-- jloup@gzip.org madler@alumni.caltech.edu
--
--
-- The data format used by the zlib library is described by RFCs (Request for
-- Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
-- (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
--*/
--
--#ifndef ZLIB_H
--#define ZLIB_H
--
--#include "zconf.h"
--
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#define ZLIB_VERSION "1.2.3"
--#define ZLIB_VERNUM 0x1230
--
--/*
-- The 'zlib' compression library provides in-memory compression and
-- decompression functions, including integrity checks of the uncompressed
-- data. This version of the library supports only one compression method
-- (deflation) but other algorithms will be added later and will have the same
-- stream interface.
--
-- Compression can be done in a single step if the buffers are large
-- enough (for example if an input file is mmap'ed), or can be done by
-- repeated calls of the compression function. In the latter case, the
-- application must provide more input and/or consume the output
-- (providing more output space) before each call.
--
-- The compressed data format used by default by the in-memory functions is
-- the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
-- around a deflate stream, which is itself documented in RFC 1951.
--
-- The library also supports reading and writing files in gzip (.gz) format
-- with an interface similar to that of stdio using the functions that start
-- with "gz". The gzip format is different from the zlib format. gzip is a
-- gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
--
-- This library can optionally read and write gzip streams in memory as well.
--
-- The zlib format was designed to be compact and fast for use in memory
-- and on communications channels. The gzip format was designed for single-
-- file compression on file systems, has a larger header than zlib to maintain
-- directory information, and uses a different, slower check method than zlib.
--
-- The library does not install any signal handler. The decoder checks
-- the consistency of the compressed data, so the library should never
-- crash even in case of corrupted input.
--*/
--
--typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
--typedef void (*free_func) OF((voidpf opaque, voidpf address));
--
--struct internal_state;
--
--typedef struct z_stream_s {
-- Bytef *next_in; /* next input byte */
-- uInt avail_in; /* number of bytes available at next_in */
-- uLong total_in; /* total nb of input bytes read so far */
--
-- Bytef *next_out; /* next output byte should be put there */
-- uInt avail_out; /* remaining free space at next_out */
-- uLong total_out; /* total nb of bytes output so far */
--
-- char *msg; /* last error message, NULL if no error */
-- struct internal_state FAR *state; /* not visible by applications */
--
-- alloc_func zalloc; /* used to allocate the internal state */
-- free_func zfree; /* used to free the internal state */
-- voidpf opaque; /* private data object passed to zalloc and zfree */
--
-- int data_type; /* best guess about the data type: binary or text */
-- uLong adler; /* adler32 value of the uncompressed data */
-- uLong reserved; /* reserved for future use */
--} z_stream;
--
--typedef z_stream FAR *z_streamp;
--
--/*
-- gzip header information passed to and from zlib routines. See RFC 1952
-- for more details on the meanings of these fields.
--*/
--typedef struct gz_header_s {
-- int text; /* true if compressed data believed to be text */
-- uLong time; /* modification time */
-- int xflags; /* extra flags (not used when writing a gzip file) */
-- int os; /* operating system */
-- Bytef *extra; /* pointer to extra field or Z_NULL if none */
-- uInt extra_len; /* extra field length (valid if extra != Z_NULL) */
-- uInt extra_max; /* space at extra (only when reading header) */
-- Bytef *name; /* pointer to zero-terminated file name or Z_NULL */
-- uInt name_max; /* space at name (only when reading header) */
-- Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */
-- uInt comm_max; /* space at comment (only when reading header) */
-- int hcrc; /* true if there was or will be a header crc */
-- int done; /* true when done reading gzip header (not used
-- when writing a gzip file) */
--} gz_header;
--
--typedef gz_header FAR *gz_headerp;
--
--/*
-- The application must update next_in and avail_in when avail_in has
-- dropped to zero. It must update next_out and avail_out when avail_out
-- has dropped to zero. The application must initialize zalloc, zfree and
-- opaque before calling the init function. All other fields are set by the
-- compression library and must not be updated by the application.
--
-- The opaque value provided by the application will be passed as the first
-- parameter for calls of zalloc and zfree. This can be useful for custom
-- memory management. The compression library attaches no meaning to the
-- opaque value.
--
-- zalloc must return Z_NULL if there is not enough memory for the object.
-- If zlib is used in a multi-threaded application, zalloc and zfree must be
-- thread safe.
--
-- On 16-bit systems, the functions zalloc and zfree must be able to allocate
-- exactly 65536 bytes, but will not be required to allocate more than this
-- if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
-- pointers returned by zalloc for objects of exactly 65536 bytes *must*
-- have their offset normalized to zero. The default allocation function
-- provided by this library ensures this (see zutil.c). To reduce memory
-- requirements and avoid any allocation of 64K objects, at the expense of
-- compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
--
-- The fields total_in and total_out can be used for statistics or
-- progress reports. After compression, total_in holds the total size of
-- the uncompressed data and may be saved for use in the decompressor
-- (particularly if the decompressor wants to decompress everything in
-- a single step).
--*/
--
-- /* constants */
--
--#define Z_NO_FLUSH 0
--#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
--#define Z_SYNC_FLUSH 2
--#define Z_FULL_FLUSH 3
--#define Z_FINISH 4
--#define Z_BLOCK 5
--/* Allowed flush values; see deflate() and inflate() below for details */
--
--#define Z_OK 0
--#define Z_STREAM_END 1
--#define Z_NEED_DICT 2
--#define Z_ERRNO (-1)
--#define Z_STREAM_ERROR (-2)
--#define Z_DATA_ERROR (-3)
--#define Z_MEM_ERROR (-4)
--#define Z_BUF_ERROR (-5)
--#define Z_VERSION_ERROR (-6)
--/* Return codes for the compression/decompression functions. Negative
-- * values are errors, positive values are used for special but normal events.
-- */
--
--#define Z_NO_COMPRESSION 0
--#define Z_BEST_SPEED 1
--#define Z_BEST_COMPRESSION 9
--#define Z_DEFAULT_COMPRESSION (-1)
--/* compression levels */
--
--#define Z_FILTERED 1
--#define Z_HUFFMAN_ONLY 2
--#define Z_RLE 3
--#define Z_FIXED 4
--#define Z_DEFAULT_STRATEGY 0
--/* compression strategy; see deflateInit2() below for details */
--
--#define Z_BINARY 0
--#define Z_TEXT 1
--#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
--#define Z_UNKNOWN 2
--/* Possible values of the data_type field (though see inflate()) */
--
--#define Z_DEFLATED 8
--/* The deflate compression method (the only one supported in this version) */
--
--#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
--
--#define zlib_version zlibVersion()
--/* for compatibility with versions < 1.0.2 */
--
-- /* basic functions */
--
--ZEXTERN const char * ZEXPORT zlibVersion OF((void));
--/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
-- If the first character differs, the library code actually used is
-- not compatible with the zlib.h header file used by the application.
-- This check is automatically made by deflateInit and inflateInit.
-- */
--
--/*
--ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
--
-- Initializes the internal stream state for compression. The fields
-- zalloc, zfree and opaque must be initialized before by the caller.
-- If zalloc and zfree are set to Z_NULL, deflateInit updates them to
-- use default allocation functions.
--
-- The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
-- 1 gives best speed, 9 gives best compression, 0 gives no compression at
-- all (the input data is simply copied a block at a time).
-- Z_DEFAULT_COMPRESSION requests a default compromise between speed and
-- compression (currently equivalent to level 6).
--
-- deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
-- enough memory, Z_STREAM_ERROR if level is not a valid compression level,
-- Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
-- with the version assumed by the caller (ZLIB_VERSION).
-- msg is set to null if there is no error message. deflateInit does not
-- perform any compression: this will be done by deflate().
--*/
--
--
--ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
--/*
-- deflate compresses as much data as possible, and stops when the input
-- buffer becomes empty or the output buffer becomes full. It may introduce some
-- output latency (reading input without producing any output) except when
-- forced to flush.
--
-- The detailed semantics are as follows. deflate performs one or both of the
-- following actions:
--
-- - Compress more input starting at next_in and update next_in and avail_in
-- accordingly. If not all input can be processed (because there is not
-- enough room in the output buffer), next_in and avail_in are updated and
-- processing will resume at this point for the next call of deflate().
--
-- - Provide more output starting at next_out and update next_out and avail_out
-- accordingly. This action is forced if the parameter flush is non zero.
-- Forcing flush frequently degrades the compression ratio, so this parameter
-- should be set only when necessary (in interactive applications).
-- Some output may be provided even if flush is not set.
--
-- Before the call of deflate(), the application should ensure that at least
-- one of the actions is possible, by providing more input and/or consuming
-- more output, and updating avail_in or avail_out accordingly; avail_out
-- should never be zero before the call. The application can consume the
-- compressed output when it wants, for example when the output buffer is full
-- (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
-- and with zero avail_out, it must be called again after making room in the
-- output buffer because there might be more output pending.
--
-- Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
-- decide how much data to accumualte before producing output, in order to
-- maximize compression.
--
-- If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
-- flushed to the output buffer and the output is aligned on a byte boundary, so
-- that the decompressor can get all input data available so far. (In particular
-- avail_in is zero after the call if enough output space has been provided
-- before the call.) Flushing may degrade compression for some compression
-- algorithms and so it should be used only when necessary.
--
-- If flush is set to Z_FULL_FLUSH, all output is flushed as with
-- Z_SYNC_FLUSH, and the compression state is reset so that decompression can
-- restart from this point if previous compressed data has been damaged or if
-- random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
-- compression.
--
-- If deflate returns with avail_out == 0, this function must be called again
-- with the same value of the flush parameter and more output space (updated
-- avail_out), until the flush is complete (deflate returns with non-zero
-- avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
-- avail_out is greater than six to avoid repeated flush markers due to
-- avail_out == 0 on return.
--
-- If the parameter flush is set to Z_FINISH, pending input is processed,
-- pending output is flushed and deflate returns with Z_STREAM_END if there
-- was enough output space; if deflate returns with Z_OK, this function must be
-- called again with Z_FINISH and more output space (updated avail_out) but no
-- more input data, until it returns with Z_STREAM_END or an error. After
-- deflate has returned Z_STREAM_END, the only possible operations on the
-- stream are deflateReset or deflateEnd.
--
-- Z_FINISH can be used immediately after deflateInit if all the compression
-- is to be done in a single step. In this case, avail_out must be at least
-- the value returned by deflateBound (see below). If deflate does not return
-- Z_STREAM_END, then it must be called again as described above.
--
-- deflate() sets strm->adler to the adler32 checksum of all input read
-- so far (that is, total_in bytes).
--
-- deflate() may update strm->data_type if it can make a good guess about
-- the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
-- binary. This field is only for information purposes and does not affect
-- the compression algorithm in any manner.
--
-- deflate() returns Z_OK if some progress has been made (more input
-- processed or more output produced), Z_STREAM_END if all input has been
-- consumed and all output has been produced (only when flush is set to
-- Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-- if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
-- (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
-- fatal, and deflate() can be called again with more input and more output
-- space to continue compressing.
--*/
--
--
--ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
--/*
-- All dynamically allocated data structures for this stream are freed.
-- This function discards any unprocessed input and does not flush any
-- pending output.
--
-- deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
-- stream state was inconsistent, Z_DATA_ERROR if the stream was freed
-- prematurely (some input or output was discarded). In the error case,
-- msg may be set but then points to a static string (which must not be
-- deallocated).
--*/
--
--
--/*
--ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
--
-- Initializes the internal stream state for decompression. The fields
-- next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-- the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
-- value depends on the compression method), inflateInit determines the
-- compression method from the zlib header and allocates all data structures
-- accordingly; otherwise the allocation will be deferred to the first call of
-- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-- use default allocation functions.
--
-- inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
-- memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-- version assumed by the caller. msg is set to null if there is no error
-- message. inflateInit does not perform any decompression apart from reading
-- the zlib header if present: this will be done by inflate(). (So next_in and
-- avail_in may be modified, but next_out and avail_out are unchanged.)
--*/
--
--
--ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
--/*
-- inflate decompresses as much data as possible, and stops when the input
-- buffer becomes empty or the output buffer becomes full. It may introduce
-- some output latency (reading input without producing any output) except when
-- forced to flush.
--
-- The detailed semantics are as follows. inflate performs one or both of the
-- following actions:
--
-- - Decompress more input starting at next_in and update next_in and avail_in
-- accordingly. If not all input can be processed (because there is not
-- enough room in the output buffer), next_in is updated and processing
-- will resume at this point for the next call of inflate().
--
-- - Provide more output starting at next_out and update next_out and avail_out
-- accordingly. inflate() provides as much output as possible, until there
-- is no more input data or no more space in the output buffer (see below
-- about the flush parameter).
--
-- Before the call of inflate(), the application should ensure that at least
-- one of the actions is possible, by providing more input and/or consuming
-- more output, and updating the next_* and avail_* values accordingly.
-- The application can consume the uncompressed output when it wants, for
-- example when the output buffer is full (avail_out == 0), or after each
-- call of inflate(). If inflate returns Z_OK and with zero avail_out, it
-- must be called again after making room in the output buffer because there
-- might be more output pending.
--
-- The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH,
-- Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much
-- output as possible to the output buffer. Z_BLOCK requests that inflate() stop
-- if and when it gets to the next deflate block boundary. When decoding the
-- zlib or gzip format, this will cause inflate() to return immediately after
-- the header and before the first block. When doing a raw inflate, inflate()
-- will go ahead and process the first block, and will return when it gets to
-- the end of that block, or when it runs out of data.
--
-- The Z_BLOCK option assists in appending to or combining deflate streams.
-- Also to assist in this, on return inflate() will set strm->data_type to the
-- number of unused bits in the last byte taken from strm->next_in, plus 64
-- if inflate() is currently decoding the last block in the deflate stream,
-- plus 128 if inflate() returned immediately after decoding an end-of-block
-- code or decoding the complete header up to just before the first byte of the
-- deflate stream. The end-of-block will not be indicated until all of the
-- uncompressed data from that block has been written to strm->next_out. The
-- number of unused bits may in general be greater than seven, except when
-- bit 7 of data_type is set, in which case the number of unused bits will be
-- less than eight.
--
-- inflate() should normally be called until it returns Z_STREAM_END or an
-- error. However if all decompression is to be performed in a single step
-- (a single call of inflate), the parameter flush should be set to
-- Z_FINISH. In this case all pending input is processed and all pending
-- output is flushed; avail_out must be large enough to hold all the
-- uncompressed data. (The size of the uncompressed data may have been saved
-- by the compressor for this purpose.) The next operation on this stream must
-- be inflateEnd to deallocate the decompression state. The use of Z_FINISH
-- is never required, but can be used to inform inflate that a faster approach
-- may be used for the single inflate() call.
--
-- In this implementation, inflate() always flushes as much output as
-- possible to the output buffer, and always uses the faster approach on the
-- first call. So the only effect of the flush parameter in this implementation
-- is on the return value of inflate(), as noted below, or when it returns early
-- because Z_BLOCK is used.
--
-- If a preset dictionary is needed after this call (see inflateSetDictionary
-- below), inflate sets strm->adler to the adler32 checksum of the dictionary
-- chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
-- strm->adler to the adler32 checksum of all output produced so far (that is,
-- total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
-- below. At the end of the stream, inflate() checks that its computed adler32
-- checksum is equal to that saved by the compressor and returns Z_STREAM_END
-- only if the checksum is correct.
--
-- inflate() will decompress and check either zlib-wrapped or gzip-wrapped
-- deflate data. The header type is detected automatically. Any information
-- contained in the gzip header is not retained, so applications that need that
-- information should instead use raw inflate, see inflateInit2() below, or
-- inflateBack() and perform their own processing of the gzip header and
-- trailer.
--
-- inflate() returns Z_OK if some progress has been made (more input processed
-- or more output produced), Z_STREAM_END if the end of the compressed data has
-- been reached and all uncompressed output has been produced, Z_NEED_DICT if a
-- preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-- corrupted (input stream not conforming to the zlib format or incorrect check
-- value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
-- if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
-- Z_BUF_ERROR if no progress is possible or if there was not enough room in the
-- output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
-- inflate() can be called again with more input and more output space to
-- continue decompressing. If Z_DATA_ERROR is returned, the application may then
-- call inflateSync() to look for a good compression block if a partial recovery
-- of the data is desired.
--*/
--
--
--ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
--/*
-- All dynamically allocated data structures for this stream are freed.
-- This function discards any unprocessed input and does not flush any
-- pending output.
--
-- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-- was inconsistent. In the error case, msg may be set but then points to a
-- static string (which must not be deallocated).
--*/
--
-- /* Advanced functions */
--
--/*
-- The following functions are needed only in some special applications.
--*/
--
--/*
--ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
-- int level,
-- int method,
-- int windowBits,
-- int memLevel,
-- int strategy));
--
-- This is another version of deflateInit with more compression options. The
-- fields next_in, zalloc, zfree and opaque must be initialized before by
-- the caller.
--
-- The method parameter is the compression method. It must be Z_DEFLATED in
-- this version of the library.
--
-- The windowBits parameter is the base two logarithm of the window size
-- (the size of the history buffer). It should be in the range 8..15 for this
-- version of the library. Larger values of this parameter result in better
-- compression at the expense of memory usage. The default value is 15 if
-- deflateInit is used instead.
--
-- windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
-- determines the window size. deflate() will then generate raw deflate data
-- with no zlib header or trailer, and will not compute an adler32 check value.
--
-- windowBits can also be greater than 15 for optional gzip encoding. Add
-- 16 to windowBits to write a simple gzip header and trailer around the
-- compressed data instead of a zlib wrapper. The gzip header will have no
-- file name, no extra data, no comment, no modification time (set to zero),
-- no header crc, and the operating system will be set to 255 (unknown). If a
-- gzip stream is being written, strm->adler is a crc32 instead of an adler32.
--
-- The memLevel parameter specifies how much memory should be allocated
-- for the internal compression state. memLevel=1 uses minimum memory but
-- is slow and reduces compression ratio; memLevel=9 uses maximum memory
-- for optimal speed. The default value is 8. See zconf.h for total memory
-- usage as a function of windowBits and memLevel.
--
-- The strategy parameter is used to tune the compression algorithm. Use the
-- value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-- filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
-- string match), or Z_RLE to limit match distances to one (run-length
-- encoding). Filtered data consists mostly of small values with a somewhat
-- random distribution. In this case, the compression algorithm is tuned to
-- compress them better. The effect of Z_FILTERED is to force more Huffman
-- coding and less string matching; it is somewhat intermediate between
-- Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as
-- Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy
-- parameter only affects the compression ratio but not the correctness of the
-- compressed output even if it is not set appropriately. Z_FIXED prevents the
-- use of dynamic Huffman codes, allowing for a simpler decoder for special
-- applications.
--
-- deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-- memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
-- method). msg is set to null if there is no error message. deflateInit2 does
-- not perform any compression: this will be done by deflate().
--*/
--
--ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
-- const Bytef *dictionary,
-- uInt dictLength));
--/*
-- Initializes the compression dictionary from the given byte sequence
-- without producing any compressed output. This function must be called
-- immediately after deflateInit, deflateInit2 or deflateReset, before any
-- call of deflate. The compressor and decompressor must use exactly the same
-- dictionary (see inflateSetDictionary).
--
-- The dictionary should consist of strings (byte sequences) that are likely
-- to be encountered later in the data to be compressed, with the most commonly
-- used strings preferably put towards the end of the dictionary. Using a
-- dictionary is most useful when the data to be compressed is short and can be
-- predicted with good accuracy; the data can then be compressed better than
-- with the default empty dictionary.
--
-- Depending on the size of the compression data structures selected by
-- deflateInit or deflateInit2, a part of the dictionary may in effect be
-- discarded, for example if the dictionary is larger than the window size in
-- deflate or deflate2. Thus the strings most likely to be useful should be
-- put at the end of the dictionary, not at the front. In addition, the
-- current implementation of deflate will use at most the window size minus
-- 262 bytes of the provided dictionary.
--
-- Upon return of this function, strm->adler is set to the adler32 value
-- of the dictionary; the decompressor may later use this value to determine
-- which dictionary has been used by the compressor. (The adler32 value
-- applies to the whole dictionary even if only a subset of the dictionary is
-- actually used by the compressor.) If a raw deflate was requested, then the
-- adler32 value is not computed and strm->adler is not set.
--
-- deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
-- parameter is invalid (such as NULL dictionary) or the stream state is
-- inconsistent (for example if deflate has already been called for this stream
-- or if the compression method is bsort). deflateSetDictionary does not
-- perform any compression: this will be done by deflate().
--*/
--
--ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
-- z_streamp source));
--/*
-- Sets the destination stream as a complete copy of the source stream.
--
-- This function can be useful when several compression strategies will be
-- tried, for example when there are several ways of pre-processing the input
-- data with a filter. The streams that will be discarded should then be freed
-- by calling deflateEnd. Note that deflateCopy duplicates the internal
-- compression state which can be quite large, so this strategy is slow and
-- can consume lots of memory.
--
-- deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-- enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-- (such as zalloc being NULL). msg is left unchanged in both source and
-- destination.
--*/
--
--ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
--/*
-- This function is equivalent to deflateEnd followed by deflateInit,
-- but does not free and reallocate all the internal compression state.
-- The stream will keep the same compression level and any other attributes
-- that may have been set by deflateInit2.
--
-- deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent (such as zalloc or state being NULL).
--*/
--
--ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
-- int level,
-- int strategy));
--/*
-- Dynamically update the compression level and compression strategy. The
-- interpretation of level and strategy is as in deflateInit2. This can be
-- used to switch between compression and straight copy of the input data, or
-- to switch to a different kind of input data requiring a different
-- strategy. If the compression level is changed, the input available so far
-- is compressed with the old level (and may be flushed); the new level will
-- take effect only at the next call of deflate().
--
-- Before the call of deflateParams, the stream state must be set as for
-- a call of deflate(), since the currently available input may have to
-- be compressed and flushed. In particular, strm->avail_out must be non-zero.
--
-- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
-- if strm->avail_out was zero.
--*/
--
--ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
-- int good_length,
-- int max_lazy,
-- int nice_length,
-- int max_chain));
--/*
-- Fine tune deflate's internal compression parameters. This should only be
-- used by someone who understands the algorithm used by zlib's deflate for
-- searching for the best matching string, and even then only by the most
-- fanatic optimizer trying to squeeze out the last compressed bit for their
-- specific input data. Read the deflate.c source code for the meaning of the
-- max_lazy, good_length, nice_length, and max_chain parameters.
--
-- deflateTune() can be called after deflateInit() or deflateInit2(), and
-- returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
-- */
--
--ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
-- uLong sourceLen));
--/*
-- deflateBound() returns an upper bound on the compressed size after
-- deflation of sourceLen bytes. It must be called after deflateInit()
-- or deflateInit2(). This would be used to allocate an output buffer
-- for deflation in a single pass, and so would be called before deflate().
--*/
--
--ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
-- int bits,
-- int value));
--/*
-- deflatePrime() inserts bits in the deflate output stream. The intent
-- is that this function is used to start off the deflate output with the
-- bits leftover from a previous deflate stream when appending to it. As such,
-- this function can only be used for raw deflate, and must be used before the
-- first deflate() call after a deflateInit2() or deflateReset(). bits must be
-- less than or equal to 16, and that many of the least significant bits of
-- value will be inserted in the output.
--
-- deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent.
--*/
--
--ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
-- gz_headerp head));
--/*
-- deflateSetHeader() provides gzip header information for when a gzip
-- stream is requested by deflateInit2(). deflateSetHeader() may be called
-- after deflateInit2() or deflateReset() and before the first call of
-- deflate(). The text, time, os, extra field, name, and comment information
-- in the provided gz_header structure are written to the gzip header (xflag is
-- ignored -- the extra flags are set according to the compression level). The
-- caller must assure that, if not Z_NULL, name and comment are terminated with
-- a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
-- available there. If hcrc is true, a gzip header crc is included. Note that
-- the current versions of the command-line version of gzip (up through version
-- 1.3.x) do not support header crc's, and will report that it is a "multi-part
-- gzip file" and give up.
--
-- If deflateSetHeader is not used, the default gzip header has text false,
-- the time set to zero, and os set to 255, with no extra, name, or comment
-- fields. The gzip header is returned to the default state by deflateReset().
--
-- deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent.
--*/
--
--/*
--ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
-- int windowBits));
--
-- This is another version of inflateInit with an extra parameter. The
-- fields next_in, avail_in, zalloc, zfree and opaque must be initialized
-- before by the caller.
--
-- The windowBits parameter is the base two logarithm of the maximum window
-- size (the size of the history buffer). It should be in the range 8..15 for
-- this version of the library. The default value is 15 if inflateInit is used
-- instead. windowBits must be greater than or equal to the windowBits value
-- provided to deflateInit2() while compressing, or it must be equal to 15 if
-- deflateInit2() was not used. If a compressed stream with a larger window
-- size is given as input, inflate() will return with the error code
-- Z_DATA_ERROR instead of trying to allocate a larger window.
--
-- windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
-- determines the window size. inflate() will then process raw deflate data,
-- not looking for a zlib or gzip header, not generating a check value, and not
-- looking for any check values for comparison at the end of the stream. This
-- is for use with other formats that use the deflate compressed data format
-- such as zip. Those formats provide their own check values. If a custom
-- format is developed using the raw deflate format for compressed data, it is
-- recommended that a check value such as an adler32 or a crc32 be applied to
-- the uncompressed data as is done in the zlib, gzip, and zip formats. For
-- most applications, the zlib format should be used as is. Note that comments
-- above on the use in deflateInit2() applies to the magnitude of windowBits.
--
-- windowBits can also be greater than 15 for optional gzip decoding. Add
-- 32 to windowBits to enable zlib and gzip decoding with automatic header
-- detection, or add 16 to decode only the gzip format (the zlib format will
-- return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is
-- a crc32 instead of an adler32.
--
-- inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-- memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg
-- is set to null if there is no error message. inflateInit2 does not perform
-- any decompression apart from reading the zlib header if present: this will
-- be done by inflate(). (So next_in and avail_in may be modified, but next_out
-- and avail_out are unchanged.)
--*/
--
--ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
-- const Bytef *dictionary,
-- uInt dictLength));
--/*
-- Initializes the decompression dictionary from the given uncompressed byte
-- sequence. This function must be called immediately after a call of inflate,
-- if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
-- can be determined from the adler32 value returned by that call of inflate.
-- The compressor and decompressor must use exactly the same dictionary (see
-- deflateSetDictionary). For raw inflate, this function can be called
-- immediately after inflateInit2() or inflateReset() and before any call of
-- inflate() to set the dictionary. The application must insure that the
-- dictionary that was used for compression is provided.
--
-- inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-- parameter is invalid (such as NULL dictionary) or the stream state is
-- inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-- expected one (incorrect adler32 value). inflateSetDictionary does not
-- perform any decompression: this will be done by subsequent calls of
-- inflate().
--*/
--
--ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
--/*
-- Skips invalid compressed data until a full flush point (see above the
-- description of deflate with Z_FULL_FLUSH) can be found, or until all
-- available input is skipped. No output is provided.
--
-- inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-- if no more input was provided, Z_DATA_ERROR if no flush point has been found,
-- or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
-- case, the application may save the current current value of total_in which
-- indicates where valid compressed data was found. In the error case, the
-- application may repeatedly call inflateSync, providing more input each time,
-- until success or end of the input data.
--*/
--
--ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
-- z_streamp source));
--/*
-- Sets the destination stream as a complete copy of the source stream.
--
-- This function can be useful when randomly accessing a large stream. The
-- first pass through the stream can periodically record the inflate state,
-- allowing restarting inflate at those points when randomly accessing the
-- stream.
--
-- inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-- enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-- (such as zalloc being NULL). msg is left unchanged in both source and
-- destination.
--*/
--
--ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
--/*
-- This function is equivalent to inflateEnd followed by inflateInit,
-- but does not free and reallocate all the internal decompression state.
-- The stream will keep attributes that may have been set by inflateInit2.
--
-- inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent (such as zalloc or state being NULL).
--*/
--
--ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
-- int bits,
-- int value));
--/*
-- This function inserts bits in the inflate input stream. The intent is
-- that this function is used to start inflating at a bit position in the
-- middle of a byte. The provided bits will be used before any bytes are used
-- from next_in. This function should only be used with raw inflate, and
-- should be used before the first inflate() call after inflateInit2() or
-- inflateReset(). bits must be less than or equal to 16, and that many of the
-- least significant bits of value will be inserted in the input.
--
-- inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent.
--*/
--
--ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
-- gz_headerp head));
--/*
-- inflateGetHeader() requests that gzip header information be stored in the
-- provided gz_header structure. inflateGetHeader() may be called after
-- inflateInit2() or inflateReset(), and before the first call of inflate().
-- As inflate() processes the gzip stream, head->done is zero until the header
-- is completed, at which time head->done is set to one. If a zlib stream is
-- being decoded, then head->done is set to -1 to indicate that there will be
-- no gzip header information forthcoming. Note that Z_BLOCK can be used to
-- force inflate() to return immediately after header processing is complete
-- and before any actual data is decompressed.
--
-- The text, time, xflags, and os fields are filled in with the gzip header
-- contents. hcrc is set to true if there is a header CRC. (The header CRC
-- was valid if done is set to one.) If extra is not Z_NULL, then extra_max
-- contains the maximum number of bytes to write to extra. Once done is true,
-- extra_len contains the actual extra field length, and extra contains the
-- extra field, or that field truncated if extra_max is less than extra_len.
-- If name is not Z_NULL, then up to name_max characters are written there,
-- terminated with a zero unless the length is greater than name_max. If
-- comment is not Z_NULL, then up to comm_max characters are written there,
-- terminated with a zero unless the length is greater than comm_max. When
-- any of extra, name, or comment are not Z_NULL and the respective field is
-- not present in the header, then that field is set to Z_NULL to signal its
-- absence. This allows the use of deflateSetHeader() with the returned
-- structure to duplicate the header. However if those fields are set to
-- allocated memory, then the application will need to save those pointers
-- elsewhere so that they can be eventually freed.
--
-- If inflateGetHeader is not used, then the header information is simply
-- discarded. The header is always checked for validity, including the header
-- CRC if present. inflateReset() will reset the process to discard the header
-- information. The application would need to call inflateGetHeader() again to
-- retrieve the header from the next gzip stream.
--
-- inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-- stream state was inconsistent.
--*/
--
--/*
--ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
-- unsigned char FAR *window));
--
-- Initialize the internal stream state for decompression using inflateBack()
-- calls. The fields zalloc, zfree and opaque in strm must be initialized
-- before the call. If zalloc and zfree are Z_NULL, then the default library-
-- derived memory allocation routines are used. windowBits is the base two
-- logarithm of the window size, in the range 8..15. window is a caller
-- supplied buffer of that size. Except for special applications where it is
-- assured that deflate was used with small window sizes, windowBits must be 15
-- and a 32K byte window must be supplied to be able to decompress general
-- deflate streams.
--
-- See inflateBack() for the usage of these routines.
--
-- inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
-- the paramaters are invalid, Z_MEM_ERROR if the internal state could not
-- be allocated, or Z_VERSION_ERROR if the version of the library does not
-- match the version of the header file.
--*/
--
--typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
--typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
--
--ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
-- in_func in, void FAR *in_desc,
-- out_func out, void FAR *out_desc));
--/*
-- inflateBack() does a raw inflate with a single call using a call-back
-- interface for input and output. This is more efficient than inflate() for
-- file i/o applications in that it avoids copying between the output and the
-- sliding window by simply making the window itself the output buffer. This
-- function trusts the application to not change the output buffer passed by
-- the output function, at least until inflateBack() returns.
--
-- inflateBackInit() must be called first to allocate the internal state
-- and to initialize the state with the user-provided window buffer.
-- inflateBack() may then be used multiple times to inflate a complete, raw
-- deflate stream with each call. inflateBackEnd() is then called to free
-- the allocated state.
--
-- A raw deflate stream is one with no zlib or gzip header or trailer.
-- This routine would normally be used in a utility that reads zip or gzip
-- files and writes out uncompressed files. The utility would decode the
-- header and process the trailer on its own, hence this routine expects
-- only the raw deflate stream to decompress. This is different from the
-- normal behavior of inflate(), which expects either a zlib or gzip header and
-- trailer around the deflate stream.
--
-- inflateBack() uses two subroutines supplied by the caller that are then
-- called by inflateBack() for input and output. inflateBack() calls those
-- routines until it reads a complete deflate stream and writes out all of the
-- uncompressed data, or until it encounters an error. The function's
-- parameters and return types are defined above in the in_func and out_func
-- typedefs. inflateBack() will call in(in_desc, &buf) which should return the
-- number of bytes of provided input, and a pointer to that input in buf. If
-- there is no input available, in() must return zero--buf is ignored in that
-- case--and inflateBack() will return a buffer error. inflateBack() will call
-- out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
-- should return zero on success, or non-zero on failure. If out() returns
-- non-zero, inflateBack() will return with an error. Neither in() nor out()
-- are permitted to change the contents of the window provided to
-- inflateBackInit(), which is also the buffer that out() uses to write from.
-- The length written by out() will be at most the window size. Any non-zero
-- amount of input may be provided by in().
--
-- For convenience, inflateBack() can be provided input on the first call by
-- setting strm->next_in and strm->avail_in. If that input is exhausted, then
-- in() will be called. Therefore strm->next_in must be initialized before
-- calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called
-- immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in
-- must also be initialized, and then if strm->avail_in is not zero, input will
-- initially be taken from strm->next_in[0 .. strm->avail_in - 1].
--
-- The in_desc and out_desc parameters of inflateBack() is passed as the
-- first parameter of in() and out() respectively when they are called. These
-- descriptors can be optionally used to pass any information that the caller-
-- supplied in() and out() functions need to do their job.
--
-- On return, inflateBack() will set strm->next_in and strm->avail_in to
-- pass back any unused input that was provided by the last in() call. The
-- return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
-- if in() or out() returned an error, Z_DATA_ERROR if there was a format
-- error in the deflate stream (in which case strm->msg is set to indicate the
-- nature of the error), or Z_STREAM_ERROR if the stream was not properly
-- initialized. In the case of Z_BUF_ERROR, an input or output error can be
-- distinguished using strm->next_in which will be Z_NULL only if in() returned
-- an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to
-- out() returning non-zero. (in() will always be called before out(), so
-- strm->next_in is assured to be defined if out() returns non-zero.) Note
-- that inflateBack() cannot return Z_OK.
--*/
--
--ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
--/*
-- All memory allocated by inflateBackInit() is freed.
--
-- inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
-- state was inconsistent.
--*/
--
--ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
--/* Return flags indicating compile-time options.
--
-- Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
-- 1.0: size of uInt
-- 3.2: size of uLong
-- 5.4: size of voidpf (pointer)
-- 7.6: size of z_off_t
--
-- Compiler, assembler, and debug options:
-- 8: DEBUG
-- 9: ASMV or ASMINF -- use ASM code
-- 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
-- 11: 0 (reserved)
--
-- One-time table building (smaller code, but not thread-safe if true):
-- 12: BUILDFIXED -- build static block decoding tables when needed
-- 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
-- 14,15: 0 (reserved)
--
-- Library content (indicates missing functionality):
-- 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
-- deflate code when not needed)
-- 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
-- and decode gzip streams (to avoid linking crc code)
-- 18-19: 0 (reserved)
--
-- Operation variations (changes in library functionality):
-- 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
-- 21: FASTEST -- deflate algorithm with only one, lowest compression level
-- 22,23: 0 (reserved)
--
-- The sprintf variant used by gzprintf (zero is best):
-- 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
-- 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
-- 26: 0 = returns value, 1 = void -- 1 means inferred string length returned
--
-- Remainder:
-- 27-31: 0 (reserved)
-- */
--
--
-- /* utility functions */
--
--/*
-- The following utility functions are implemented on top of the
-- basic stream-oriented functions. To simplify the interface, some
-- default options are assumed (compression level and memory usage,
-- standard memory allocation functions). The source code of these
-- utility functions can easily be modified if you need special options.
--*/
--
--ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
-- const Bytef *source, uLong sourceLen));
--/*
-- Compresses the source buffer into the destination buffer. sourceLen is
-- the byte length of the source buffer. Upon entry, destLen is the total
-- size of the destination buffer, which must be at least the value returned
-- by compressBound(sourceLen). Upon exit, destLen is the actual size of the
-- compressed buffer.
-- This function can be used to compress a whole file at once if the
-- input file is mmap'ed.
-- compress returns Z_OK if success, Z_MEM_ERROR if there was not
-- enough memory, Z_BUF_ERROR if there was not enough room in the output
-- buffer.
--*/
--
--ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
-- const Bytef *source, uLong sourceLen,
-- int level));
--/*
-- Compresses the source buffer into the destination buffer. The level
-- parameter has the same meaning as in deflateInit. sourceLen is the byte
-- length of the source buffer. Upon entry, destLen is the total size of the
-- destination buffer, which must be at least the value returned by
-- compressBound(sourceLen). Upon exit, destLen is the actual size of the
-- compressed buffer.
--
-- compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-- memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-- Z_STREAM_ERROR if the level parameter is invalid.
--*/
--
--ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
--/*
-- compressBound() returns an upper bound on the compressed size after
-- compress() or compress2() on sourceLen bytes. It would be used before
-- a compress() or compress2() call to allocate the destination buffer.
--*/
--
--ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
-- const Bytef *source, uLong sourceLen));
--/*
-- Decompresses the source buffer into the destination buffer. sourceLen is
-- the byte length of the source buffer. Upon entry, destLen is the total
-- size of the destination buffer, which must be large enough to hold the
-- entire uncompressed data. (The size of the uncompressed data must have
-- been saved previously by the compressor and transmitted to the decompressor
-- by some mechanism outside the scope of this compression library.)
-- Upon exit, destLen is the actual size of the compressed buffer.
-- This function can be used to decompress a whole file at once if the
-- input file is mmap'ed.
--
-- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-- enough memory, Z_BUF_ERROR if there was not enough room in the output
-- buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
--*/
--
--
--typedef voidp gzFile;
--
--ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
--/*
-- Opens a gzip (.gz) file for reading or writing. The mode parameter
-- is as in fopen ("rb" or "wb") but can also include a compression level
-- ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
-- Huffman only compression as in "wb1h", or 'R' for run-length encoding
-- as in "wb1R". (See the description of deflateInit2 for more information
-- about the strategy parameter.)
--
-- gzopen can be used to read a file which is not in gzip format; in this
-- case gzread will directly read from the file without decompression.
--
-- gzopen returns NULL if the file could not be opened or if there was
-- insufficient memory to allocate the (de)compression state; errno
-- can be checked to distinguish the two cases (if errno is zero, the
-- zlib error is Z_MEM_ERROR). */
--
--ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
--/*
-- gzdopen() associates a gzFile with the file descriptor fd. File
-- descriptors are obtained from calls like open, dup, creat, pipe or
-- fileno (in the file has been previously opened with fopen).
-- The mode parameter is as in gzopen.
-- The next call of gzclose on the returned gzFile will also close the
-- file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
-- descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
-- gzdopen returns NULL if there was insufficient memory to allocate
-- the (de)compression state.
--*/
--
--ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
--/*
-- Dynamically update the compression level or strategy. See the description
-- of deflateInit2 for the meaning of these parameters.
-- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-- opened for writing.
--*/
--
--ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
--/*
-- Reads the given number of uncompressed bytes from the compressed file.
-- If the input file was not in gzip format, gzread copies the given number
-- of bytes into the buffer.
-- gzread returns the number of uncompressed bytes actually read (0 for
-- end of file, -1 for error). */
--
--ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
-- voidpc buf, unsigned len));
--/*
-- Writes the given number of uncompressed bytes into the compressed file.
-- gzwrite returns the number of uncompressed bytes actually written
-- (0 in case of error).
--*/
--
--ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
--/*
-- Converts, formats, and writes the args to the compressed file under
-- control of the format string, as in fprintf. gzprintf returns the number of
-- uncompressed bytes actually written (0 in case of error). The number of
-- uncompressed bytes written is limited to 4095. The caller should assure that
-- this limit is not exceeded. If it is exceeded, then gzprintf() will return
-- return an error (0) with nothing written. In this case, there may also be a
-- buffer overflow with unpredictable consequences, which is possible only if
-- zlib was compiled with the insecure functions sprintf() or vsprintf()
-- because the secure snprintf() or vsnprintf() functions were not available.
--*/
--
--ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
--/*
-- Writes the given null-terminated string to the compressed file, excluding
-- the terminating null character.
-- gzputs returns the number of characters written, or -1 in case of error.
--*/
--
--ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
--/*
-- Reads bytes from the compressed file until len-1 characters are read, or
-- a newline character is read and transferred to buf, or an end-of-file
-- condition is encountered. The string is then terminated with a null
-- character.
-- gzgets returns buf, or Z_NULL in case of error.
--*/
--
--ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
--/*
-- Writes c, converted to an unsigned char, into the compressed file.
-- gzputc returns the value that was written, or -1 in case of error.
--*/
--
--ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
--/*
-- Reads one byte from the compressed file. gzgetc returns this byte
-- or -1 in case of end of file or error.
--*/
--
--ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
--/*
-- Push one character back onto the stream to be read again later.
-- Only one character of push-back is allowed. gzungetc() returns the
-- character pushed, or -1 on failure. gzungetc() will fail if a
-- character has been pushed but not read yet, or if c is -1. The pushed
-- character will be discarded if the stream is repositioned with gzseek()
-- or gzrewind().
--*/
--
--ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
--/*
-- Flushes all pending output into the compressed file. The parameter
-- flush is as in the deflate() function. The return value is the zlib
-- error number (see function gzerror below). gzflush returns Z_OK if
-- the flush parameter is Z_FINISH and all output could be flushed.
-- gzflush should be called only when strictly necessary because it can
-- degrade compression.
--*/
--
--ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
-- z_off_t offset, int whence));
--/*
-- Sets the starting position for the next gzread or gzwrite on the
-- given compressed file. The offset represents a number of bytes in the
-- uncompressed data stream. The whence parameter is defined as in lseek(2);
-- the value SEEK_END is not supported.
-- If the file is opened for reading, this function is emulated but can be
-- extremely slow. If the file is opened for writing, only forward seeks are
-- supported; gzseek then compresses a sequence of zeroes up to the new
-- starting position.
--
-- gzseek returns the resulting offset location as measured in bytes from
-- the beginning of the uncompressed stream, or -1 in case of error, in
-- particular if the file is opened for writing and the new starting position
-- would be before the current position.
--*/
--
--ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
--/*
-- Rewinds the given file. This function is supported only for reading.
--
-- gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
--*/
--
--ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
--/*
-- Returns the starting position for the next gzread or gzwrite on the
-- given compressed file. This position represents a number of bytes in the
-- uncompressed data stream.
--
-- gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
--*/
--
--ZEXTERN int ZEXPORT gzeof OF((gzFile file));
--/*
-- Returns 1 when EOF has previously been detected reading the given
-- input stream, otherwise zero.
--*/
--
--ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
--/*
-- Returns 1 if file is being read directly without decompression, otherwise
-- zero.
--*/
--
--ZEXTERN int ZEXPORT gzclose OF((gzFile file));
--/*
-- Flushes all pending output if necessary, closes the compressed file
-- and deallocates all the (de)compression state. The return value is the zlib
-- error number (see function gzerror below).
--*/
--
--ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
--/*
-- Returns the error message for the last error which occurred on the
-- given compressed file. errnum is set to zlib error number. If an
-- error occurred in the file system and not in the compression library,
-- errnum is set to Z_ERRNO and the application may consult errno
-- to get the exact error code.
--*/
--
--ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
--/*
-- Clears the error and end-of-file flags for file. This is analogous to the
-- clearerr() function in stdio. This is useful for continuing to read a gzip
-- file that is being written concurrently.
--*/
--
-- /* checksum functions */
--
--/*
-- These functions are not related to compression but are exported
-- anyway because they might be useful in applications using the
-- compression library.
--*/
--
--ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
--/*
-- Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-- return the updated checksum. If buf is NULL, this function returns
-- the required initial value for the checksum.
-- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-- much faster. Usage example:
--
-- uLong adler = adler32(0L, Z_NULL, 0);
--
-- while (read_buffer(buffer, length) != EOF) {
-- adler = adler32(adler, buffer, length);
-- }
-- if (adler != original_adler) error();
--*/
--
--ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
-- z_off_t len2));
--/*
-- Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
-- and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
-- each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
-- seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
--*/
--
--ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
--/*
-- Update a running CRC-32 with the bytes buf[0..len-1] and return the
-- updated CRC-32. If buf is NULL, this function returns the required initial
-- value for the for the crc. Pre- and post-conditioning (one's complement) is
-- performed within this function so it shouldn't be done by the application.
-- Usage example:
--
-- uLong crc = crc32(0L, Z_NULL, 0);
--
-- while (read_buffer(buffer, length) != EOF) {
-- crc = crc32(crc, buffer, length);
-- }
-- if (crc != original_crc) error();
--*/
--
--ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
--
--/*
-- Combine two CRC-32 check values into one. For two sequences of bytes,
-- seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
-- calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
-- check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
-- len2.
--*/
--
--
-- /* various hacks, don't look :) */
--
--/* deflateInit and inflateInit are macros to allow checking the zlib version
-- * and the compiler's view of z_stream:
-- */
--ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
-- const char *version, int stream_size));
--ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
-- const char *version, int stream_size));
--ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
-- int windowBits, int memLevel,
-- int strategy, const char *version,
-- int stream_size));
--ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
-- const char *version, int stream_size));
--ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
-- unsigned char FAR *window,
-- const char *version,
-- int stream_size));
--#define deflateInit(strm, level) \
-- deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
--#define inflateInit(strm) \
-- inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
--#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-- (strategy), ZLIB_VERSION, sizeof(z_stream))
--#define inflateInit2(strm, windowBits) \
-- inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
--#define inflateBackInit(strm, windowBits, window) \
-- inflateBackInit_((strm), (windowBits), (window), \
-- ZLIB_VERSION, sizeof(z_stream))
--
--
--#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
-- struct internal_state {int dummy;}; /* hack for buggy compilers */
--#endif
--
--ZEXTERN const char * ZEXPORT zError OF((int));
--ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z));
--ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
--
--#ifdef __cplusplus
--}
--#endif
--
--#endif /* ZLIB_H */
---- python-pysam.orig/tests/pysam_data/example_empty_with_header.sam
-+++ /dev/null
-@@ -1 +0,0 @@
--@HD VN:1.3 SO:coordinate
---- python-pysam.orig/tests/pysam_data/rg_with_tab.sam
-+++ /dev/null
-@@ -1,3273 +0,0 @@
--@SQ SN:chr1 LN:1575
--@SQ SN:chr2 LN:1584
--@PG ID:bwa PN:bwa VN:0.7.9a-r786 CL:bwa mem -p -t 8 -M -R @RG ID:None SM:None /mnt/data/hg19.fa /mnt/analysis/default-0.fastq
--EAS56_57:6:190:289:82 69 chr1 100 0 * = 100 0 CTCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA <<<7<<<;<<<<<<<<8;;<7;4<;<;;;;;94<; MF:i:192
--EAS56_57:6:190:289:82 137 chr1 100 73 35M = 100 0 AGGGGTGCAGAGCCGAGTCACGGGGTTGCCAGCAC <<<<<<;<<<<<<<<<<;<<;<<<<;8<6;9;;2; MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:190:727:308 99 chr1 103 99 35M = 263 195 GGTGCAGAGCCGAGTCACGGGGTTGCCAGCACAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<::<<<844 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:141:80:875 99 chr1 110 99 35M = 265 190 AGCCGAGTCACGGGGTTGCCAGCACAGGGGCTTAA <<<<<<<<<<<<<<<<<<<<<<:<<8;<<8+7;-7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:40:1128:1940 163 chr1 112 99 35M = 291 214 CCGAGTCACGGGGTTGCCAGCACAGGGGCTTAACC <<<<<<<<<<<<<<<<<<<;<<5;;<<<9;;;;7: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:290:319:736 69 chr1 113 0 * = 113 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<<<<:7:<.<<<<7<<.<.<<.9*<4<:<4%74 MF:i:192
--EAS51_62:5:290:319:736 137 chr1 113 73 35M = 113 0 CGAGTCACGGGGTTGCCAGCACAGGGGCTTAACCT ==;=======7====6=;==:;;====66=::27: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:132:493:921 69 chr1 119 0 * = 119 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<<<<<<<<<<<<<<<<<;<<<<77;0<;;6777 MF:i:192
--B7_597:2:132:493:921 137 chr1 119 75 35M = 119 0 ACGGGGTTGCCAGCACAGGGGCTTAACCTCTGGTG <<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;;88: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:283:799:560 163 chr1 121 66 35M = 283 197 GGGGTTGCCAGCACAGGGGCTTAACCTCTGGTGAC <<<<+<<<<8<<<+<<<<<;<<:07;8;7402447 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:225:195:543 99 chr1 123 99 35M = 299 211 GGTTGCCAGCACAGGGGCTTAACCTCTGGTGACTG <<<<<<<<<<<<<<<<<<<<<<<9<<;::388998 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:114:714:317 99 chr1 126 99 35M = 311 220 TGCCAGCACAGGGGCTTAACCTCTGGTGACTGCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5;<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:70:147:84 163 chr1 128 73 35M = 285 192 CCAGCACAGGGGCTTAACCTCTGGTGACTGCCAGA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;(5<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:187:227:818 163 chr1 129 99 35M = 290 196 CAGCACAGGGGCTTAACCTCTGGTGACTGCCAGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:77:29:126 99 chr1 131 99 35M = 315 219 GCACAGGGGCTTAACCTCTGGTGACTGCCAGAGCT <<<<<<<<<<3<<<<<<<;;;7<;<<449<-:977 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:327:795:103 99 chr1 133 99 35M = 302 204 ACAGGGGCTTAACCTCTGGTGACTGCCAGAGCTGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:139:117:262 69 chr1 135 0 * = 135 0 GTTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAAC <<<7<<<<<<<<<<<<<<<<<<<;<;<<<<<37;3 MF:i:192
--EAS114_30:3:139:117:262 137 chr1 135 76 35M = 135 0 AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG <<<<;<<<<<<<<<<<<<:<<<<<:<<8<<<<:<: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:29:817:854 73 chr1 135 77 35M = 135 0 AGGGGCTTAACCTCTGGTGACTGCCAGAGCTGCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:29:817:854 133 chr1 135 0 * = 135 0 GTTCTCAAGGTTGTTGCAAGGGGGTTTATGTGAAC <<<<<<<<<<<<<<<1..;:;;;;1%407)07&7. MF:i:192
--EAS192_3:6:170:169:57 163 chr1 138 99 35M = 296 193 GGCTTGACCTCTGGTGACTGCCAGAGCTGCTGGCC <<<<<;<<<<<<;<<<<<<<<<<<<:<<<<<;;+% MF:i:18 Aq:i:45 NM:i:2 UQ:i:30 H0:i:0 H1:i:1
--B7_595:4:84:802:737 99 chr1 140 68 35M = 284 179 CTTAACCTCTGGTGACTGCCAGAGCTGCTGGCAAG <<<<<<<<<<;9<9<<<;<<;73;<<<<<37;1+. MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:78:583:670 163 chr1 142 99 35M = 316 209 TAACCTCTGGTGACTGCCAGAGCTGCTGGCAAGCT <<<<<<<<<<;;;<;;<<<:7;5;<5;;<2--8-; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:90:435:691 99 chr1 147 99 35M = 318 206 TCTGGTGACTGCCAGAGCTGCTGGCAAGCTAGAGT <<<<<<<<<<;<<<;<<<<:<<<;<81;<<1;784 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:13:122:187 163 chr1 153 99 35M = 343 225 GACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCCTT <<<<<<<;<;<<<;<<<<:;6<<<<;;;;:<<%%< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS221_1:6:69:735:1915 99 chr1 154 99 35M = 321 202 ACTGCCAGAGCTGCTGGCAAGCTAGAGTCCCATTT <<<<<<<<;<<<<<<<<<;<<<<;<8<<<<;1:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:66:959:1311 163 chr1 159 95 35M = 336 212 CAGAGCTGCTGGCAAGCTAGAGGCCCATCTGGAGC ;;4;;;+;;;-01;;&-;;4;;&;;73)(&**274 MF:i:18 Aq:i:31 NM:i:2 UQ:i:12 H0:i:0 H1:i:1
--EAS56_57:6:325:759:288 99 chr1 163 99 35M = 341 213 GCTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCT 8<;<<<<81<<<<<;<<;<<<;9</;6;;809034 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:82:926:112 99 chr1 164 99 35M = 328 199 CTGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTC <;<<<<<<<<<5<<<<<<<<<<<<<<<;<<1:<4< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:324:728:956 99 chr1 165 99 35M = 322 192 TGCTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCT <<<<<<<<<<<<<<<<<<<<8<<<:<::;;;;<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:294:525:849 163 chr1 167 99 35M = 340 208 CTGGCAAGCTAGAGTCCCATTTGGAGCCCCTCTAA <<<<<<<<<<<<<<<<<<<<<<9+<:<<<<9;;15 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:159:125:297 163 chr1 170 99 35M = 337 202 GCAAGCTAGAGTCCCATTTGGAGCCACTCTAAGAC <<<<<<<<<<<<<<;<<<;<;<<6;)<:9;26;39 MF:i:18 Aq:i:43 NM:i:2 UQ:i:26 H0:i:0 H1:i:1
--EAS54_65:6:164:797:930 99 chr1 173 99 35M = 332 194 AGCTAGAGACCCATTTGGAGCCCCTCTAAGCCGTT <<<<<<<<<<<<<<<;;;:<<<<<;<;<<<<<,:: MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_81:7:293:355:321 163 chr1 174 99 35M = 356 217 GCTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTC <<<:<;<<<<<<<;<<<<<<<<<;<<;4<<<:+:< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:653:400 163 chr1 175 99 35M = 340 200 CTAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCT <;<9<<+<2<9<,;;64;<<<<;8<00*1<48:+8 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:62:1109:804 163 chr1 176 99 35M = 350 209 TAGAGTCCCATTTGGAGCCCCTCTAAGCCGTTCTA <<<<<<<<<<<<<:<<:<<<<<<:<:<<<<;;;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:303:402:142 163 chr1 181 99 35M = 343 197 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT <8<<<<<<<<<<<<<<<<<<<<<<<46<648;;'; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:321:642:388 163 chr1 181 99 35M = 357 209 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:1:1140:1206 163 chr1 181 99 35M = 368 222 TCCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGT ;;;;;;;;;;;;;:9;;7;;:;:;97;:;:88888 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:155:68:326 99 chr1 182 99 36M = 332 186 CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:19:886:279 99 chr1 182 99 35M = 337 190 CCCATTTGGAGCCCCTCTAAGCCGTTCTATTTGTA <9<<<<<<<<<<<<6<28:<<85<<<<<2<;<9<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:143:69:578 147 chr1 185 98 35M = 36 -184 ATTGGGAGCCCCTCTAAGCCGTTCTATTTGTAATG 222&<21<<<<12<7<01<<<<<0<<<<<<<20<< MF:i:18 Aq:i:35 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_71:4:13:981:659 181 chr1 187 0 * = 188 0 CGGGACAATGGACGAGGTAAACCGCACATTGACAA +)---3&&3&--+0)&+3:7777).333:<06<<< MF:i:192
--EAS54_71:4:13:981:659 121 chr1 188 37 34M = 187 0 TGTAGCCCCTCTAAGGCGTTCTATTTGTAATGAA ()&)06636;;<664*6;<<<<<<<<<<<<<<<1 MF:i:64 Aq:i:0 NM:i:2 UQ:i:14 H0:i:0 H1:i:1
--B7_610:1:37:652:403 163 chr1 193 99 35M = 347 189 CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT <<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:282:274:50 163 chr1 193 99 35M = 371 213 CCCCTCTAAGCCGTTCTATTTGTAATGAAAACTAT <<<<<<<<<<<<<<<<<;<<<<<99<9<5909;5; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:133:460:542 99 chr1 195 99 36M = 356 197 CCTATAAGCCGTTCTATTTGTAATGAAAACTATATT <<<<<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_73:5:44:498:945 99 chr1 195 82 35M = 377 217 CCTATAAGCCGTTCTATTTGTAATGAAAACTATAT ;<;<<<<<<<<<<9<;<:<<<<<<:<<<<;:;<3< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:1:139:152:856 99 chr1 198 99 35M = 392 229 CTAAGCCGTTCTATTTGTAATGAAAACTATATTTA <<<<<<<<;<<<<<<<<<<;<;<<<;<<<<;<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:323:639:311 163 chr1 200 99 36M = 357 193 AAGCCGTTCTATTTGTAATGAAAACTATATTTAGGC <<<<<<<<<<<<<<<<<<<2<<<<<<;<<<<<<81< MF:i:18 Aq:i:70 NM:i:1 UQ:i:23 H0:i:1 H1:i:0
--EAS114_39:2:18:967:582 163 chr1 200 99 35M = 398 233 AAGCCGTTCTATTTGTAATGAAAACTATATTTATG <<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<<<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:186:850:838 99 chr1 205 99 35M = 389 219 GTTCTATTTGTAATGAAAACTATATTTATGCTATT <<<<<;<<<<<<<<<<<:<<<<<;<<<;</<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:126:558:408 163 chr1 206 99 35M = 368 197 TTCTATTTGTAATGAAAACTATATTTATGCTATTC <<<<<<<<<<<<<:<<<<<<<<<<<<<<7<;<<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:157:643:175 163 chr1 206 99 35M = 380 209 TTCTATTTGTAATGAAAACTATATTTATGCTATTC <<<<<<<<;<<<<<<<<<<<<<<<<<<<)<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:141:711:813 99 chr1 209 99 35M = 370 196 TATTTGTAATGAAAACTATATTTATGCTATTCAGT <<<<<<<<<<;<<<<<<<<<<<<<<;<<<<<<:+< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:115:538:276 163 chr1 209 99 35M = 360 186 TATTTGTAATGAAAACTATATTTATGCTATTCAGT <<<<<<<<;<<<;;<<<;<:<<<:<<<<<<;;;7; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:51:1429:1043 83 chr1 209 99 35M = 59 -185 TATTTGTAATGAAAACTATATTTATGCTATTCAGT 9<5<<<<<<<<<<<<<9<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:176:168:513 163 chr1 210 99 35M = 410 235 ATTTGTAATGAAAACTATATTTATGCTATTCAGTT <<<<;<<<<<<<<<<<<<<<<<<<:&<<<<:;0;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:282:817:710 99 chr1 211 99 35M = 384 208 TTTGTAATGAAAACTATATTTATGCTATTCAGTTC <<<<<<<<<<<<<<<<<<<<<<<;:<<<<:8,<<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:65:787:74 83 chr1 213 88 35M = 61 -187 TGTAATGAAAACTATATTTATGCTATTCAGTTCTA 44848=:1661/66==?:<=:?6><<<<1>><<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:240:264:231 121 chr1 213 66 35M = 213 0 TGTAATGAAAACTATATTTATGCTATTCAGTTCTA 9;,;;62<9<)29<<<;96<<<;<<7<<<<<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:240:264:231 181 chr1 213 0 * = 213 0 CAACAGATCAAGAAGGAGGGGCAATGGACGAGTTA %15+5022))0&<<)0)+7:4+&<0<<:0<<<7<< MF:i:192
--EAS1_93:7:14:426:613 99 chr1 214 99 35M = 379 200 GTAATGAAAACTATATTTATGCTATTCAGTTCTAA ======;=;==========;;==3=;==-=<;<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:173:995:93 163 chr1 215 99 35M = 382 202 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<<<<<<<<<<<<<7:<<<<;:<:<<<<:7 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:195:348:703 163 chr1 215 99 35M = 353 173 TAATGAAAACTATATTTATGCTATTCAGTTCTAAA <<<<<<<;<<<<<;:<<<<<<<<<<<<:<1:<:7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:62:879:264 163 chr1 216 99 35M = 396 215 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:83:452:970 99 chr1 216 99 35M = 379 198 AATGAAAACTATATTTATGCTATTCAGTTCTAAAT ==========================;======== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:64:1318:1711 99 chr1 218 99 35M = 389 206 TGAAAACTATATTTATGCTATTCAGTTCTAAATAT <<<<<<<<<<<<<<<<7<<<<<<<:<<<<<2<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:113:968:19 83 chr1 219 99 35M = 50 -204 GAAAACTATATTTATGCTATTCAGTTCTAAATATA 8;<;8;9<<<<<<<9<:<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:160:896:275 163 chr1 220 99 35M = 387 202 AAAACTATATTTATGCTATTCAGTTCTAAATATAG ============<====<==<====<==<==;=:6 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:181:191:418 163 chr1 221 99 36M = 387 202 AAACTATATTTATGCTATTCAGTTCTAAATATAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<988 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:242:354:637 99 chr1 222 99 36M = 417 231 AACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<6<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:77:789 163 chr1 223 99 35M = 396 208 ACTATATTTATGCTATTCAGTTCTAAATATAGAAA <<<:<4<<9<:7<<<:<<<7<<<<<<<<<<9<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:42:540:501 147 chr1 224 99 36M = 60 -200 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:155:12:674 83 chr1 224 99 36M = 52 -208 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT ;<<<<<<<<<<;<<<<;<<<<8<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:106:316:452 147 chr1 224 99 36M = 49 -211 CTATATTTATGCTATTCAGTTCTAAATATAGAAATT :<<<<<;<<<<:<<:<<<<<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:89:525:113 163 chr1 227 78 40M = 397 210 TATTTATGCTATTCAGTTATAAATATAGAAATTGAAACAG <1<7<6;+0;7;7'<70;-<7<:<:<<5<<:9<5:7:%:7 MF:i:18 Aq:i:39 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS54_65:3:321:311:983 147 chr1 228 99 35M = 51 -212 ATTTATGCTATTCAGTTCTAAATATAGAAATTGAA ;;4;;<7<<<<<<77<<<<<<<<<<17<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:76:493:708 147 chr1 229 44 35M = 73 -191 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA 5/)63.&1517(544(055(0454&7706566679 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:125:628:79 163 chr1 229 99 35M = 400 205 TTTATGCTATTCAGTTCTAAATATAGAAATTGAAA ==================<6<====<<:<==7;:: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:78:583:499 83 chr1 229 74 35M = 37 -227 TTTACGCTATTCAGTACTAAATATAGAAATTGAAA &6&9774&<;67<44&-4<;<9<7<<<<<;<<<<< MF:i:18 Aq:i:37 NM:i:2 UQ:i:27 H0:i:0 H1:i:1
--EAS54_67:3:175:730:949 83 chr1 230 99 35M = 70 -195 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC <<<<;+<<<<7<;<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:84:275:1572 163 chr1 230 99 35M = 394 199 TTATGCTATTCAGTTCTAAATATAGAAATTGAAAC /6;;;4;;;;;;;;7;;4;.4;;;;;6;;;77077 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:248:753:731 99 chr1 231 99 35M = 402 206 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA <<<<<<<<<<<8<<<<<<<<<<<<:<<<<&<:<.: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:9:1289:215 99 chr1 231 99 35M = 394 198 TATGCTATTCAGTTCTAAATATAGAAATTGAAACA ;;;;;;9;;;67;;;;;99;9;;;;;;;;977747 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:188:802:71 163 chr1 232 99 35M = 415 218 ATGCTATTCAGTTCTAAATATAGAAATTGAAACAG <<<<<<<<<;<<<<<9<<<:<<<:<<<<<<:<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:252:171:323 83 chr1 234 99 35M = 43 -226 GCTATTCAGTTCTAAATATAGAAATTGAAACAGCT ;8<;<=3=6==:====;;======;========== MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:223:142:410 147 chr1 235 99 35M = 60 -210 CTATTCAGTTCTAAATATAGAAATTGAAACAGCTG 8;<<<;<<<<;<<<<<<;<;<<<<<<<<<<<<;<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:243:10:911 83 chr1 236 99 35M = 63 -208 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;<;;;<4;9:<<<;<<;<<<<<;;<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:5:730:1436 163 chr1 236 99 35M = 403 202 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGT ;;;;;;;;;;;;;;;;;;8;;;;;8;;;;;67777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:57:1672:1890 121 chr1 236 75 40M = 236 0 TATTCAGTTCTAAATATAGAAATTGAAACAGCTGTGTTTA :;;;9<8;;*<<<<<<:<<<<<<<<1:<<<<<<<<<<<7< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:57:1672:1890 181 chr1 236 0 * = 236 0 CCCCCCCCCCCCCCCCCAGCCACTGCGGCCCCCCCAGCCA -+)%)'-'+,,<066,))090+:&486083:5&&:<<5<0 MF:i:192
--EAS1_105:2:299:360:220 99 chr1 237 99 35M = 403 201 ATTCAGTTCTAAATATAGAAATTGAAACAGCTGTG <<<<<<<9<9<<<<<<<<<<<<<<<<<5<;<0<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:24:1037:84 163 chr1 238 99 35M = 415 212 TTCAGTTCTAAATATAGAAATTGAAACAGCTGTGT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<;:<57< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:86:823:683 163 chr1 240 99 35M = 408 203 CAGTTCTAAATATAGAAATTGAAACAGCTGTGTTT <<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;9<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:130:568:978 99 chr1 246 88 35M = 434 223 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGAC 7<<;<<;<7<:;<7<<<<<<<<);4;+<7+3+%;< MF:i:18 Aq:i:24 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS114_45:4:73:1208:495 163 chr1 246 99 35M = 431 220 TAAATATAGAAATTGAAACAGCTGTGTTTAGTGCC ;;;;;;;;;;;;;;;;;;;;;;;;5;;;;;37377 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:264:642:506 99 chr1 247 99 35M = 420 208 AAATATAGAAATTGAAACAGCTGTGTTTATTGTAT <<;<<<<<<;<<<;:;;:;;<<;<<<<;*+;*&.4 MF:i:18 Aq:i:56 NM:i:3 UQ:i:28 H0:i:1 H1:i:0
--EAS114_28:5:104:350:749 163 chr1 247 99 36M = 415 204 AAATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <<8<<<<<<<<<<<;<<<<<<<<0;<<<9;<85;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:227:259:597 147 chr1 248 99 35M = 61 -222 AATATAGAAATTGAAACAGCTGTGTTTAGTGCCTT <8<;2;9;<;;-92<;;;<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:113:809:364 99 chr1 250 99 35M = 413 198 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<7<;<;<<<4 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:218:877:489 83 chr1 250 86 35M = 80 -205 TATAGAAATTGAAACAGCTGTGTTTAGTGCCTTTG 9<<<8<<<;<9<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:20:979:96 83 chr1 254 99 35M = 79 -210 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA '9996;(:;-<;1<<<<=<<<<=<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:259:219:114 99 chr1 254 99 35M = 411 192 GAAATTGAAACAGCTGTGTTTAGTGCCTTTGTTCA <<<<<<<<<<<<<<<;<<<<<<7<7<<<<<0<<9< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:13:1034:1144 99 chr1 256 99 35M = 429 208 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<<<<<<<<<<<<<<<<<<<<<<<3<<<;<<;<++ MF:i:18 Aq:i:69 NM:i:2 UQ:i:48 H0:i:1 H1:i:0
--EAS221_1:2:29:1486:672 147 chr1 256 99 35M = 79 -212 AATTGAAACAGCTGTGTTTAGTGCCTTTGTTCACA <<:<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<++ MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS139_11:7:46:695:738 163 chr1 259 74 35M = 428 204 TGAAACAGCTGAGTTTAGCGCCTGTGTTCACATAG <;<<<<;<<),&4<3<<7&7<0;)).3;79;7<;0 MF:i:130 Aq:i:74 NM:i:3 UQ:i:18 H0:i:0 H1:i:0
--EAS139_11:8:26:1221:222 163 chr1 261 99 35M = 446 220 AAACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:190:727:308 147 chr1 263 99 35M = 103 -195 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:284:261:124 83 chr1 263 99 35M = 79 -219 ACAGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTG ===27===.====&===========;;======== MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:141:80:875 147 chr1 265 99 35M = 110 -190 AGCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCA 6/<;84<;<;<<<<<<5<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:24:1135:563 163 chr1 266 99 40M = 446 220 GCTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAACC <<<<:<<<<:1:<<<<<<.<<<<<<<<;<;;;43+:30:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:90:986:1224 83 chr1 267 99 35M = 67 -235 CTGTGTTTAGTGCCTTTGTTCAACCCCCTTGCAAC <7*37;;;;;;;9<<;<7<<<<<<<<<<<;;<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:287:492:169 99 chr1 269 99 36M = 449 216 GTGTTTAGTGCCTTTGTTCAACCCCCTTGCAACAAC <<<7<<<<<<<<<<<<<<<<<<<<<<<8;;<;6<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:48:9:409 99 chr1 271 75 18M5I12M = 464 228 GTTTAGTGCCTTTGTTCACATAGACCCCCTTGCAA <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:1:87:1222:878 163 chr1 272 10 40M = 435 203 TATAGGGCCTTTGTTCAAACCCCTTGCAACAACCTTGAGA &+6<6&<:<<9<1112<<;)9227</);;;2-79;)/769 MF:i:18 Aq:i:10 NM:i:3 UQ:i:41 H0:i:0 H1:i:0
--B7_591:7:200:192:373 163 chr1 275 75 14M5I17M = 451 212 AGTGCCTTTGTTCACATAGACCCCCTTGCAACAACC <<<<<<<<<<<<<<<<<<<<<<<<<:<:<;5<<;<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_65:1:163:846:223 163 chr1 278 74 11M5I19M = 463 220 GCCTTTGTTCACATAGACCCCCTTGCAACAACCTT <<<<;<<;4<<<;;9<<<<<+<<;<</27;;47;. MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:7:283:799:560 83 chr1 283 66 35M = 121 -197 ACATAGACCCCCTTGCAACAACCTTGAGAACCCCA <4<6<8;;6<<<+;<:<<;<<<<<<<<<<<<<<<< MF:i:130 Aq:i:66 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_595:4:84:802:737 147 chr1 284 68 35M = 140 -179 CATAGACCCCCTTGCAACAACCTTGAGAACCCCAG +<1<-;69;;;;8;:<<6<;<<<<<<<<<<<<<<< MF:i:130 Aq:i:68 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_66:5:308:400:602 163 chr1 285 71 35M = 470 220 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG ;<<<<<<<<<<<<<<<<<<<<<<<<;;;<<;<;76 MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS54_81:2:285:367:932 163 chr1 285 74 35M = 440 190 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG ===========;======;=====;=======5== MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:1:70:147:84 83 chr1 285 73 35M = 128 -192 ATAGACCCCCTTGCAACAACCTTGAGAACCCCAGG <<<:<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<; MF:i:130 Aq:i:73 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_62:3:314:386:190 99 chr1 287 98 35M = 459 207 AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA ++<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS56_65:1:53:272:944 99 chr1 287 99 35M = 447 195 CAACCCCCTTGCAACAACCTTGCGAACCCCAGGGA <<<<<<<<<<<<.7<.<<<<<<-<-<<<<<&<222 MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS188_7:5:112:51:128 163 chr1 287 99 35M = 477 225 AGACCCCCTTGCAACAACCTTGAGAACCCCAGGGA ++<<<<<<<<<<<<<5<<<<<<<<<<<<<<;<;<6 MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS56_57:6:44:280:641 163 chr1 288 99 35M = 454 201 AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA ;<<<<<<<<<<66<;<<<<<;<<2;;;<<;;;;,; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:75:946:1035 99 chr1 288 99 35M = 480 227 AACCCCCTTGCAACAACCTTGAGAACCCCAGGGAA <<<<<<<<<<;<<<;<<<<<<<8;<6<<<<44<:4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:187:227:818 83 chr1 290 99 35M = 129 -196 CCCCCTTGCAACAACCTTGAGAACCCCAGGGAATT <<9<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:40:1128:1940 83 chr1 291 99 35M = 112 -214 CCCCTTACAACAACCTTGAGAACCCCAGGGAATTT <<<:///77:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS54_71:4:72:63:435 99 chr1 293 99 34M = 490 232 CCTTGCAACAACCTTGAGAACCCCAGGGAATTTG <<<<<<<<<<<<<<<<<<<<;<<<;<;;39:7:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:271:244:568 99 chr1 294 99 35M = 481 222 CTTGCAACAACCTTGAGAACCCCAGGGAATTTGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:82:902:868 99 chr1 295 99 35M = 471 211 TTGCAACAACCTTGAGAACCCCAGGGAATTTGTCA <<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:313:83:546 163 chr1 296 99 35M = 454 193 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<;<<<<<<<<<<<<<<4<<<:<;<<9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:57:786:414 163 chr1 296 99 35M = 453 192 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<<<<<<<<<<<<<<:<<:<<:;;7<7 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:260:985:520 163 chr1 296 99 35M = 468 207 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA <<<<<<<<<<<<<<<<<;:;<<;<:<<<,:1;)<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:170:169:57 83 chr1 296 99 35M = 138 -193 TGCAACAACCTTGAGAACCCCAGGGAATTTGTCAA 778<:<<<9<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:199:327:965 163 chr1 297 91 35M = 494 232 NCAACAACCTTGAGAACCCCAGGGAATTTGTCAAT !,+*+++++++++++*+++++++**)+*+**+(** MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--B7_610:5:147:68:353 163 chr1 299 99 35M = 486 222 AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT <;<;<<7<<<<<<<7<<;;<7<4<8<<<8.;4;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:225:195:543 147 chr1 299 99 35M = 123 -211 AACAACCTTGAGAACCCCAGGGAATTTGTCAATGT ;;8;;+;(<<<<<<<<7;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:303:184:14 163 chr1 301 99 35M = 479 213 CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA <<<<<<8<0<<<<-<-98<<--<<<6;076;75+& MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:326:309:149 163 chr1 301 99 35M = 467 201 CAACCTTGAGAACCCCAGGGAATTTGTCAATGTCA <<<<<<<<<<<<<<<<<<<<:<<<<<<<<<;;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:327:795:103 147 chr1 302 99 35M = 133 -204 AACCTTGAGAACCCCAGGGAATTTGTCAATGTCAG ;::;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:110:355:323 99 chr1 303 99 35M = 477 209 ACCTTGAGAACCCCAGGGAATTTGTCAATGTCAGG <<<<<<<<<<<<<<<<<<<<<<<<;<<<<;;<<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:18:1418:237 99 chr1 304 99 35M = 503 234 CCTTGAGAACCCCAGGGAATTTGTCAATGTCAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<7< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:112:203:90 163 chr1 305 99 35M = 470 200 CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA <<:<<<<<<<<.<<<<<<<<<<<<6<:867<8884 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:319:246:304 99 chr1 305 99 35M = 472 202 CTTGAGAACCCCAGGGAATTTGTCAATGTCAGGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:114:714:317 147 chr1 311 99 35M = 126 -220 AACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGC ;8<;:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:327:991:508 99 chr1 312 99 35M = 495 218 ACCCCAGGGAATTTGTCAATGTCAGGGAAGGAGCA <<<<<<<<<<<<<<<<<<<<<;<;:<7:47;:75; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:77:29:126 147 chr1 315 99 35M = 131 -219 ACAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT ()9;;<<<<<<<<<<5<<<7<<<<<<;<<<;7<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS219_1:1:37:1004:1136 99 chr1 315 99 35M = 473 193 CCAGGGAATTTGTCAATGTCAGGGAAGGAGCATTT <<<<<<<<<<<<<<;<<<;<<<<<:<<;;369<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:78:583:670 83 chr1 316 99 35M = 142 -209 CAGGGAATTTGTCAATGTCAGGGAAGGAGCATTTT 8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:90:435:691 147 chr1 318 99 35M = 147 -206 GGGAATTTGTCAATGTCAGGGAAGGAGCATTTTGT ;;<;;;+<<:<<<:<;;<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:69:735:1915 147 chr1 321 99 35M = 154 -202 AATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAG <<::<<<7<<<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:324:728:956 147 chr1 322 99 35M = 165 -192 ATTTGTCAATGTCAGGGAAGGAGCATTTTGTCAGT <;;;;5;<<0<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:269:280:716 99 chr1 323 99 35M = 490 202 TTTGTCAATGTCAGGGAAGGAGCATTTTTTCAGTT <<<<<<<<<2<<:2:1<<7/2/:3<<<<*<3($<< MF:i:18 Aq:i:58 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_73:3:88:24:744 163 chr1 325 84 35M = 484 194 TGTCAATGTCAGGGAAGGAGCATTTTTGAAGTTTA <7*:<<::.'<<<<:<<:<<'<63'6+'303*%%+ MF:i:18 Aq:i:21 NM:i:5 UQ:i:53 H0:i:0 H1:i:0
--EAS1_108:7:82:926:112 147 chr1 328 99 35M = 164 -199 CAATGTCAGGGAAGGAGCATTTTGTCAGTTGCCAA <1:/<*6<<6<<<<<6<<<<<<4<<<<82<+<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS56_63:7:185:213:330 163 chr1 328 99 35M = 502 209 CAATGTCAGGGAAGGAGCATTTTGTCAGTTACCAA <<<<<<<<<;<<;<<<<<;<<<<;;;<<;<<;<38 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:277:458:330 163 chr1 329 99 36M = 490 197 AATGTCAGGGAAGGAGCCTTTTGTCAGTTACCAAAT <<7<<<<<<<<<2<<<%,<6<&<<,<<<<:<<<<(7 MF:i:18 Aq:i:41 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--B7_595:1:81:1000:375 163 chr1 329 90 35M = 524 230 NATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAA !.............................+.(+. MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS220_1:8:33:672:473 99 chr1 330 99 35M = 515 220 ATGTCAGGGAAGGAGCATTTTGTCAGTTACCAAAT <<<<<<<<7<7<7<<62<<<<66<15*/99*5241 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:164:797:930 147 chr1 332 99 35M = 173 -194 GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGT ;;:;8<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:155:68:326 147 chr1 332 99 36M = 182 -186 GTCAGGGAAGGAGCATTTTGTCAGTTACCAAATGTG ;<<<:6<<<<<<6<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:202:39:380 99 chr1 334 99 35M = 513 214 CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT <<<<<<<<<<<<<<<<<;<<:;<<18<84:<&<+< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:42:1091:1726 99 chr1 334 99 35M = 502 203 CAGGGAAGGAGCATTTTGTCAGTTACCAAATGTGT <<<<<<<<<<<<<<<<<<<<<<8<<<<<<8:<.<: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:66:959:1311 83 chr1 336 95 35M = 159 -212 GGGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT 67.68:4::6;;;7:6:;:5;8;;<<:;;<;;;;< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:200:559:765 99 chr1 337 99 36M = 521 220 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTAT <<<<<<<<<<<<<<7<<<<<<;<<;;4<7<9;<<-; MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:328:669:662 99 chr1 337 99 34M = 512 210 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTT <<<<<<<<<<<<<<<<<<<<<<<<+9;<;;.<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:159:125:297 83 chr1 337 99 35M = 170 -202 GGAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA 89<;;8<<;<;<4<;<8<<<<;;8<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:19:886:279 147 chr1 337 99 35M = 182 -190 GAAAGGAGCATTTTGTCAGTTACCAAATGTGTTTA 9%<2)2.2::<;<<<2<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:67 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--B7_595:1:209:653:400 83 chr1 340 99 35M = 175 -200 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA <69<98<+<<6<<4<<<<</4<<:<4<<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:294:525:849 83 chr1 340 99 35M = 167 -208 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA ;<;:;:<;<;<<<3<<<;<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:87:1375:1303 163 chr1 340 99 35M = 529 224 AGGAGCATTTTGTCAGTTACCAAATGTGTTTATTA <<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:325:759:288 147 chr1 341 99 35M = 163 -213 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC 9;<9<;<;;<;<;<;<<<:<;<<<;<<<<<;<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:76:786:458 163 chr1 341 99 35M = 502 196 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC <<.<<<<2<<:84<:<<<:<8<<)<)429<2<<8< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:210:880:606 163 chr1 341 99 35M = 518 212 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAT <<<<<<<<<<<<<<<<<<;<<<<<<:<<<<3<<8& MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS192_3:3:257:611:440 99 chr1 341 99 35M = 524 218 GGAGCATTTTGTCAGTTACCAAATGTGTTTATTAC <<<<<<<<<<<<<<<<<<<<8<<<<;<<<<8<<+5 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:303:402:142 83 chr1 343 99 35M = 181 -197 AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA ;;;;;<9<<8;<<<<7<<;<<<<;<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:13:122:187 83 chr1 343 99 35M = 153 -225 AGCATTTTGTCAGTTACCAAATGTGTTTATTACCA <<&<;;<<<;7<<<<;<;<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:80:885:513 163 chr1 344 99 35M = 507 198 GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG <<<<<<<<<<<<<<<<<<<:<<<<2:<;<<75<7; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:90:1873:89 99 chr1 344 99 35M = 531 222 GCATTTTGTCAGTTACCAAATGTGTTTATTACCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<7<<<7 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:1:37:652:403 83 chr1 347 99 35M = 193 -189 TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG <;<<<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:28:701:724 163 chr1 347 99 35M = 521 209 TTTTGTCAGTTACCAAATGTGTTTATTACCAGAGG <<<<<<7<<<<<<7::<:<<-<<::::::<747:: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:66:655:769 99 chr1 348 99 35M = 515 202 TTTGTCAGTTACCAAATGTGTTTATTACCAGAGGG 8;<<<<<8<<<<<;<<<7<;<<<<<;<7<27<;;7 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:231:339:551 163 chr1 350 99 35M = 527 212 TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT <<<<<<;<<<<<<;<<<<<<<<<<;5<<46;<;:1 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:129:694:359 163 chr1 350 88 35M = 525 210 TGTCAGTTACCAAATGTGTTTATTACCCGAGGGAT ============+7=======:==;;;'=;==7;= MF:i:18 Aq:i:43 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--EAS220_1:2:62:1109:804 83 chr1 350 99 35M = 176 -209 TGTCAGTTACCAAATGTGTTTATTACCAGAGGGAT <<<<<:<<<::<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:157:935:374 99 chr1 353 99 35M = 512 194 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <<<<<<<<<<;<<;;<<<<<<<<<::8'5++;+11 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:103:111:720 99 chr1 353 99 36M = 512 195 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGAG <<<<<<<<<<<<<<<<<<<<<<<<<5<<<5;<5<:; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:311:100:539 163 chr1 353 99 35M = 508 190 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <<<<;<<<<;<<<<<;<<<<<<<<<:<::;7;<0; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:195:348:703 83 chr1 353 99 35M = 215 -173 CAGTTACCAAATGTGTTTATTACCAGAGGGATGGA <9<<9</<<<<<<<<<<<<<<2<8<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:72:308:839 163 chr1 354 99 40M = 517 203 AGTTACCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG <<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<99494416: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:133:460:542 147 chr1 356 99 36M = 195 -197 TTACCAAATGTGTTTATTACCAGAGGGATGGAGGGA ;:;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:293:355:321 83 chr1 356 99 35M = 174 -217 TTACCAAATGTGTTTATTACCAGAGGGATGGAGGG <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:323:639:311 83 chr1 357 99 36M = 200 -193 TACCAAATGTGTTTATTACCAGAGGGATGGAGGGAA -94<<<<<<<4<<<<<<<<2<<<<<7<<<-<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:321:642:388 83 chr1 357 99 33M = 181 -209 TACCAAATGTGTTTATTACCAGAGGGATGGAGG 19<<<<<8<<<<<<<<;<<<<<<<<<<7<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:4:262:456:74 99 chr1 357 99 35M = 504 182 TACCAAATGTGTTTATTACCAGAGGGATGGAGGGA <<<<<<<<<<<<<<<<<<<<:;;:;7:<::7<7:3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:95:426:791 99 chr1 359 99 35M = 547 223 CCAAATGTGTTTATTACCAGAGGGATGGAGGGAAG <<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<,<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:115:538:276 83 chr1 360 99 35M = 209 -186 CAAATGTGTTTATTACCAGAGGGATGGAGGGAAGA :<<<<<<<<;;<5<<;<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:196:533:921 99 chr1 361 99 35M = 526 200 AAATGTGTTTATTACCAGAGGGATGGAGGGAAGAG =====1========8===:===7======971=3= MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:121:380:656 99 chr1 362 99 35M = 542 215 AATGTGTTTATTACCAGAGGGATGGAGGGAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<:<:<<83<:<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:34:970:1374 99 chr1 363 99 35M = 520 192 ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG <<<<<<<<<<<<<<;7<77;<<;<;;9;;:86::: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:29:1061:574 163 chr1 363 99 35M = 563 235 ATGTGTTTATTACCAGAGGGATGGAGGGAAGAGGG <<<<<<<<<<<<<<<<<<;<<<<<<;<<8<:<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:124:243:35 99 chr1 364 60 35M = 544 215 TGTGTTTATTACCAGAGGGATGGAGGGAAGAGCGA <<<<<;;<<<<<<:<<<.<<<:++5+:1(;1;$<( MF:i:18 Aq:i:60 NM:i:1 UQ:i:3 H0:i:1 H1:i:0
--EAS114_30:2:272:750:698 163 chr1 365 80 35M = 538 208 GTGTTTATTACCAGAGGGATGGAGGGATGACGGAC <)<<<<<7;<<<4<;7<<<<78068:(%<3*861, MF:i:18 Aq:i:37 NM:i:2 UQ:i:13 H0:i:0 H1:i:1
--EAS56_53:3:126:558:408 83 chr1 368 99 35M = 206 -197 TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT <:<<:;;<<<<<<<<8<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:1:1140:1206 83 chr1 368 99 35M = 181 -222 TTTATTACCAGAGGGATGGAGGGAAGAGGGACGCT 77977::99;;;:;;<;;;:;;;<<;<;;;;<;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:141:711:813 147 chr1 370 99 35M = 209 -196 TATTACCAGAGGGATGGAGGGAAGAGGGACGCTGA =<5<5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:282:274:50 83 chr1 371 99 35M = 193 -213 ATTACCAGAGGGATGGAGGGAAGAGGGACGCTGAA </7;/:<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:485:482 99 chr1 371 94 35M = 530 194 ATTACCAGAGGGATGAAGGGAAGAGGGACGCTGAA <<<<<<<<<<<<<<<<<<<<<<<6<<<<<:<:89< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_63:1:119:446:185 163 chr1 372 99 35M = 562 225 TTACCAGAGGGATGGAGGGAAGAGGGACGCTGAAG <<<<<<<7<<<4<<<<9<<54<:<7<5:<::7-5; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:168:69:605 163 chr1 373 67 36M = 565 228 TACCCGAGGGATGGAGGGTAGAGGGACGCTGAAGTG <<<4(<<<<<<<<<<<<<(1<6<-<2<<7<<6<<++ MF:i:18 Aq:i:26 NM:i:4 UQ:i:59 H0:i:0 H1:i:0
--EAS114_32:6:78:909:394 163 chr1 373 81 35M = 554 216 TACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGA <<<<<<8<<<&<<<-<<<14,4;<<-0<2+<)/82 MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:5:41:118:1246 99 chr1 374 99 35M = 548 209 ACCAGAGGGATGGAGGGAAGAGGGACGCTGAAGAA <<<<<<<<<<<<<<<<<<<<<<<</<<<<<<1<<( MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:44:498:945 147 chr1 377 82 35M = 195 -217 ATAGGGATGGAGGGAAGAGGGCCGCTGAAGAACTT <%*50<7<4<<<7<,<<.<8/,9<:</<<<;<;<< MF:i:18 Aq:i:37 NM:i:2 UQ:i:15 H0:i:0 H1:i:1
--EAS114_39:5:50:972:1286 163 chr1 377 99 35M = 559 217 AGAGGGATGGAGGGAAGAGGGACGCTGAAGAACTT <<<<<<<<<<<<<<<<<;<<<<<<<<<6<<7:7:; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:82:164:1924 163 chr1 378 99 35M = 542 199 GAGGGATGGAGGGAAGAGGGACGCTGAAGAACTTT <<<<<<<<<<<<<<<<<<<<8<<<<<<3<<'<7<8 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:14:426:613 147 chr1 379 99 35M = 214 -200 AGGGAGGGAGGGAAGAGGGACGCTGAAGAACTTTG :<<<<&<<<<<<<<<<<<<<6<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_61:4:83:452:970 147 chr1 379 99 35M = 216 -198 AGGGATGGAGGGAAGAGGGACGCTGAAGAACTTTG <<<39<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:157:643:175 83 chr1 380 99 35M = 206 -209 GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA ;<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:61:1797:113 99 chr1 380 99 35M = 551 206 GGGATGGAGGGAAGAGGGACGCTGAAGAACTTTGA <<<<<<;<<<<;:<3<<<<;;<<<8<<;:<<;3<. MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:90:828:633 163 chr1 381 99 36M = 537 192 GGATGGAGGGAAGAGGGACGCTGAAGAACTTTGATG <<<<<<<<<<<8<;96<;<<<<<99<2<<;<96<8; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:61:433:385 163 chr1 381 99 35M = 579 233 GGATGGAGGGAAGAGGGACGCTGAAGCACTTTGAT <<<<<<<<<<<<<<<<<;<<;<<6<<)91<<;;,; MF:i:18 Aq:i:43 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--EAS1_93:2:173:995:93 83 chr1 382 99 35M = 215 -202 GCTGGAGGGAAGAGGGACGCTGAAGAACTTTGATG <(0<<9<<<7<<<<<<7<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:73 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS54_71:3:254:32:275 99 chr1 382 99 34M = 575 228 GATGGAGGGAAGAGGGACGCTGAAGAACTTTGAT <<<<<<<<<<<<<<<<<<<<<<;;<:<::<:2*< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:282:817:710 147 chr1 384 99 35M = 211 -208 TGGAGGGAAGAGGGACGCTGAAGAACTTTGATGCC 366=6;======8====:========;======== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:75:217:337 163 chr1 386 99 35M = 568 217 GAGGGAAGAGGGACGCTGAAGAACTTTGATGCCCT ;;;;;;;;;;;;;;;;;;8;;;;;;;;;;;88787 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:181:191:418 83 chr1 387 99 36M = 221 -202 AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:160:896:275 83 chr1 387 99 35M = 220 -202 AGGGAAGAGGGACGCTGAAGAACTTTGATGCCCTC ;;;9;<<<<<<;<;;<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:88:1656:896 99 chr1 387 99 40M = 538 191 AGGGAAGAGGGATGCTGAAGAACTTTGATGCCCTCTTCTT <<<9<<<<<<<9<<<;<<<<<<<<<;6<<;7<<<<::9:; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_597:8:186:850:838 147 chr1 389 99 35M = 205 -219 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <;<;<;<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:64:1318:1711 147 chr1 389 99 35M = 218 -206 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:78:1478:1446 99 chr1 389 99 35M = 560 206 GGAAGAGGGACGCTGAAGAACTTTGATGCCCTCTT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<:<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:82:879:246 163 chr1 391 99 35M = 576 220 AAGAGGGACGCTGAAGAATTTTGATGCCCTCTTCT <<<<<<<<<<<<<<<<<<&<<<77<<-<<<6<62< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_610:1:139:152:856 147 chr1 392 99 35M = 198 -229 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT <<<<<;<<<<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:162:503:769 99 chr1 392 99 35M = 571 214 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT ========================:========== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:216:988:883 163 chr1 392 99 35M = 584 227 AGAGGGACGCTGAAGAACTTTGATGCCCTCTTCTT <<<<<<<<<<<<8;<;88<;8;;;;828;8;8;;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:118:523:591 163 chr1 393 99 35M = 563 205 GAGGGACGCTGAAGAACTTTGATGCCCTCTTCTTC <<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<;;<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:3:168:741:680 163 chr1 394 99 35M = 562 203 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC <<<<<<<<<<<<<<<<<<<<<<<<<1<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:9:1289:215 147 chr1 394 99 35M = 231 -198 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC 7747*7;;;;+;;:2;7;:1;;9:;:;:;;:;::; MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:84:275:1572 83 chr1 394 99 35M = 230 -199 AGGGACGCTGAAGAACTTTGATGCCCTCTTCTTCC 777777::7:;74;:;:7;:::;;;;:;;8;;;<; MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:77:789 83 chr1 396 99 35M = 223 -208 GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA 9<;<:<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:62:879:264 83 chr1 396 99 35M = 216 -215 GGACGCTGAAGAACTTTGATGCCCTCTTCTTCCAA ====:=<============================ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:89:525:113 83 chr1 397 78 40M = 227 -210 GACGCTGAAGAACTTTGATTCCCTCTTCTTCCAAAGATGA );:+4-&<<+<<:<+<)<<<7<8<8:<:<<:<82::<<2< MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_39:2:18:967:582 83 chr1 398 99 35M = 200 -233 ACGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAG <:<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:140:522:212 163 chr1 399 99 35M = 568 204 CGCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA <<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<;95; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:125:628:79 83 chr1 400 99 34M = 229 -205 GCTGAAGAACTTTGATGCCCTCTTCTTCCAAAGA 95&<<<<<<<63<<<6<<<<8<;<<8<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:185:312:167 163 chr1 401 99 35M = 562 196 CTGAAGAACTTTGATGCCCTCTTCTTCCAAAGATG ===========================;855;=== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:248:753:731 147 chr1 402 99 35M = 231 -206 TGAAGAACTTTGATGCCCTCTTCTTCCAAAGATGA 7;55;=,=89=====3===9=======9======= MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:299:360:220 147 chr1 403 99 35M = 237 -201 GAAGAACTTAGATGCCCTCTTCTTCCAAAGATGAA 66<;;4;<<()<<4<<<<<<;<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS114_45:6:5:730:1436 83 chr1 403 99 35M = 236 -202 GAAGAACTTTGATGCCCTCTTCTTCCAAAGATGAA 7977979;;;;;;;;;7;3<;2<;26;<;<<;;<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:134:868:252 99 chr1 404 99 36M = 595 227 AAGAACTTTGATGCCCTCTTCTTCCAAAGATGAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:165:431:857 99 chr1 406 99 35M = 559 188 GAACTTTGATGCCCTCTTCTTCCAAAGATGAAACG <<<<<<<<<<<<<<<<<<<<<<<6&:<7<:76,;; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:86:823:683 83 chr1 408 99 35M = 240 -203 ACTTTGATGCCCTCTTCTTCCAAAGATGAAACGCG <4<<<<<<<<:<<6<<7<<<8<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:176:168:513 83 chr1 410 99 35M = 210 -235 TTTGATGCCCTCTTCTTCCAAAGATGAAACGCGTA ;0;;;7:<<<<<<<;<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:259:219:114 147 chr1 411 99 35M = 254 -192 TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA 666<:6/:6::6::<:::<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:84:1013:1074 121 chr1 411 71 35M = 411 0 TTGATGCCCTCTTCTTCCAAAGATGAAACGCGTAA 8;;<;8744<7<<4<<47<<<<<<7<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:84:1013:1074 181 chr1 411 0 * = 411 0 GCAAGGGGGTCTATGTGAACAAAGGCACTAAACAC <7<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS54_81:7:325:150:465 99 chr1 412 99 35M = 598 221 TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<3;;: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:179:13:782 163 chr1 412 99 35M = 568 191 TGATGCCCTCTTCTTCCAAAGATGAAACGCGTAAC <<<<<<<<<<<<<<<<<:<<:7<<<<::<7<:-:1 MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:113:809:364 147 chr1 413 99 35M = 250 -198 GATGCCCTCTTCTTCCAAAGATGAAACGCGTAACT ;<;;;<<<:<6<<<::<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:188:802:71 83 chr1 415 99 35M = 232 -218 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC ;;;;<:::<<<<<7<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:204:264:413 99 chr1 415 96 34M = 593 213 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTG <<<<<<<<<<<<<;:59<+<<:<<<9<<;:62<) MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:104:350:749 83 chr1 415 99 36M = 247 -204 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGCG ;<93;9;<3;<<<;<<<<<;<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:24:1037:84 83 chr1 415 99 35M = 238 -212 TGCCCTCTTCTTCCAAAGATGAAACGCGTAACTGC <;<<;<<<7<<7&<<<<<<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:242:354:637 147 chr1 417 99 36M = 222 -231 CCCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT 8<;;;;;<<<8;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:37:761:635 99 chr1 418 99 35M = 581 198 CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT <6<<<<<<6<<<<<<<<<<<<<<<<<8<8<<4<4< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:44:1578:1674 99 chr1 418 99 35M = 573 190 CCTCTTCTTCCAAAGATGAAACGCGTAACTGCGCT ;<<;<<;<<;;;;;9<;9;;<9:;;<:;9;76669 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:120:63:653 99 chr1 420 99 35M = 598 213 TCTTCTTCCAAAGATGAAACGCGTAACTGCGCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<9<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:264:642:506 147 chr1 420 99 35M = 247 -208 ACTTCATCCAAAGATGAAACGCGTAACTGCGCTCT &;(-/)-1&:<<9<25<<<<2<1<';8<<<:888< MF:i:18 Aq:i:56 NM:i:2 UQ:i:13 H0:i:1 H1:i:0
--EAS188_7:3:101:572:491 99 chr1 425 99 35M = 600 210 TTCCAAAGATGAAACGCGTAACTGCGCTCTCATTC <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<1<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:27:1881:486 163 chr1 427 99 35M = 607 215 CCAAAGATGAAACGCGTAACTGCGCTCTCATTCAC ;;;;;;;;;;;;;;1;;;;;;;;78;8;8;8878/ MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:120:14:944 163 chr1 428 99 35M = 621 228 CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT <<<<<<<<<<<<<<<;<<<<<;<<<<<<<:;8;;7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:46:695:738 83 chr1 428 74 35M = 259 -204 CAAAGATGAAACGCGTAACTGCGCTCTCATTCACT <<<<2<5<<-<<<<<<<4<<<<<<<<<<<<<<3<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:13:1034:1144 147 chr1 429 99 35M = 256 -208 AAAGATGAAACGCGTAACTGCGCTCTCATTCACTC <<:%<9)<<<<<<8<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:91:360:585 99 chr1 430 99 35M = 586 191 AAGATGAAACGCGTAACTGCGCTCTCATTCACTCC <<<<9<<<<<;<<<;<<77<<<;<;;<;;<;<;;< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:73:1208:495 83 chr1 431 99 35M = 246 -220 AGATGAAACGCGTAACTGCGCTCTCATTCACTCCA 8-889<<;<;;:<;<;;;;;;<<;;<;;;;<<;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:16:1081:1894 163 chr1 431 99 35M = 624 228 AGATGAAACGCGTAACTGGGCTCTCATTCACTCCA <<<<<<<<<<<<<<<<<<8<<<<;<<;<<<<<<<+ MF:i:18 Aq:i:45 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS188_4:7:35:408:348 117 chr1 433 0 * = 433 0 GGTTCTCAAGGTTGTTGCAATGGGGTCTATGTGAA .73<;<<:77<<<<<<<<<<-<<;<<<<<<<<<<< MF:i:192
--EAS188_4:7:35:408:348 185 chr1 433 35 35M = 433 0 AAGAAACGCGTAACTGCGCTCTCATACACTCCAGC 4,'3<6;)2);<3<-6<;<;7+7<5+<<<7<<<<< MF:i:64 Aq:i:0 NM:i:2 UQ:i:21 H0:i:0 H1:i:1
--EAS56_53:4:130:568:978 147 chr1 434 88 35M = 246 -223 TGAAACGCGAAACTGCACTCTCATTCACTCCAGCT --;066;;62<<<2&<+<+<2;<<2<<<;<<<7<< MF:i:18 Aq:i:24 NM:i:2 UQ:i:27 H0:i:0 H1:i:0
--EAS139_19:1:87:1222:878 83 chr1 435 34 40M = 272 -203 TCAGCGCGTCACTCCGCTCTCATTCACCCCAGCTCCCTGT !!;*:885<&<<<)8&<:<<<8<8<::*<4<88<<<8<<< MF:i:18 Aq:i:10 NM:i:6 UQ:i:42 H0:i:0 H1:i:0
--EAS51_64:6:143:763:480 117 chr1 436 0 * = 436 0 CTGAAGGTTGTTGCAAGGGGGTCTATGTGAACAAA ;<&-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS51_64:6:143:763:480 185 chr1 436 70 35M = 436 0 AAACGCGTAACTGCGCTCTCATTCACTCCAGCTCC ::3<:6<<<:<<<<7<<<<<<<<)6<<<1<<<<;< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:145:607:216 163 chr1 437 99 35M = 596 194 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC <<<<<<<<8<<<<<<<<<<4<<<7<:<<1<<;;99 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:46:285:790 121 chr1 437 72 35M = 437 0 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ;;<8<;<<<<88<8<<;;<;<<;<<<<<<<<;<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:46:285:790 181 chr1 437 0 * = 437 0 TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG !!<<3<<<;;<<<<<<<<<;<;7<<7<<<<<<;<< MF:i:192
--EAS56_59:4:329:577:757 117 chr1 437 0 * = 437 0 TCAAGGTTGTTGCAAGGGGGTCTATGTGAACAAAG !!<<<<9;<:<<;<<<<<<<<;<<<<<<<<<<<<< MF:i:192
--EAS56_59:4:329:577:757 185 chr1 437 72 35M = 437 0 AACGCGTAACTGCGCTCTCATTCACTCCAGCTCCC ;;;888;<<<<<<6<<<2;<<<<<<;<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:57:722:347 163 chr1 439 99 35M = 599 195 CGCGTAACTGCGCTCTCATTCACTCCAGCTCCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:285:367:932 83 chr1 440 74 35M = 285 -190 GCGTAACTGCGCTCTCATTCACTCCAGCTCCCTGT 9=5==;=;7===;==;=================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:38:842:395 73 chr1 442 77 35M * 0 0 GTAACTGCGCTCTCATTCACTCCAGCTCCCTGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<93<;9 MF:i:32 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:14:601:624 163 chr1 446 99 35M = 622 211 CTGCGCTCTCATTCACTCCAGCTCCCTGTCAACCC <<1<<<<<<<<<<<<<<<<<3<<::<<7<<1,<:( MF:i:18 Aq:i:69 NM:i:2 UQ:i:18 H0:i:1 H1:i:0
--EAS114_45:3:3:1377:1663 99 chr1 446 99 35M = 626 215 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<;;;;<:;;:<;;<;;<;:;;<;9;;::977676 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:26:1221:222 83 chr1 446 99 35M = 261 -220 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<<<<<<:<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:82:566:1096 99 chr1 446 99 35M = 621 210 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCA <<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:24:1135:563 83 chr1 446 99 40M = 266 -220 CTGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA 6+96:87<&8<<79:<;<<<<:<<;<<<<<<;;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:53:272:944 147 chr1 447 99 35M = 287 -195 TGCGCTCTCATTCACTCCAGCTCCCTGTCACCCAA &94<4&8.6<6&;<:0:8;;:6;<;:<*<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:287:492:169 147 chr1 449 99 36M = 269 -216 CGCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG ;/;6<<<<4(<(<<<<6<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:49:163:904 163 chr1 450 99 35M = 616 201 GCTCTCATTCACTCCAGCTCCCTGTCACCCAATGG ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78958 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:200:192:373 83 chr1 451 75 36M = 275 -212 CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC <<<8<<<4<4<<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:253:285:104 163 chr1 451 99 35M = 627 211 CTCTCATTCACTCCAGCTCCCTGTCACCCAATGGA ======================:========7==; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:151:159:43 99 chr1 452 99 35M = 645 228 TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC <<<<<<<;<<<8<<<;<;8<<<<7<77;;79<09+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:1:115:868:887 163 chr1 452 99 35M = 650 233 TCTCATTCACTCCAGCTCCCTGTCACCCAATGGAC >>>>>>>>>>>>>>;<>>>>><<>>>;<+<</;;1 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:57:786:414 83 chr1 453 99 35M = 296 -192 CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC ;;;8;1;:<<<<;<::;;<<<<;<;;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:197:170:559 121 chr1 453 71 35M = 453 0 CTCATTCACTCCAGCTCCCTGTCACCCAATGGACC <:<;;:<5<5<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:197:170:559 181 chr1 453 0 * = 453 0 TTCTCAAGGTTGTTGCAAGGGGGTCTATGTGAACA :;;;;<<<<<<8<<<<<<<<<<<<<<<<<<<<<<< MF:i:192
--EAS1_103:7:313:83:546 83 chr1 454 99 35M = 296 -193 TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT ;)<994<;<<<<<<<;<<<<<<<<<<<<<<5<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:44:280:641 83 chr1 454 99 35M = 288 -201 TCATTCACTCCAGCTCCCTGTCACCCAATGGACCT 9;<<9;9;;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:60:837:923 163 chr1 457 61 36M = 641 220 TTCACGCCAGCTCCCTGTCACCCAATGGACCTCTGA <<<<<4<<+<<*<<<<88<<<<<'*<4-+<<4&<40 MF:i:18 Aq:i:24 NM:i:2 UQ:i:24 H0:i:0 H1:i:1
--EAS114_45:5:85:401:1190 163 chr1 458 99 35M = 652 229 TCACTCCAGCTCCCTGTCACCCAATGGACCTGTGA 4;;;1;;;;;;.6;;;(;;/;/;3;;;7;(3&063 MF:i:18 Aq:i:55 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:314:386:190 147 chr1 459 98 35M = 287 -207 CACTCCAGCTCCCTGTCACCCAATGGACCTGTGAT 76;%;<<3<9;<69<<<7;;;<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:2:831:692 99 chr1 462 99 35M = 634 207 TCCAGCTCCCTGTCACCCAATGGACCTGTGATATC <<<<<<<<;<<<<<<<<<<9<<:9<<<;;96<796 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:163:846:223 83 chr1 463 74 35M = 278 -220 CCAGCTCCCTGTCACCCAATGGACCTGTGATATCT <7<5<*<<<<0<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:48:9:409 147 chr1 464 75 35M = 271 -228 CAGCTCCCTGTCACCCAATGGACCTGTGATATCTG <<<<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:134:751:831 99 chr1 465 99 36M = 651 222 AGCTCCCTGTCACCCAATGGACCTGTGATATCTGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<948 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:326:309:149 83 chr1 467 99 35M = 301 -201 CTCCCTGTCACCCAATGGACCTGTGATATCTGGAT ;;<<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:260:985:520 83 chr1 468 99 35M = 296 -207 TCCCTGTCACCCAATGGACCTGTGATATCTGGATT ;9;7<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:112:203:90 83 chr1 470 99 35M = 305 -200 CCTGTCACCCAATGGACCTGTGATATCTGGATTCT ;<;:;<;;;<<<<<<<<<:<<<7<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:308:400:602 83 chr1 470 71 35M = 285 -220 CCTGTCACCCAATGGACCTGTGATATCTGGATTCT ;77;2<<;<7<<;<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:82:902:868 147 chr1 471 99 35M = 295 -211 CTGTCACCCAATGGACCTGTGATATCTGGATTCTG <<;;<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:153:977:200 163 chr1 472 99 35M = 640 203 TGTCACCCAATGGACCTGTGATATCTGGATTCTGG ;<<;<<<<7<<;;;;;<<6<<<<<86;;8<;8;6; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:319:246:304 147 chr1 472 99 35M = 305 -202 TGTCACCCAATGGACCTGTGATATCTGGATTCTGG ;;<;;;<<<<8;<<<<;<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:37:1004:1136 147 chr1 473 99 35M = 315 -193 GTCACCCAATGGACCTGTGATATCTGGATTCTGGG </8<<<<7<+<<<<<<<,<<<<<<<<<6<<<<1<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:59:396:359 99 chr1 474 99 35M = 670 231 TCACCCAATGGACCTGTGATATCTGGATTCTGGGA <<9;;<;<;;;;<;;9;;;;;<;;;;;<;;77677 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:45:1769:1130 163 chr1 476 99 35M = 635 194 ACCCAATGGACCTGTGATATCTGGATTCTGGGAAA ;;;;;;;;;;;;9;;;;;;19;;;9;;;;176777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:110:355:323 147 chr1 477 99 35M = 303 -209 CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT 6069;1<<;4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:28:708:463 99 chr1 477 99 36M = 672 231 CCCAATGGACCTGTGATATCTGGATTCTGGGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;<:<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:112:51:128 83 chr1 477 99 35M = 287 -225 CCCAATGGACCTGTGATATCTGGATTCTGGGAAAT ;9<;;:<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:303:184:14 83 chr1 479 99 35M = 301 -213 CAATGGACCTGTGATATCTGGATTCTGGGAAATTC :<<.<;;7<:<<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:84:101:328 163 chr1 480 99 35M = 673 228 AATGGACCTGTGATATCTGGATTCTGGGAAATTCT <<<;<<<<<<<<;<<<<<<<<<<:<;;<44;;<;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:228:354:203 99 chr1 480 99 34M = 643 198 AATGGACCTGTGATATCTGGATTCTGGGAAATTC 88<<<8<<<<<<<<<8<<<<<<<<<4<<<4/9/; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:38:856:336 99 chr1 480 99 33M = 656 211 AATGGACCTGTGATATCTGGATTCTGGGAAATT <<<<<<<<<<<;;<;<;<:69<<;<5-500373 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:75:946:1035 147 chr1 480 99 35M = 288 -227 AATGGACCTGTGATATCTGGATTCTGGGAAATTCT <<)4</<5<<<<<<<<<<<<<<<<<<<<<66<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:271:244:568 147 chr1 481 99 35M = 294 -222 ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT ;<<<<<<;<;<<<<<<<<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:129:477:427 99 chr1 481 99 35M = 652 206 ATGGACCTGTGATATCTGGATTCTGGGAAATTCTT <<<<<<<<<<<<<<<<<<;;<<<<::<9<;<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:262:297:601 163 chr1 482 99 35M = 635 188 TGGACCTGTGATATCTGGATTCTGGGAAATTCTTC <<<<;<<9<<57<<7<<<;<<;77-;;53<<;;<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:88:24:744 83 chr1 484 84 35M = 325 -194 GTCCTGTGATATCTGGATTCTGGGAAATTCTTCAT 4%++88;-9<;<<<+8<<<:<;8:<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--B7_610:5:147:68:353 83 chr1 486 99 35M = 299 -222 CCTTTGATATCTGGATTCTGGGAAATTCTTCATCC <<;;<<<<<<<<+;<<;<<0;<<<<;<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS51_78:7:316:961:576 99 chr1 488 65 35M = 666 213 TGTGATATCTGGATTCTGGGAAATTCTTCATCCCG <<<<<<<;<<<<;<<:<<;<;<<:;<9+34;;6%/ MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_61:8:7:171:402 99 chr1 489 99 35M = 682 228 GTGATATCTGGATTCTGGGAAATTCTTCATCCTGG <<<<<<<<<<<<<<<;/<<<<;<<<<<;<<1<<<4 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:277:458:330 83 chr1 490 99 36M = 329 -197 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGAC <<<<<8;<<<1<;7<<<;<<<<<<<<7<<7<<<<;7 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:269:280:716 147 chr1 490 99 35M = 323 -202 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA 6;<;;6:;<<<;64;<<<<<<<<;<<;<<;<<<<< MF:i:18 Aq:i:58 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:72:63:435 147 chr1 490 99 35M = 293 -232 TGATATCTGGATTCTGGGAAATTCTTCATCCTGGA ::<;<<<<;;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:46:900:610 99 chr1 491 99 35M = 684 228 GATATCTGGATTCTGGGAAATTCTTCATCCTGGAC <<<<<<<<<<<<;<<<<<<<<<<<<<<<<<;;4;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:467:475 99 chr1 493 99 35M = 683 225 TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC <<<<<<<<<<<<;;;<<<<<<<<<:<<<<:+<<;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:201:959:19 99 chr1 493 99 35M = 681 223 TATCTGGATTCTGGGAAATTCTTCATCCTGGACCC <<<<<<<<<<<<<<;<<<:<;<<;<<;+;+<3494 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:240:593:842 99 chr1 494 99 35M = 660 201 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT ============<================9===:= MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:29:381:169 163 chr1 494 99 35M = 641 182 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT <<<<<<<<<<<2<288;<<;<<:4<:<<;&92929 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:199:327:965 83 chr1 494 91 35M = 297 -232 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT <5<:<<<58<:<<<<<<8<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:87:323:895 99 chr1 494 99 35M = 671 212 ATCTGGATTCTGGGAAATTCTTCATCCTGGACCCT ;<<;;;;<<;<959;;;<;:<<;9<;;;4377788 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:327:991:508 147 chr1 495 99 35M = 312 -218 TCTGGATTCTGGGAAATTCTTCATCCTGGACCCTG 0:;::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:6:882:784 163 chr1 496 99 35M = 686 225 CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGA <<<<<<<<<<<<<:<<<<<<<<<<<<:6::::<,2 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:175:705:982 99 chr1 496 89 36M = 660 200 CTGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG <<<<;<<;<<<<<<<<<<<<<;<<+<:;39;+<40< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:30:92:753 99 chr1 497 99 35M = 673 211 TGGATTCTGGGAAATTCTTCATCCTGGACCCTGAG <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:245:323:744 163 chr1 499 99 35M = 679 215 GATTCTGGGAAATTCTTCATCCTGGACCCTGAGAG <;<<<<<<<<<<<<<<<<<<<<<;<+<<<<<<<4< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:76:786:458 83 chr1 502 99 35M = 341 -196 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT ;<;:7<.<<<<<8;<<<<<<<6<;8<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:185:213:330 83 chr1 502 99 35M = 328 -209 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT ;4<<<;<<<<<<<<;<<;;;<<<<9<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:42:1091:1726 147 chr1 502 99 35M = 334 -203 TCTGGGAAATTCTTCATCCTGGACCCTGAGAGATT 4443838<4<8<87<<3</8<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:12:158:458 99 chr1 503 84 36M = 675 208 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT <77<<<7<<<<<<<<<<<<5<4;<<;5<;;+2<+;; MF:i:18 Aq:i:15 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:277:590:364 163 chr1 503 99 35M = 681 213 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC <<<<<8<<<<<<<<;<<<<<;;<7<<;;7858;;8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:18:1418:237 147 chr1 503 99 35M = 304 -234 CTGGGAAATTCTTCATCCTGGACCCTGAGAGATTC <<:<<<<<<<<:<<<<<<<<<:<<<<<<<<<<<<: MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:4:262:456:74 147 chr1 504 99 35M = 357 -182 TGGGAAATTCTTCATCCTGGACCCTGAGAGATTCT 862;<<<:;<;<<<;;;<<<<;;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:186:989:869 99 chr1 505 99 34M = 655 185 GGGAAATTCTTCATCCTGGACCCTGAGAGATTCT <<<<<<<<<<<<<<<<<<<<7;:<<<<<<<<<$< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:80:885:513 83 chr1 507 99 35M = 344 -198 GAAATTCTTCATCCTGGACCCTGAGAGATTCTGCA <7<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:311:100:539 83 chr1 508 99 35M = 353 -190 AAATTCTTCATCCTGGACCCTGAGAGATTCTGCAG ;<;<<;;<;<<;<<<<<;9<<<;<<<<<<<<9<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:199:511:426 163 chr1 509 99 35M = 669 195 AATTCTTCATCCTGGACCCTGAGAGATTCTGCAGC <<<<<<<<<<<<<<;<<<<<<:<<<<<<<<<;:<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:26:227:1053 99 chr1 510 99 35M = 663 188 ATTCTTCATCCTGGACCCTGAGAGATTCTGCAGCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:172:622:707 99 chr1 511 99 35M = 685 209 TTCTTCATCCTGGACCCTGAGAGATTCTGCAGCCC <<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<5:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:157:935:374 147 chr1 512 99 35M = 353 -194 TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCA 94988994.<:<+42::<<<<<:<:<4<<<<;<1< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:103:111:720 147 chr1 512 99 36M = 353 -195 TCTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG ;4<<<;)<<-<9<;<<7<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:328:669:662 147 chr1 512 99 35M = 337 -210 TCTTCATCCTGTACCCTGAGAGATTCTGCAGCCCA 4<<;<<8<.<88.<<;4<<<<<<<4<.<<<<7<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS51_64:5:202:39:380 147 chr1 513 99 35M = 334 -214 CTTCATCCTGGACCCTGAGAGATTCTGCAGCCCAG /92/;2<+2<<<<64<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:66:655:769 147 chr1 515 99 35M = 348 -202 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT 8<<;:69<;:;9<2<*9<;6<<<<<17<;<3+<;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:7:526:343 99 chr1 515 99 35M = 698 218 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT <<<<<<<<<<<<<<<:<<<5<<<<<<5;<<<+8<; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:33:672:473 147 chr1 515 99 35M = 330 -220 TCATCCTGGACCCTGAGAGATTCTGCAGCCCAGCT 5<70<<55<4<24.5<<<<<<<<<6<<<<<<2<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:72:308:839 83 chr1 517 99 40M = 354 -203 ATCGTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT :8:.:<;<<5<<<<<<<<<<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:2 UQ:i:40 H0:i:0 H1:i:1
--EAS56_61:1:210:880:606 83 chr1 518 99 35M = 341 -212 TCCTGGACCCTGAGAGATTCTGCAGCCCAGCTCCA .<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:80:760:490 99 chr1 520 99 34M = 686 201 CTGGACCCTGAGAGATTCTGCAGCCCAGCTCCAG <<<<<<<<<<8<;<7<<<<<<;<;;<2<;<<<1, MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:34:970:1374 147 chr1 520 99 35M = 363 -192 CTGGACCCTGAGAGATTCTGCAGCCCAGATCCAGA <6<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:1:200:559:765 147 chr1 521 99 36M = 337 -220 TGGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT 8<;;4<3;<;<<<<<<5<<;;<<98;;<<<<;<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_53:8:28:701:724 83 chr1 521 99 35M = 347 -209 TGGACCCTGAGAGATTCTGCAGCCCAGCTCCAGAT .;..3;8.8<8;<<;9<9<<<7;<<<<<<<<7<<7 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:318:345:156 163 chr1 522 99 35M = 695 208 GGACCCTGAGAGATTCTGCAGCCCAGATCCAGATT <<<<<<<<:<<<<<<<<5<:5<<<3:'<72')*;9 MF:i:18 Aq:i:39 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--B7_595:1:81:1000:375 83 chr1 524 90 35M = 329 -230 ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGC ;8<;+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:13:1155:631 163 chr1 524 99 40M = 668 184 ACCCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTG <<<<<<;<<;<<<<<<;<<<<<9<;<;94<<%<<<7:777 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:257:611:440 147 chr1 524 99 35M = 341 -218 ACCCTGAGAGATTCTGCAGCCCAGATCCAGATTGC 2<;;8<;;<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:6:129:694:359 83 chr1 525 88 35M = 350 -210 CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT 7777<7<7;77+<3<<;<<;<<<<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:6:11:285:1567 163 chr1 525 99 35M = 685 195 CCCTGAGAGATTCTGCAGCCCAGATCCAGATTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:1:196:533:921 147 chr1 526 99 35M = 361 -200 CCTGAGAGATTCTGCAGCCCAGATCCAGATTGCTT 7<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:2:6:251:1557 163 chr1 526 99 35M = 700 209 CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:20:492:850 99 chr1 526 78 35M = 694 203 CCTGAGAGATTCTGCAGCCCAGCTCCAGATTGCTT <7<<<<<<<<<<<.<54<7&<<<7<74<2<<<2<< MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:231:339:551 83 chr1 527 99 35M = 350 -212 CTGAGAGATTCTGCAGCCCAGATCCAGATTGCTTG <;<<;<<<<<<<<<<;:<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:4:68:1122:79 99 chr1 528 99 40M = 687 199 TGAGAGATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCT <<<<<<<<<<<<<;<<<<;<<<<<<;<<<4;<<4;99::; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:87:1375:1303 83 chr1 529 99 35M = 340 -224 GAGAGATTCTGCAGCCCAGATCCAGATTGCTTGTG :<;<(<<<<<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS220_1:8:46:485:482 147 chr1 530 94 35M = 371 -194 AGAGATTCTGCAGCCCAGATCCAGATTGCTTGTGG <<<<<::<<<<<<<<6<<<<<<<<<6<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_4:7:90:1873:89 147 chr1 531 99 35M = 344 -222 GAGATTCTGCAGCCCAGATCCAGATTGCTTGTGGT <<<<;49<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:5:238:31:968 99 chr1 534 99 35M = 717 218 ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTG 9======8====*=====,=1=======<=7:::, MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:78:773:660 163 chr1 534 99 36M = 711 213 ATTCTGCAGCCCAGCTCCAGATTGCTTGTGGTCTGA <<<<<<<<;<<<<<<<<<8<8<<;<<<;<<;7<<4: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:90:828:633 83 chr1 537 99 36M = 381 -192 CTGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG <<<;<;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_30:2:272:750:698 83 chr1 538 80 35M = 365 -208 TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAG 0<;8;64;<<<;<;.<+;:<4;4<;<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:3:88:1656:896 147 chr1 538 99 40M = 387 -191 TGCAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCTGC 6/8::*9/*3*'<88<:9*<<<8<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_61:6:126:541:194 163 chr1 540 97 35M = 730 225 CAGCCCAGATCCAGATTGCTTGTGGTCTGACAGGC <<<<<<<<8<<<<<8<<<<<<<<<8<<<428+<80 MF:i:18 Aq:i:43 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS114_28:4:9:55:730 163 chr1 540 99 36M = 722 218 CAGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT >>=>>+==>>==<==<=8=><:;8/;7</5724-2; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:278:918:892 99 chr1 541 99 35M = 720 214 AGCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCT =============:====================8 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:243:876:758 99 chr1 541 99 35M = 712 206 AGCCCAGATCCAGATTGCTTGTGGTCTGACAGGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;78<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_65:5:121:380:656 147 chr1 542 99 35M = 362 -215 GCCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTG :;<<;<<1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:82:164:1924 83 chr1 542 99 35M = 378 -199 GCCCAGCACCAGATTGCTTGTGGTCTGACAGGCTG 6<<<<<<-<<<<<<<<<2<<06<9<<<<<1<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS114_30:6:163:312:891 99 chr1 543 99 35M = 709 201 CCCAGCTCCAGATTGCTTGTGGTCTGACAGGCTGC <<<<<<<<<;<<<<<<<<<<<<<<<<:;;<;;<;0 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:124:243:35 147 chr1 544 60 35M = 364 -215 GCATATCCAGATTGCTGGTGGTCTGACAGGCAGCA &+<+;<694;+&99<<2<;423<26<-<<<<,<3< MF:i:130 Aq:i:60 NM:i:2 UQ:i:28 H0:i:0 H1:i:0
--B7_591:1:191:462:705 99 chr1 545 99 36M = 721 212 CAGATCCAGATTGCTTGTGGTCTGACAGGCTGCAAC <<<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<::<6 MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:8:95:426:791 147 chr1 547 99 35M = 359 -223 GNTCCAGATTGCTTGTGGTCTGACAGGCTGCAACT !!!!<<<<<;;<<<<;<<;<;;<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:23 H0:i:1 H1:i:0
--EAS218_4:5:41:118:1246 147 chr1 548 99 35M = 374 -209 CTCCAGATTGCTTGTGGTCTGACAGGCTGCAACTG <<<<<<<<<<<<<<<+<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:27:973:518 99 chr1 549 99 35M = 691 177 TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT <<<<<<<<<<<<<<;<<<<7<<<<<<<<88;0:8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:4:679:110 99 chr1 549 99 35M = 705 191 TCCAGATTGCTTGTGGTCTGACAGGCTGCAACTGT <<<<<<<<<<<<<<<<<<<;<<<<<<<<::<;;:7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:297:283:948 163 chr1 550 99 35M = 727 212 CCAGATTGCTTGTGGTCTGACAGGCTGCAACTGTG <<<<<<<<<<<<<<<<<<<<<<<:<<9;)+1;19- MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:61:1797:113 147 chr1 551 99 35M = 380 -206 CAGATAGCTTGTGGTCTGACAGGCTGCAACTGTGA <<0<<&<<<<;<<4;;3<;<:<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS188_7:6:205:873:464 99 chr1 552 99 35M = 743 226 AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG <<<<<<<<<7<<<<<<<<<<<<:<<,:<:<<<<:: MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:33:1168:1762 99 chr1 552 99 35M = 728 211 AGATTGCTTGTGGTCTGACAGGCTGCAACTGTGAG <<<<<<<<<<<<<<<<;<<;<;<<<<<<<<:;2:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:78:909:394 83 chr1 554 81 35M = 373 -216 ATTGCTTGGTGTCTGACAGGCTGCAACTGTGAGCC 6167&+&&/&//734/3<<<9*<;;3<3<;9<<3< MF:i:18 Aq:i:21 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--EAS1_103:2:226:302:758 163 chr1 556 99 35M = 751 230 TGCTTGTGGTCTGACAGGCTGCAACTTTGAGCGNT <<<<<<<;;;,<;<92;66<;))42<&2&(/1!!! MF:i:18 Aq:i:33 NM:i:2 UQ:i:9 H0:i:0 H1:i:1
--EAS114_28:5:206:671:49 163 chr1 557 99 36M = 719 198 GCTTGTGGTCTGACAGGCTGCAACTGTGAGCCATCA <<<<<<;<<<<8<<<;;<<<3<<8<8<35+,55;,3 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:165:431:857 147 chr1 559 99 35M = 406 -188 TTGGGGTCTGACAGGCTGCAACTGTGAGCCATCAC ''7'/;'1%0447<<<*<6<<<*<*<<<<6<<<<< MF:i:18 Aq:i:53 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS114_39:5:50:972:1286 83 chr1 559 99 35M = 377 -217 TTGTGGTCTGACAGGCTGCAACTGTGAGCCATCAC :;;7;7;;0<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:288:552:440 163 chr1 560 87 35M = 747 222 TGTGGTCTGACAGGCTGCAACTGTGAGCCTTCCAT <<<<71<77<<<:<<<&<4<<77<16<88&36+%% MF:i:18 Aq:i:26 NM:i:4 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:8:78:1478:1446 147 chr1 560 99 35M = 389 -206 TGTGGTCTGACAGGCTGCAACTGTGAGCCATCACA <8,8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:275:851:240 99 chr1 561 99 35M = 743 217 GTGGTCTGACAGGCTGCAACTGTGAGCCATCACAA <<<<<<<<<<<<<<<<<<<<<<<:<<4<7<<<<<< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:185:312:167 83 chr1 562 99 35M = 401 -196 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<8:<8<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:1:119:446:185 83 chr1 562 99 35M = 372 -225 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT +70730;<0<77;;<<<<<9<<<<<<9<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:3:168:741:680 83 chr1 562 99 35M = 394 -203 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<5<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:67:1797:1931 99 chr1 562 99 35M = 750 223 TGGTCTGACAGGCTGCAACTGTGAGCCATCACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:228:182:717 99 chr1 563 99 35M = 729 201 GGTCTGACAGGCTGCAACTGTGAGCCATCCCCATG <=9============5==5=<,59<=1=<&;&;;7 MF:i:18 Aq:i:66 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS112_34:7:118:523:591 83 chr1 563 99 35M = 393 -205 GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG 4:--&0:67<<8:<<<<<<<<<<<:4<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:29:1061:574 83 chr1 563 99 35M = 363 -235 GGTCTGACAGGCTGCAACTGTGAGCCATCACAATG <87<5<<9<<<66<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:168:69:605 83 chr1 565 67 36M = 373 -228 TCTGACAGGCGGCAACTGTGAGCCATCACAATGAAC '<'<144<0<&<<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS221_3:4:90:247:212 99 chr1 567 99 35M = 733 201 TGACAGGCTGCAACTGTGAGCCATCACAATGAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<8< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:140:522:212 83 chr1 568 99 35M = 399 -204 GACAGGCTGCAACTGTGAGCCATCACAATGAACAA :;8;:::<<:<<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:179:13:782 83 chr1 568 99 35M = 412 -191 GACAGTCTACAACTGTGAGCCATCACAATGAACAA &37.3&;3'*<3<;9<9<<5<<<<<<<<<9<<<<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS114_45:3:75:217:337 83 chr1 568 99 35M = 386 -217 GACAGGCTGCAACTGTGAGCCATCACAATGAACAA 4779797;;;<;:4;;<<<77<;;;7<<;<;<;<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:168:528:288 163 chr1 570 99 35M = 740 205 CAGGCTGCAACTGTGAGCCATCACAATGAACAACA <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<;<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:162:503:769 147 chr1 571 99 35M = 392 -214 AGGCTGCAACTGTGAGCCATCACAATGAACAACAG ;:;1;=8=;:+=====;&==7============== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:163:618:570 163 chr1 571 99 35M = 751 215 AGGCTGCAACTGTGAGCCATCACAATGAACAACAG <<<<<<<8<<<<<<<<<<<<<+<.7<<..<;&;8; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:251:121:479 163 chr1 572 99 35M = 750 213 GGCTGCAACTGTGAGCCATCACAATGAACAACAGG <<<<<<<<<<<;:<<<<;:;:<:<;:188;7:<+( MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:44:1578:1674 147 chr1 573 99 35M = 418 -190 GCTGCAACTGTGAGCCATCACAATGAACAACAGGA 62631;;4;;;8;;48;;7;8;;;;;;;;;8;;;; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:263:74:407 163 chr1 574 99 35M = 754 215 CTGCAACTGTGAGCCATCACAATGAACAACAGGAA <<<<2<<<<<<:<<<9<<4<<<<:<<<<9<999.7 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:254:32:275 147 chr1 575 99 35M = 382 -228 TGCAACTGTGAGCCATCACAATGAACAACAGGAAG (6+<;+6:9<<:7:<95<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:82:879:246 83 chr1 576 99 35M = 391 -220 ACAACTGTGAGCCATCACAATGAACAACAGGAAGA %+=661;&===:&==1<5======1========== MF:i:18 Aq:i:43 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_71:4:165:397:25 163 chr1 576 99 35M = 759 217 GCAACTGTGAGCCATCACAATGAACAACAGGAAGA <<7<<<<<<)97<6<:3:60:3+37-37+<:33:3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:148:776:486 163 chr1 578 99 35M = 755 212 AACTGTGAGCCATCACAATGAACAACAGGAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:59:1576:946 99 chr1 578 99 35M = 761 218 AACTGTGAGCCATCACAATGAACAACAGGAAGAAA <:<<<<<<<<<<<<:<:<<<<<<<8<<::1<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:61:433:385 83 chr1 579 99 35M = 381 -233 ACTGTGAGCCATCACAATGAACAACAGGAAGAAAA <*97<<<<&9<<;<&<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:37:761:635 147 chr1 581 99 35M = 418 -198 TGTGAGCCATCACAATGAACAACAGGAAGAAAAGG +37:<088<+<<;<<;<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:178:192:499 163 chr1 582 99 35M = 768 221 GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT <<<<<<<;<1<<<<<<;<<;6<<3666;;;;;/6/ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:93:945:176 99 chr1 582 99 35M = 745 198 GTGAGCCATCACAATGAACAACAGGAAGAAAAGGT <<<<<<<<<<<<<<<<<<<<<;<<<<;;<;:7;<3 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:216:988:883 83 chr1 584 99 35M = 392 -227 AAGCCAACACAATGAACAACAGGAAGAAAAGGTCT (=/1+=&:=&======<==<=============== MF:i:18 Aq:i:68 NM:i:2 UQ:i:12 H0:i:1 H1:i:0
--EAS114_39:1:12:884:219 99 chr1 584 99 35M = 756 207 GAGCCATCACAATGAACAACAGGAAGAAAAGGTCT <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<5:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:61:628:681 163 chr1 586 99 36M = 746 196 GCCATCACAATGAACAACAGGAAGAAAAGGTCTTTC <<<<<<<<<<<<<<<<<<<;<<<<<<<:<<;;;;;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:91:360:585 147 chr1 586 99 35M = 430 -191 GACATCACAATGAACAACAGGAAGAAAAGGTCTTT 5&&<<3:;<<<<<<)<<3<<<<<<<;;<<<<;<<< MF:i:18 Aq:i:67 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS139_11:6:89:1151:1878 99 chr1 587 99 35M = 757 205 CCATCACAATGAACAACAGGAAGAAAAGGTCTTTC <;;<<<<<;;;<<<<4;;::;<;8;;<;;8:<8<4 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:40:1596:1433 99 chr1 587 99 40M = 756 209 CCATCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG <<<<<<<<<<<<<<<<<<<<<<<<;<<<<1<<<<<::;:: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:4:1620:413 99 chr1 588 99 35M = 768 215 CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA <<<<<<<<<<6<<<6<<<;<6<9-1<;<&66<<<2 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:65:1928:1125 99 chr1 588 99 35M = 784 231 CATCACAATGAACAACAGGAAGAAAAGGTCTTTCA <<;<<<7<<7<;<7<<<<<<<7<<<<;<.-;<+88 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:123:998:248 163 chr1 589 99 35M = 776 222 ATCACAATGAACAACAGGAAGAAAAGGTCTTTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;9<<<68< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:240:603:890 163 chr1 590 99 36M = 740 186 TCACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA <<<<<<<<<<<<<<<<<<;<:<<:<<;<<<<<8865 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:20:762:748 163 chr1 591 99 35M = 777 221 CACAATGAACAACAGGAAGAAAAGGTCTTTCAAAA =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:246:313:499 99 chr1 592 99 35M = 757 200 ACAATGAACAACAGGAAGAAAAGGTCTTTCAAAAG <<<<<<<<<<<<<;<;<<<<<<<<;<<<<<;;<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:6:7:858:437 99 chr1 593 99 35M = 773 215 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG <<<<<<<<<<<<<<<<<<<<<;<3<<<<<<<<<33 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:150:933:810 163 chr1 593 99 35M = 755 197 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG =================================== MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:204:264:413 147 chr1 593 96 35M = 415 -213 CAATGAACAACAGAAAGAAAAGTTCTTTCAAAAGG 1==(4=::;/7::&===;====/=;===;;===== MF:i:18 Aq:i:27 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--EAS139_11:3:65:556:1505 163 chr1 593 99 35M = 790 232 CAATGAACAACAGGAAGAAAAGGTCTTTCAAAAGG <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:62:386:959 99 chr1 594 99 35M = 752 193 AATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGT <<8<<<<;<<<<-<<87;</<;<+<;5<+;;<3;+ MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:134:868:252 147 chr1 595 99 36M = 404 -227 ATGAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGA <;<<<8<<<<<<<<<<<<<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:252:19:955 99 chr1 596 84 35M = 771 210 TGAACAAAAGGAAGAAAAGGTCTTTCAAAAGGTGA <<<<<<<<<<4<<<<9<<+9)9<<4:9+<<0<909 MF:i:18 Aq:i:41 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_67:4:145:607:216 83 chr1 596 99 35M = 437 -194 TGAAAAACAGGAAGAAAAGGTCTTTCAAAAGGTGA /;<<&<<8<<<<<<<<<<<<<;872<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_65:8:140:924:923 163 chr1 597 99 35M = 767 205 GAACAACAGGAAGAAAAGGTCTTTCAAAAGGTGAT <<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<5;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:120:63:653 147 chr1 598 99 35M = 420 -213 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:204:779:181 163 chr1 598 99 35M = 779 216 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<<<<<5<<:<<<<<8<<,<<<<<<<<<<91<91< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:325:150:465 147 chr1 598 99 35M = 412 -221 AACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATG <<:<<<<<<<<;<:<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:57:722:347 83 chr1 599 99 35M = 439 -195 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:266:842 163 chr1 599 99 35M = 784 220 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT =====)===========8=====7882855355'5 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:183:852:253 163 chr1 599 99 35M = 773 209 ACAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<;;<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:30:887:404 163 chr1 600 99 35M = 789 224 CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG <<<<<<<<<<;<<<<<<<<<<<<<<<<:(<<<7;7 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:101:572:491 147 chr1 600 99 35M = 425 -210 CAACAGGAAGAAAAGGTCTTTCAAAAGGTGATGTG 8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:73:730:487 99 chr1 604 99 35M = 770 201 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT <<<<<<<<<<<<<<<<<<<9<<<<<<:<<<;<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:172:896:83 99 chr1 604 99 34M = 786 217 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGT <<<<<<<<<<<<<<<<<:;;+;<<<<<<<<9;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:154:762:630 163 chr1 604 99 35M = 792 223 AGGAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:99:756:130 163 chr1 606 99 35M = 798 227 GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:11:360:1577 99 chr1 606 99 35M = 781 210 GAAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCT <<<<<<<<<<<<<<<<<4<;;<<;;<;<<<8<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:27:1881:486 83 chr1 607 99 35M = 427 -215 AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC 99797;;9:<:;;;<;;;;<<<;;;;<;<;;<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:5:497:687 99 chr1 607 99 35M = 789 217 AAGAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:142:63:937 163 chr1 609 99 36M = 777 204 GAAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC <<<<<<<<<<<<<<<<<:<<<<<<<<<;<<:<<:<: MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:36:485:632 163 chr1 610 99 36M = 784 210 AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<;<18; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:8:36:927:478 99 chr1 610 99 35M = 798 223 AAAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATC <<<<<<<<<<<<<<<<;<<<<<:<:<<<<8<9;<8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:169:862:829 163 chr1 611 99 35M = 772 195 AAAGGTCTTTCAAAAGGTGATGTGTGTTCTCATCA <<<<<<<<<<<<<<<<<;<<<;<;<<<<:<;;<78 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:63:424:1643 163 chr1 614 99 35M = 798 219 GGTCTTTCAAAAGGTGATGTGTGTTCTCATCAACC ;;<<<<<<;<<<<<<<<<<5;9;<<<<<<<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:20:41:138 99 chr1 615 99 35M = 774 194 GTCTTTCAAAAGGTGATGTGTGTTCTCATCAACCT <<<<<<<<<<<<<<<<<<<<<<<<7<;<<<<<(<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:49:163:904 83 chr1 616 99 35M = 450 -201 TCTTTCAAAAGGTGATGTGTGTTCTCATCAACCTC 79779<<<<<;;;;9;;<<7<;*9<<<7<<;<<;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:135:543:760 99 chr1 619 99 35M = 787 203 TTCAAAAGGTGATGTGTGTTCTCATCAACCTCATA <<<<;;<;<<<<<<<9<<<<<<<<<<<;<<<<5<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:131:742:561 163 chr1 620 99 35M = 790 205 TCAAAAGGTGATGTGTGTTCTCATCAACCTCATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:120:14:944 83 chr1 621 99 35M = 428 -228 CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA :;<<;<;<;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:82:566:1096 147 chr1 621 99 35M = 446 -210 CAAAAGGTGATGTGTGTTCTCATCAACCTCATACA <<<<<<<<<<:<<<<<<<:<<<<<<:<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:14:601:624 83 chr1 622 99 35M = 446 -211 AAAAGGTGATGTGTGTTCTCATCAACCTCATACAC 1;;;;==5===.(=9=5=========8====;=== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:5:538:401 99 chr1 624 99 40M = 788 204 AAGGTGATGTGTGTTCTCATCAACCTCATACACACACATG <<<<;<<<<<<<<<<<<<<<;<::7<<;<53:<98;;;;; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:16:1081:1894 83 chr1 624 99 35M = 431 -228 AAGGTGATGTGTGTTCTCATCAACCTCATACACAC ;5;;&<;<<<<<<<<;<;<<;<<<;<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:3:1377:1663 147 chr1 626 99 35M = 446 -215 GGTGATGTGTGTTCTCATCAACCTCATACACACAC 6-88663;8;81;;66;8;;89939;;;67;2;;; MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:253:285:104 83 chr1 627 99 35M = 451 -211 GTGATGTGTGTTCTCATCAACCTCATACACACACA 2<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:66:1282:1215 99 chr1 627 99 35M = 794 202 GTGATGTGTGTTCTCATCAACCTCATACACACACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:2:1200:1076 163 chr1 629 99 35M = 786 192 GATGTGTGTTCTCATCAACCTCATACACACACATG ;;;;;;;;;;/;;;;;;;;6;;9;489;;;88888 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:194:688:289 99 chr1 631 99 35M = 795 199 TGTGTGTTCTCATCAACCTCATACACACACATGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<:; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:19:855:491 99 chr1 631 99 35M = 783 187 TGTGTGTTCTCATCAACCTCATACACACACATGGT <<<<<<<<<<<;<<.:<<<<;;;<4<:<:<7<;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:215:133:909 99 chr1 631 99 34M = 789 193 TGTGTGTTCTCATCAACCTCATACACACACATGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<996( MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:35:378:681 99 chr1 632 99 35M = 812 215 GTGTGTTCTCATCAACCTCATACACACACATGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:40:758:116 163 chr1 632 99 40M = 814 222 GTGTGTTCTCATCAACCTCATACACACACATGGTTTAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:7262 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:2:831:692 147 chr1 634 99 35M = 462 -207 GTGTTCTCATCAACCTCATACACACACATGGTTTA 2749'979<9<<<6;<<<0<;<<<<<3<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:162:594:858 99 chr1 634 99 35M = 818 219 GTGTTCTCATCAACCTCATACACACACATGGTTTA <<<<<<<<<<<<<<<<<9<;<<<<<<<<<<3<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:233:478:792 99 chr1 634 99 35M = 791 192 GTGTTCTCATCAACCTCATACACACACATGGTTTA <<<<<<<<<<<<<<<<<<<+<<<<<<<9<<<+;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:262:297:601 83 chr1 635 99 35M = 482 -188 TGTTCTCATCAACCTCATACACACACATGGTTTAG ;;<26;;;<;<7;<<<<<99<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:45:1769:1130 83 chr1 635 99 35M = 476 -194 TGTTCTCATCAACCTCATACACACACATGGTTTAG 88989;<;97;9<<;<;;;;9<98<<<<<<<;<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:153:977:200 83 chr1 640 99 35M = 472 -203 TCATCAACCTCATACACACACATGGTTTAGGGGTA 1:<83<<9;;9<<9;;<<;<<;;;;<;;<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:60:837:923 83 chr1 641 61 36M = 457 -220 CATCAACCGCATACACTCACATGGTTTAGGGGTATA 0<4<<<02.<99+<+&!<<<<+<<<<<<<<<<<<3< MF:i:18 Aq:i:24 NM:i:2 UQ:i:13 H0:i:0 H1:i:0
--EAS51_66:3:29:381:169 83 chr1 641 99 35M = 494 -182 CATCAACCTCATACACACACATGGTTTAGGGGTAT 2<82<;66<:<;<:<;<;<8<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:96:836:737 99 chr1 642 99 35M = 841 234 ATCAACCTCATACACACACATGGTTTAGGGGTATA <<<<<<71<<<<<<<<<<899<:5<<<96858<<. MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:228:354:203 147 chr1 643 99 35M = 480 -198 TCAACCTCATACACACACATGGTTTAGGGGTATAA %1<851<5<<<982<<<<<<<<::<<<<7<<<<3< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:151:159:43 147 chr1 645 99 35M = 452 -228 AACCTCATACACACACATGGTTTAGGGGTATAATA ;;4;6<<;<<<<7<77<6;<6<<<<<;;<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:182:404:693 163 chr1 646 99 35M = 812 201 ACCTCATACACACACATGGTTTAGGGGTATAATAC <<<<<<<<<<<<<<<<<<<<<<:::<6<;<94;77 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:4:841:339 163 chr1 646 99 35M = 793 182 ACCTCATACACACACATGGTTTAGGGGTATAATAC <<<<<<<<<<<<<<<<<;<7<<&;;<5<+<;7<<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:156:857:494 163 chr1 648 99 35M = 838 225 CTCATACACACACATGGTTTAGGGGTATAATACCT <<<<<<<<<<<<<<<<<6<<<<<<<<<<<<<<:<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:165:464:123 99 chr1 650 99 35M = 814 199 CATACACACACATGGTTTAGGGGTATAATACCTCT ===============7==============8==== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:1:115:868:887 83 chr1 650 99 35M = 452 -233 CATACACACACATGGTTTAGGGGTATAATACCTCT ==;==8=;=;========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:134:751:831 147 chr1 651 99 36M = 465 -222 ATACACACACATGGTTTAGGGGTATAATACCTCTAC ;:<4<8<<<;<;<<5<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:192:716:235 163 chr1 651 99 35M = 798 182 ATACACACACATGGTTTAGGGGTATAATACCTCTA ======================9==:<==:;;69; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:40:594:752 99 chr1 651 99 35M = 831 215 ATACACACACATGGTTTAGGGGTATAATACCTCTA <<<<<<<<<<;<<<;<<<::;<:;<;:<;;;<;<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:184:17:636 121 chr1 652 76 35M = 652 0 TACACACACATGGTTTAGGGGTATAATACCTCTAC 8<89<<:<<<;;;<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:184:17:636 181 chr1 652 0 * = 652 0 TTTTTTTTTTTTTTTTTTTTTTTTTTTTCACAGGT !!!!!!!!!!!!!!!!!!!!!!!!!!!77777777 MF:i:192
--EAS1_108:8:129:477:427 147 chr1 652 99 35M = 481 -206 TACACACACATGGTTTAGGGGTATAATACCTCTAC <<<9;<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:130:912:658 163 chr1 652 99 35M = 841 224 TACACACACATGGTTTAGGGGTATAATACCTCTAC <<<<<;<<<<<<;<<<<<<<<<<<<<<<<<7<;;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:85:401:1190 83 chr1 652 99 35M = 458 -229 TACACACACATGGTTTAGGGGTATAATACCTCTAC 64778:;69739:;+9::7;;;<;6<;7;;;;;7< MF:i:18 Aq:i:55 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:4:1502:1911 163 chr1 652 99 40M = 802 190 TACACACACATGGTTTAGGGGTATAATACCTCTACATGGC <<<:4<<<<<<;<<<<;9;5<95<;<<;9+;1612:1::: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:198:691:595 163 chr1 655 99 35M = 847 227 ACACACATGGTTTAGGGGTATAATACCTCTACATG ==============&===============;7;=1 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:186:989:869 147 chr1 655 99 35M = 505 -185 ACACACATGGTTTAGGGGTATAATACCTCTACATG ;<<;:<<<7:<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:38:856:336 147 chr1 656 99 35M = 480 -211 CACACATGGTTTAGGGGTATAATACCTCTACATGG 2;4;4<:;6:5:<<;:;<<;<<;<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:49:271:588 163 chr1 658 99 35M = 830 207 CACATGGTTTAGGGGTATAATACCTCTACATGGCT <<<<<<<<<<<<<<5:<<<<<<:<<<<<<<:7%9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:240:593:842 147 chr1 660 99 35M = 494 -201 CATGGTTTAGGGGTATAATACCTCTACATGGCTGA *<<<;<<6<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:175:705:982 147 chr1 660 89 36M = 496 -200 CATGGTTTAGGGGTATAATACCTCTACATGGCTGAT ')'''''')'''''*')*)'*)')))+,'*)+'*,! MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS221_3:6:26:227:1053 147 chr1 663 99 35M = 510 -188 GGTTTAGGGGTATAATACCTCTACATGGCTGATTA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:316:961:576 147 chr1 666 65 35M = 488 -213 TTACGGGTGTAATCTCTCTACATGGCTAATTATGA (++%%+++),+,+*++,+,,-,**+,-&-,+-+-- MF:i:130 Aq:i:65 NM:i:5 UQ:i:36 H0:i:0 H1:i:0
--EAS56_63:5:96:788:614 163 chr1 667 99 35M = 862 230 TAGGGGTATAATACCTCTACATGGCTGATTATGAA <<<<<<<<<<<<<<<<<<<<<<;6;<<;;<;;7;9 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:13:1155:631 83 chr1 668 99 40M = 524 -184 AGGGGTATAATACCTCTACATGGCTGATTATGAAAACAAT ;:398<<;<<<<<;<3<;;<<<<;;<<<<<<<<<<;<<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:199:511:426 83 chr1 669 99 35M = 509 -195 GGGGTATAATACCTCTACATGGCTGATTATGAAAA <:7:<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:124:241:608 99 chr1 670 99 35M = 856 221 GGGTATAATACCTCTACATGGCTGATTATGAAAAC <<<<<<<<<;<<<<<<<<<;;<<<;<<<<;;8;;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:59:396:359 147 chr1 670 99 35M = 474 -231 GGGTATAATACCTCTACATGGCTGATTATGAAAAC 28288;;;;;;;;;::;;;;:;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:87:323:895 147 chr1 671 99 35M = 494 -212 GGTATAATACCTCTACATGGCTGATTATGAAAACA 55777;;;939;9;;9;;;;9;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:28:708:463 147 chr1 672 99 36M = 477 -231 GTATAATACCTCTACATGGCTGATTATGAAAACAAT ;;<;<<====3=====5=================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:84:101:328 83 chr1 673 99 35M = 480 -228 TATAATACCTCTACATGGCTGATTATGAAAACAAT <<<<<<<<:<<<<<<<<<6<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:30:92:753 147 chr1 673 99 35M = 497 -211 TATAATACCTCTACATGGCTGATTATGAAAACAAT <<<<<<;<<<<<<:<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:8:88:90:59 73 chr1 674 37 35M = 674 0 ATAATACCTCTACATGTCTGATTATGAAAACAATG <<<<<<<4;7;<<<;;47;&9..1;6&4<755;1; MF:i:64 Aq:i:0 NM:i:1 UQ:i:19 H0:i:0 H1:i:1
--EAS112_32:8:88:90:59 133 chr1 674 0 * = 674 0 TGCACCTCCCTGTTCACCTAGATGCTAGGAGGACA =7595=92=72.=+5(:4=9092((.2&(&%07%. MF:i:192
--B7_593:1:12:158:458 147 chr1 675 84 36M = 503 -208 TAATAATGCTACATGGATGATTATGAAATCAATGTT ++++++$((+*+++++++++++++&+++++++++++ MF:i:18 Aq:i:15 NM:i:5 UQ:i:40 H0:i:0 H1:i:0
--B7_593:4:28:781:723 99 chr1 676 99 36M = 855 215 AATACCTCTACATGGCTGATTATGAAAACAATGTTC <<<<<<<<<7<<<;;<<;;<<;<5<4<7<;7<+:<9 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:27:856:401 163 chr1 679 99 35M = 871 227 ACCTCTACATGGCTGATTATGAAAACAATGTTCCC ======6===;2==;===;=+=92=;5+=&556:6 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:245:323:744 83 chr1 679 99 35M = 499 -215 ACCTCTACATGGCTGATTATGAAAACAATGTTCCC /.848299;&;9;9;=2.=7========;;===== MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:31:948:254 99 chr1 680 99 35M = 849 204 CCTCTACATGGCTGATTATGAAAACAATGTTCCCC <<<<<<<<<<<<<<<<<<<;<<<<<:<<8<;;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:277:590:364 83 chr1 681 99 35M = 503 -213 CTCTACATGGCTGATTATGAAAACAATGTTCCCCA :::<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:201:959:19 147 chr1 681 99 35M = 493 -223 CTCTACATGGCTGATTATTAAAACAATGTTCCCCA ;4;.9<:0&/<5<::<<9/.<<<<<<<<<<<<;<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS56_61:8:7:171:402 147 chr1 682 99 35M = 489 -228 TCTACATGGCTGATTATGAAAACAATGTTCCCCAG :086::::847:<7<<7<<<<<<;7<<;<<<<7<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:67:317:249 99 chr1 683 26 35M = 840 192 CTACATGGCTGATTATGAAATCTATGTTCCCCATA <<<<<<;<<<<;:;<<7;<<.<&3<;;<<(;;6.< MF:i:18 Aq:i:26 NM:i:3 UQ:i:31 H0:i:0 H1:i:0
--EAS51_64:4:189:467:475 147 chr1 683 99 35M = 493 -225 CTACATGGCTGATTATGAAAACAATGTTCCCCAGA *.;*;7<75<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:46:900:610 147 chr1 684 99 35M = 491 -228 TACATGGCTGATTATGAAAACAATGTTCCCCAGAT <;5<;<<<;<<<<<<;<<<<<<<<<<8<<<<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:232:351:909 99 chr1 685 80 36M = 843 194 ACATGGCTGATTATGAAATCAATGTTCCCCAGATGC <<<<<99<<<<<<99<7<'<9<<<6<<+<;7;<<&; MF:i:18 Aq:i:39 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS139_11:6:11:285:1567 83 chr1 685 99 35M = 525 -195 ACATGGCTGATTATGAAAACAATGTTCCCCAGATA <8<4<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:172:622:707 147 chr1 685 99 35M = 511 -209 ACATGGCTGATTATGAAAACAATGTTCCCCAGATA 92<3996;<<<<<<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:6:882:784 83 chr1 686 99 35M = 496 -225 CATGGCTGATTATGAAAACAATGTTCCCCAGATAC 4;7<;64<<:<<4<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:80:760:490 147 chr1 686 99 35M = 520 -201 CATGGCTGATTATGAAAACAATGTTCCCCAGATAC %::::+<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:68:1122:79 147 chr1 687 99 40M = 528 -199 ATGGCTGATTATGAAAACAATGTTCCCCAGATACCATCCC ::77*:1<<<<<<<<<<<<<<<:;<<<;<<<<<<8<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:264:988:663 99 chr1 688 99 35M = 875 222 TGGCTGATTATGAAAACAATGTTCCCCAGATACCA <<<<<<<<<<<1<4<<<4<<0<;<-<74*(<&51- MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:3:233:911 163 chr1 688 99 35M = 868 215 TGGCTGATTATGAAAACAATGTTCCCCAGATACCA <<<<<<<<<<<<<<<<<;<<<<<<<<<<;<;<<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:187:925:547 99 chr1 689 99 35M = 857 203 GGCTGATTATGAAAACAATGTTCCCAAGATACCAT 43<<<:9<;;;:7<<<<6<:<8<-4-/,81<(48: MF:i:18 Aq:i:37 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS56_65:5:75:637:650 163 chr1 691 99 35M = 868 212 CTGATTATGAAAACAATGTTCCCCAGATACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:27:973:518 147 chr1 691 99 35M = 549 -177 CTGATTATGAAAACAATGTTCCCCAGATACCATCC +<<<<<<9<<<<<<<<<<<;<;<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:20:492:850 147 chr1 694 10 35M = 526 -203 AGTATGAAAACAATGTTCCCCAGATGCCGTCCCGG :.5:+.;;&91:;79:766:1:9+6&:1&&:+:)) MF:i:18 Aq:i:10 NM:i:4 UQ:i:31 H0:i:0 H1:i:0
--EAS51_64:4:318:345:156 83 chr1 695 99 35M = 522 -208 TTATGAAAACAATGTTCCCCAGATACCATCCCTGT ;8<8<<<<<;<<:<<;<;77<<<<<;<<;<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:5:863:302 99 chr1 698 99 35M = 866 203 TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:7:526:343 147 chr1 698 99 35M = 515 -218 TGAAAACAGTGTTCCCCAGATACCATCCCTGTCTT (7:;;;<<;;;<1<1<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS114_26:2:73:513:102 99 chr1 698 99 35M = 868 205 TGAAAACAATGTTCCCCAGATACCATCCCTGTCTT ===========================;======= MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:6:251:1557 83 chr1 700 99 35M = 526 -209 AAAACAATGTTCCCCAGATACCATCCCTGTCTTAC <<<<<<<<<<<<6:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:147:64:416 99 chr1 701 99 35M = 870 204 AAACAATGTCCCCCAGATACCATCCCTGTCTTACT <<<<<<<<<<<<<<<;<<<<<;<<<<;;:<;;;;; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_595:3:297:637:86 163 chr1 704 99 35M = 869 200 CAATGTTCCCCAGATACCATCCCTGTCTTACTTCC <<<<<<<<<<<<;+<+;<;<:<<<<<9<<957<;( MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:160:272:398 163 chr1 705 99 35M = 891 221 AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA 9<<<3<<<<<<<<<<<9<<;8<<<<;<+.;;89.. MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:4:679:110 147 chr1 705 99 35M = 549 -191 AATGTTCCCCAGATACCATCCCTGTCTTACTTCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:163:312:891 147 chr1 709 99 35M = 543 -201 TTCCCCAGATACCGTCCCTGTCTTACTTCCAGCTC 0.<;;8<<<0<<<<<<<<<<6<<<<<<8<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_28:3:78:773:660 83 chr1 711 99 36M = 534 -213 CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC 7<;7<<<7;9<<8;<<<<<<;<<<<<<<<<<7<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:5:63:875:1339 163 chr1 711 99 35M = 879 203 CCCCAGATACCATCCCTGTCTTACTTCCAGCTCCC <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:243:876:758 147 chr1 712 99 35M = 541 -206 CCCAGATACCATCCCTGTCTTACTTCCAGCTCCCC 0%3<1;.70;3363;31;<<<<<<6<<<;<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:104:153:698 163 chr1 713 99 36M = 896 219 CCAGATACCATCCCTGTCTTACTTCCAGCTCCCCAG ;<<<<<<;6<<<<<<<<<<;<<<<;<;;;<.<::50 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:86:498:373 163 chr1 716 99 35M = 894 213 GATACCATCCCTGTCTTACTTCCAGCTCACCAGAG <<<<<<<<<<<<<<<<<<<<<<<5:<<<:<;7+67 MF:i:18 Aq:i:69 NM:i:1 UQ:i:25 H0:i:1 H1:i:0
--EAS1_95:6:87:734:888 163 chr1 717 99 35M = 900 218 ATACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG ===========;8=========;;=;====;;3(; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:238:31:968 147 chr1 717 99 35M = 534 -218 ACACCATCCCTGTCTTACTTCCAGCTCCCCAGAGG =(.7=5%===9:7==+==77=============== MF:i:18 Aq:i:69 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS54_65:3:290:558:349 99 chr1 719 99 35M = 869 185 ACCATCCCTGTCTTACTTCCAGCTCCCCAGCGGGA <<<;<<;<;<188<<<8::<686+4:<<6:&3)*& MF:i:18 Aq:i:59 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_28:5:206:671:49 83 chr1 719 99 36M = 557 -198 ACCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA ;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:278:918:892 147 chr1 720 99 35M = 541 -214 CCATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAA =6=3=<===&========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:1:191:462:705 147 chr1 721 99 36M = 545 -212 CATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAG <<'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:9:55:730 83 chr1 722 99 36M = 540 -218 ATCCCTGTCTTACTTCCAGCTCCCCAGAGGGAAAGC <:<;;<6<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:45:462:455 163 chr1 723 99 35M = 874 186 TCCCTGTCTTACTTCCAGCTCCCCAGACGGAACGC <<<<<<8<<<;<;<<<;<<<<<<<6;8&:80;733 MF:i:18 Aq:i:43 NM:i:2 UQ:i:27 H0:i:0 H1:i:1
--EAS114_28:2:149:650:44 163 chr1 726 99 36M = 902 212 CTGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC <<<<<<<<<<<<<<<<<<<<<<<<<;6<<;<<7<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:297:283:948 83 chr1 727 99 35M = 550 -212 TGTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTC 6;;3;6<<66<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:33:1168:1762 147 chr1 728 99 35M = 552 -211 GTCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCA 79<9;3<<<4<<<97<;;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:228:182:717 147 chr1 729 99 35M = 563 -201 TCTTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAA 778;8;474<<<;2;;<2<<<<<<<<;<;;9<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:8:1351:1986 163 chr1 729 99 35M = 911 217 TCTTACTTCCAGATCCCCAGAGGGAAAGCTTTCAA <<<<<<<<<<<<-<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS51_64:4:163:31:455 163 chr1 730 99 35M = 886 191 CTTACTTCCAGCTCCCCAGAGGGACAGCTNNCAAC <+<<<<<<<;0+<<<<;06070-9(0(9<!!5)05 MF:i:18 Aq:i:31 NM:i:3 UQ:i:7 H0:i:0 H1:i:1
--EAS54_61:6:126:541:194 83 chr1 730 97 35M = 540 -225 AGTACGACCAGCTCCCCAGAGGGAAAGCTTTCAAC +%&:/+(46=47&71/2==;=;8====28212=== MF:i:18 Aq:i:43 NM:i:4 UQ:i:40 H0:i:1 H1:i:0
--EAS51_62:7:178:286:414 163 chr1 731 99 35M = 907 211 TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG <<<<<<<<<<<<<<<<8<<<<<<<<<1<<<1;998 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:35:361:546 163 chr1 731 99 35M = 892 196 TTACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACG <<<<<<<<<<<<<<<<;<5<<<<<;<2<<<:<8<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:90:247:212 147 chr1 733 99 35M = 567 -201 ACTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCT 7655:;87;<;;;8<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:149:354:667 99 chr1 734 99 35M = 888 189 CTTCCAGCTCCCCAGAGGGAAAGCTTTCAACGCTT <<<<<<<<<<<<<<<<<<<><<<<<<<<;<:<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:240:603:890 83 chr1 740 99 36M = 590 -186 GCTCCCAAGAGGGAAAGCTTTCAACGCTTCTAGCCA ;+&+//&<<<<<<<<<<9<<<8<<<<9<<<<<<<<< MF:i:18 Aq:i:66 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_591:7:129:956:115 163 chr1 740 99 36M = 927 223 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;877- MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:168:528:288 83 chr1 740 99 35M = 570 -205 GCTCCCCAGAGGGAAAGCTTTCAACGCTTCTAGCC 8<%<31;<<;<;<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:275:851:240 147 chr1 743 99 35M = 561 -217 CCCCAGAGGGAAAGCTTTCAACGTTTCTAGCCATT 66614/&3616630666&66666&66666868666 MF:i:18 Aq:i:31 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS188_7:6:205:873:464 147 chr1 743 99 35M = 552 -226 CCCCAGAGGGAAAGCTTTCAACGCTTCTAGCCATT <-((+:+;289<--;<;-;<:;;<<<;;<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:37:610:260 163 chr1 745 99 35M = 913 203 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC <<<;<;<<7<<<<<<<<<<<<<<;6<963;;;3;1 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:93:945:176 147 chr1 745 99 35M = 582 -198 CCAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTC 6;;;8<<3<<8.<;6)<<<<<9<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:61:628:681 83 chr1 746 99 36M = 586 -196 CAGAGGGAAAGCTTTCAACGCTTCTAGCCATTTCTT 95<<<<<<<<;<<<<;<<<:<<;;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:288:552:440 83 chr1 747 87 35M = 560 -222 AGAGGGAACGCTTTCAACTCTTCTAGCCATTTCTT 9<<%'%<<.2<<<<<<<<5:<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:2 UQ:i:33 H0:i:0 H1:i:0
--EAS56_53:2:170:265:818 163 chr1 748 10 35M = 920 207 GAGGGGAAGCTTTCAACGCTTCTAGCACTTTCTTT <<<<<(5/959<8.<9<8<<<2<&59&&:22:8+( MF:i:18 Aq:i:10 NM:i:3 UQ:i:17 H0:i:0 H1:i:0
--B7_595:2:251:121:479 83 chr1 750 99 35M = 572 -213 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<6'..663;&<<;<<9<<<9<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:67:1797:1931 147 chr1 750 99 35M = 562 -223 GGGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:226:302:758 83 chr1 751 99 35M = 556 -230 GGAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGG ;<<<<9;<<<<<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:163:618:570 83 chr1 751 99 35M = 571 -215 GGAAAGCTGTCAACGCTTCTAGCCATTTCTTTTGG <9774<88&:8<:8<8:8<8<<<<<;88<88<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_97:3:73:292:429 99 chr1 752 99 35M = 920 203 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTTGC <<<<<<<<<<7<<;<<<<<<<2<<<5<<<<<:%)< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_108:3:82:356:253 99 chr1 752 99 35M = 927 210 GAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC ===================<========;===39= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:62:386:959 147 chr1 752 99 35M = 594 -193 AAAAGCTTTCAACGCTTCTAGCCATTTCTTTTGGC %;71131((<<6<92(+<1<<;<-3<8<<;<;;<< MF:i:18 Aq:i:57 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_62:3:263:74:407 83 chr1 754 99 35M = 574 -215 AAGCTTTCAACGCTTCTAGCCATTTCTTTTGGCAT ;;88<::+;<)<5<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:67:620:344 99 chr1 755 99 35M = 905 185 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT <<<<2<:2<<<<<<7<<<<:<<*<<<<<<***3<< MF:i:18 Aq:i:33 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:148:776:486 83 chr1 755 99 35M = 578 -212 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT ;:<<<;<<;<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:150:933:810 83 chr1 755 99 35M = 593 -197 AGCTTTCAACGCTTCTAGCCATTTCTTTTGGCATT :89===:=:=;;==;==================== MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:102:467:897 99 chr1 756 97 35M = 940 219 GCTTTCAACGCTTCTAGCCATTTCTTTTGTCTTTT <<<<9<<<<9<2<<<&,/</<<<<7<<;&&<$;*< MF:i:18 Aq:i:37 NM:i:2 UQ:i:8 H0:i:1 H1:i:0
--EAS114_39:1:12:884:219 147 chr1 756 99 35M = 584 -207 GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTT 7;::<:<<<7<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:40:1596:1433 147 chr1 756 99 40M = 587 -209 GCTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT -:8:1841<4;<88<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:7:761:623 99 chr1 757 99 35M = 938 216 CTTTCAACGCTTCTAGCCATTTCTTTTGGCATTTG <<<<<<<<<<<<<8<<<<;;<0<<<<<;;<;<;;& MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:246:313:499 147 chr1 757 99 35M = 592 -200 CTTTAAACGCTTCTAGCCATTTCTTTTGGCATTTG +;77%;;;&:;:7;<<<<<6<:<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS139_11:6:89:1151:1878 147 chr1 757 99 35M = 587 -205 CTTTCAACGATTCTAGCCATTTCTTTTGGCATTTG 8<66,,<<<<<<:<<<<<9<<<:<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_71:4:165:397:25 83 chr1 759 99 34M = 576 -217 TTCAACGCTTCTAGCCATTTCTTTTGGCATTTGC &(33'60;-'+'<7;<<*3-<;;183<<<;<;<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:59:1576:946 147 chr1 761 99 35M = 578 -218 CAACGCTTCTAGCCATTTCTTTTGGCATTTGCCTT 9<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:256:407:470 163 chr1 762 99 35M = 939 212 AACGCTTCTAGCCATTTCTTTTGGCATTTGCCTTC <<<<<<<<;<;<<<<<<<<<;;<</<<;;83;7;9 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:148:437:481 163 chr1 764 99 36M = 949 221 CGCTTCTAGCCATTTCTTTTGGCATTTGCCTTCAGA <<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<;0;8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:140:924:923 83 chr1 767 99 35M = 597 -205 TTTTAGCCATTTCTTTTGGCATTTGCCTTCAGACC <<&<<;;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_103:4:143:560:194 99 chr1 768 99 35M = 946 213 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC <<<<;;<<<<<<<<<<<6<;<<<<;;<<;9<999< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:178:192:499 83 chr1 768 99 35M = 582 -221 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC 86<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:4:1620:413 147 chr1 768 99 35M = 588 -215 TCTAGCCATTTCTTTTGGCATTTGCCTTCAGACCC -<<<7<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:73:730:487 147 chr1 770 99 35M = 604 -201 TAGCCATTTCTTTTGGCATTTGCCTTCAGACCCTA <;;<<2;<;<<<;0<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:179:389:585 163 chr1 770 24 35M = 953 218 TGGCCACTTTTTATCGCATTTCCCTTTAGAACCTA <.4<9.4+.+'&-220<+<4<6<<20*6;<0(9<% MF:i:130 Aq:i:24 NM:i:7 UQ:i:103 H0:i:0 H1:i:0
--B7_595:1:252:19:955 147 chr1 771 84 35M = 596 -210 AGCCAGTTCTTTTGGCATTTGCCTTCAGACCCTCC <8<884<<<<<<68<<<<<<<2<;<<;<+<<<;<< MF:i:18 Aq:i:41 NM:i:2 UQ:i:46 H0:i:0 H1:i:1
--EAS54_71:4:169:862:829 83 chr1 772 99 34M = 611 -195 GCCATTTCTTTTGGCATTTGCCTTCAGACCCTAC ,1<6<<<<<7<<<<<<<<<<<<<<<<<7<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:6:7:858:437 147 chr1 773 99 35M = 593 -215 CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC 7;<4;;:;80<;<;<<<<<<:<<;<<<;;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:183:852:253 83 chr1 773 99 35M = 599 -209 CCATTTCTTTTGGCATTTGCCTTCAGACCCTACAC ;<9<;<<<<<<<<;<<<<<;<<<;<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:20:41:138 147 chr1 774 99 35M = 615 -194 CATTTCTTTTGGCATTTGCCTTCAGACCCTACACG ;;;<;<<<::<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:123:998:248 83 chr1 776 99 35M = 589 -222 TTTCTTTTGGCATTTGCCTTCAGACCCTACACGAA ;:;5;<;:<9<<<<<:<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:142:63:937 83 chr1 777 99 36M = 609 -204 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAATG ;;;<;<<<<;<<<<<;:<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:20:762:748 83 chr1 777 99 35M = 591 -221 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT =:747;7=;;==7=;==7===7==7;========= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:149:953:349 99 chr1 777 99 35M = 915 173 TTCTTTTGGCATTTGCCTTCAGACCCTACACGAAT <<<<<<<<;<<<<<<<<<<<;7:<:<<:<:;;::; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:46:981:766 163 chr1 778 99 35M = 933 190 TCTTTTGGCATTTGCCTTCAGACCCTACACGAATG <<<<<<<<<<<<<;<<<<<-<;<<<<-<-<;-:6; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:204:779:181 83 chr1 779 99 35M = 598 -216 CTTTTGGCATTTGCCTTCAGACCCTACACGAATGC ;:;/*<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:11:360:1577 147 chr1 781 99 35M = 606 -210 TTTGGCATTTGCCTTCAGACCCTACACGAATGCGT 1<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:5:491:391 99 chr1 782 99 35M = 917 170 TTGGCATTTGCCTTCAGACCCTACACGAATGCGTC =========;===;==:4=========;3;==7;= MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:186:199:927 99 chr1 783 99 35M = 802 54 TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT <77<<<<2<;<<<<<06<<<<<<<<60<<684/6& MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:8:19:855:491 147 chr1 783 99 35M = 631 -187 TGGCATTTGCCTTCAGACCCTACACGAATGCGTCT 8<<<<;:<<<<:<<<<<:<;;<<<<<<<;<<<;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:36:485:632 83 chr1 784 99 36M = 610 -210 GGCATTTGCCTTCAGACCCTACACGAATGCGTCTCT 0;;;<<;<<<;<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:266:842 83 chr1 784 99 35M = 599 -220 GGCATTTGCCTTCAGACCCTACACGAATGCGTCTC <9<<6;9<;9;;<<<<;;;9<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:65:1928:1125 147 chr1 784 99 35M = 588 -231 GGCATTTGCCTTCAGACCCTACACGAATACGTCTC <+<<<2<4<<<0<<4<<<<<6<<<6<<<'<<<<0< MF:i:18 Aq:i:41 NM:i:1 UQ:i:6 H0:i:0 H1:i:1
--EAS221_3:4:66:584:407 163 chr1 785 99 35M = 954 204 GCATTTGCCTTCAGACCCTACACGAATGCGTCTCT <<<*9<9<<<1<<<<<<<<*<59<4<)<2<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:172:896:83 147 chr1 786 99 35M = 604 -217 CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA ;<.5.;;<+;<<<<<<<4<<<<<<<;<<<<<;<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:2:1200:1076 83 chr1 786 99 35M = 629 -192 CATTTGCCTTCAGACCCTACACGAATGCGTCTCTA 7779779;9;:;;4;;9;;:7;<<<7;;;:<;<<; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:135:543:760 147 chr1 787 99 35M = 619 -203 ATTTGCCTTCAGACCCTACACGAATGCGTCTCTAC ;;.;;8;<8;<<32;<<<<<7<<<<<9<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:5:538:401 147 chr1 788 99 40M = 624 -204 TTTGCCTTCACACCCTACACGAATGCGTCTCTGCCACAGG 671&7::49:&0<<<(<::<&<<<:<<<<<<<&<<<<1<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:10 H0:i:0 H1:i:1
--EAS54_71:6:215:133:909 147 chr1 789 99 35M = 631 -193 TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA 7758;<;<;8<<<<;<;<<<<<:;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:30:887:404 83 chr1 789 99 35M = 600 -224 TTGCCTTCAGACCCTGCACGAATGCGTCTCTACCA <<<<5<;::<<<;<<.<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS219_1:1:5:497:687 147 chr1 789 99 35M = 607 -217 TTGCCTTCAGACCCTACACGAATGCGTCTCTACCA <8<<8<<<;<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:131:742:561 83 chr1 790 99 35M = 620 -205 TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC <:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:65:556:1505 83 chr1 790 99 35M = 593 -232 TGCCTTCAGACCCTACACGAATGCGTCTCTACCAC <6<8<<4<8;;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:233:478:792 147 chr1 791 99 35M = 634 -192 GCCTTCAGACCCTACACGAATGCGTCTCTACCACA 6<;9:<<9-<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:66:257:524 99 chr1 791 99 35M = 959 203 GCCTTCAGACCCTACACGAATGCGTCTCTACCACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<% MF:i:18 Aq:i:73 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_53:4:154:762:630 83 chr1 792 99 35M = 604 -223 CCTTCAGACCCTACACGAATGCGTCTCTACCACAG <<-::<91<<<<;<;<<<<;<<<<<<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:4:841:339 83 chr1 793 99 35M = 646 -182 CTTCAGACCCTACACGAATGCGTCTCTACCACAGG 77-):22<<<33;<5<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:66:1282:1215 147 chr1 794 99 35M = 627 -202 TTCAGACCCTACACGAATGCGTCTCTACCACAGGG ::;<;<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:194:688:289 147 chr1 795 99 35M = 631 -199 TCAGACCCTACACGAATGCGTCTCTACCACAGGGG ;8;%28<;<<<<<<<<;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:8:36:927:478 147 chr1 798 99 35M = 610 -223 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT ,6;;;3;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:99:756:130 83 chr1 798 99 35M = 606 -227 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT ;;<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:192:716:235 83 chr1 798 99 35M = 651 -182 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT <5<<<8<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:63:424:1643 83 chr1 798 99 35M = 614 -219 GACCCTACACGAATGCGTCTCTACCACAGGGGGCT 9+<<<+7<<<<<<<<<<<<<<<<<8<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:14:360:580 99 chr1 799 99 35M = 963 199 ACCCTACACGAATGCGTCTCTACCACAGGGGGCGG ===========3===;5<==8;====79==.=5'5 MF:i:18 Aq:i:68 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS51_78:7:186:199:927 147 chr1 802 99 35M = 783 -54 CTACGCGAATGCGTCTCTACCACAGGGGGCTGCGC -;++)6<*8+;&<&/<<<<7<<71<<<<<6<<<7< MF:i:18 Aq:i:57 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS139_19:3:4:1502:1911 83 chr1 802 99 40M = 652 -190 CTACACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTTT :+:::5/;99<;<&<*<-9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:187:791:153 99 chr1 803 99 35M = 958 190 TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG <<<<<<<<<<<<<<<<<<<<<:+;;<;<88*6;68 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:63:527:1923 99 chr1 803 99 35M = 981 213 TACACGAATGCGTCTCTACCACAGGGGGCTGCGCG <<<<<<<<<<<<<<<<<:<<<<3<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:31:98:804 99 chr1 805 99 35M = 982 212 CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGC =======9===;============5=;9=;=;==& MF:i:18 Aq:i:74 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS218_4:7:89:1487:520 163 chr1 805 99 35M = 997 227 CACGAATGCGTCTCTACCACAGGGGGCTGCGCGGT 8<<<6/<<<<<<<<<:<<8<:<<3<<:668<86<3 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:69:88:1154 99 chr1 805 99 35M = 992 222 CACGAATGCGTCTCTACCACAGGCGGCTGCGCGGT <<<<<<<<<<<<<<<<<<<<<<<2<<<<:<<<<<7 MF:i:18 Aq:i:47 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS114_26:1:99:212:522 163 chr1 806 99 35M = 1002 231 ACGAATGCGTCTCTACCACAGGGGGCTGCGCGGTT ================8==;====;=;===1==:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:35:378:681 147 chr1 812 99 35M = 632 -215 GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT :<5-<);;;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:182:404:693 83 chr1 812 99 35M = 646 -201 GCGTCTCTACCACAGGGGGCTGCGCGGTTTCCCAT <;7;;4<<<<<<<7<<7<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:119:761:239 99 chr1 813 99 35M = 999 221 CGTCTCTACCACAGGGGGCTGCGCGGTTTCCCATC <<<<<<<<<<<<6<<<<<<;<2<<<<;<<<<<;;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:165:464:123 147 chr1 814 99 35M = 650 -199 GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCA 9;<)<<%<<9<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:40:758:116 83 chr1 814 99 40M = 632 -222 GTCTCTACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG 25/8/:<75:2<<<<<<7<<;<<<<<<<88;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:55:506:125 99 chr1 817 99 35M = 982 200 TCTACCACAGGGGGCTGCGCGGTTTCCCATCATGA <<<<<<<<<;<9<;<<;558<<<<5(5*<<<<<51 MF:i:18 Aq:i:35 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:162:594:858 147 chr1 818 99 35M = 634 -219 CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA 90;<99;==99==;4=:========;=====;=== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:55:74:1040 99 chr1 818 99 35M = 975 192 CTACCACAGGGGGCTGCGCGGTTTCCCATCATGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:100:708:1984 99 chr1 819 99 35M = 1015 231 TACCACAGGGGGCTGCGCGGTTTCCCATCATGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<7%: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:92:367:1495 163 chr1 820 99 35M = 987 202 ACCACAGGGGGCTGCGCGGTTTCCCATCATGAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<6<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:49:905:27 163 chr1 821 68 35M = 1000 214 CCACAGGGGGCTGCGCGGTTTCCCATCCTGAAGCA <<;<.89<9.<2<9<:91+447.9,04&000(,+( MF:i:18 Aq:i:31 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS218_4:7:87:964:826 163 chr1 822 99 35M = 999 212 CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<1<<8;4;;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:38:1576:1923 163 chr1 822 99 35M = 987 200 CACAGGGGGCTGCGCGGTTTCCCATCATGAAGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;<<;< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:337:968 99 chr1 823 85 35M = 981 193 ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT <<<<<;<<<<<<<<<<<<<<<<<<<;<<;;<;;;; MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:187:294:947 99 chr1 823 99 35M = 1002 214 ACAGGGGGCTGCGCGGTTTCCCATCATGAAGCACT <<<<<<<<<<<<<<<<:<<<<<&<<%:<)7;7::4 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:49:271:588 83 chr1 830 99 35M = 658 -207 GCTGCGCGGTTTCCCATCATGAAGCACTGAACTTC :0=:===:<===;;===;================= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:40:594:752 147 chr1 831 99 35M = 651 -215 CTGCGCGGTTTCCCATCATGAAGCACTGAACTTCC ;7;9<;;;<;<;:<<;;<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:163:757:432 99 chr1 837 99 35M = 1013 211 GGTTTCCCATCATGAAGCACTGAACTTCCACGTCT <<<<<<<;<<<<<<<<;<;<<<<<<<<<<<<83:< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:156:857:494 83 chr1 838 99 35M = 648 -225 GTTTCCCATCATGAAGCACTGAACTTCCACGTCTC <<<8<:5<<;<<8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:84:91:614 163 chr1 839 99 35M = 1019 215 TTTCCCATCATGAAGCACTGATCTTCCACGTCTCA ;4<<<<<-84<<<;<<<<8<7.<4<<;77&:%<:: MF:i:18 Aq:i:39 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS51_64:7:152:918:824 163 chr1 839 99 35M = 1033 229 TTTCCCATCATGAAGCACTGAACTTCCACGTCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:67:317:249 147 chr1 840 26 35M = 683 -192 TTCCCATCATGACGCACCGAACTTCCACGTCTCAT .5;7;++;<8.;&:7<<.5<<<<7<<7<<<<<<;7 MF:i:130 Aq:i:26 NM:i:2 UQ:i:18 H0:i:0 H1:i:0
--EAS51_62:7:96:836:737 147 chr1 841 99 35M = 642 -234 TCCCATCATGAAGCACTGAACTTCCACGTCTCATC 1<;<7;;1;8;;8:<<1<;<<;<<<<<<<<<<;<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:130:912:658 83 chr1 841 99 35M = 652 -224 TCCCATCATGAAGCACTGAACTTCCACGTCTCATC ;=;;;<<<<<=55=;==<=======<========= MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:75:934:439 163 chr1 842 99 35M = 1001 194 CCCATCATGAAGCACTGAACTTCCACGTCTCATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:212:329:348 163 chr1 842 99 35M = 1020 212 CCCATCATGAAGCACTGAACTTCCACGTCTCATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:49:183:435 163 chr1 843 99 35M = 1005 197 CCATCATGAAGCACTGAACTTCCACGTCTCATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<;;<;:;8;: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:280:133:495 99 chr1 843 99 35M = 1015 207 CCATCATGAAGCACTGAACTTCCACGTCTCATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:232:351:909 147 chr1 843 80 36M = 685 -194 CCATCATGAAGCGCTGAACTTCCACGTCTCATCTAG :8%3<8====130=8==+===;=3=8===48==;3* MF:i:18 Aq:i:39 NM:i:1 UQ:i:15 H0:i:0 H1:i:1
--EAS221_1:8:77:781:676 163 chr1 846 99 35M = 1010 199 TCATGAAGCACTGAACTTCCACGTATCATCTAGGG <<<<<<<5<<5<<<<<<<<<<<<13<<2<<<<<,< MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS1_95:2:198:691:595 83 chr1 847 99 35M = 655 -227 CATGAAGCACTGAACTTCCACGTCTCATCTAGGGG :=:;=;===========;================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:31:948:254 147 chr1 849 99 35M = 680 -204 TGAAGCACTGAACTTCCACGTCTCATCTAGGGGAA 7;;;98<<7<<<<<<<<<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:278:440:902 99 chr1 851 99 35M = 1032 216 AAGCACTGAACTTCCACGTCTCATCTAGGGGAACA =========<==<==============:;;=;=;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:74:674:124 163 chr1 854 99 35M = 1041 222 CACTGAACTTCCACGTCTCATCTAGGGGAACAGGG <<<<<<<<<<<<:<;<<<<;<<<<;9;<<;;.;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:28:781:723 147 chr1 855 99 36M = 676 -215 ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG 8488<::;4;;<:;;;::<;7<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:28:474:566 163 chr1 855 99 36M = 1018 199 ACTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG <<<<<<<<<<<<<<<<<<<<<<<:<;<;;<<7;8;< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:124:241:608 147 chr1 856 99 35M = 670 -221 CTGAACTTCCACGTCTCATCTAGGGGAACAGGGAG 9;;<<;<<<;<<<;<:<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:187:925:547 147 chr1 857 99 35M = 689 -203 TGAACTTCCACGTCTCATCTAGGGGAACAGGGAGG ((988+&8<<;<09<;<<9<<4<<-<99<<;<9<; MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:9:512:826 99 chr1 859 99 35M = 1021 197 AACTTCCACGTCTCATCTAGGGGAACAGGGAGGTG 67<<<;;;<;;<<;;<;<:;9;;;9;;;;<59777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:194:696:490 99 chr1 862 99 35M = 1026 199 TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC <<<<<<<<<<<<<<<<<<<;5<<<<<:<1<8<<<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:96:788:614 83 chr1 862 99 35M = 667 -230 TTCCACGTCTCATCTAGGGGAACAGGGAGGTGCAC ;9;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:81:786:340 163 chr1 863 99 35M = 1033 205 TCCACGTCTCATCTAGGGGAACAGAGAGGTGCACT <<<<7<<<<<<<<<<<<<<7<<;<&<<;;7<7;;; MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS192_3:7:298:644:697 163 chr1 863 99 35M = 1035 207 TCCACGTCTCATCTAGGGGAACAGGGAGGTGCACT <<<<<<<<<<<<<<<::;;;6<8:;;9;98;668; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:178:305:843 163 chr1 864 99 35M = 1037 208 CCACGTCTCATCTAGGGGAACAGGGAGGTGCACTA <<<<<<<<<<<<<<<<<<<:<<<<<;<<:<<:<;: MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:5:863:302 147 chr1 866 99 35M = 698 -203 ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT :4:29:<<<9;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:30:788:376 99 chr1 866 99 35M = 1038 207 ACGTCTCATCTAGGGGAACAGGGAGGTGCACTAAT <<<<<<<<<<<<:<<<<<<<<:<;<<(<7;7;:(; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:143:310:958 163 chr1 868 99 35M = 1048 215 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<<<<<<<<8<8<<<<<;;7<<<;6;<<+4;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:3:233:911 83 chr1 868 99 35M = 688 -215 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:75:637:650 83 chr1 868 99 35M = 691 -212 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC <<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:73:513:102 147 chr1 868 99 35M = 698 -205 GTCTCATCTAGGGGAACAGGGAGGTGCACTAATGC ==::===8=>=====>=>=>>>=>>==>=>>>>>> MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:297:637:86 83 chr1 869 99 35M = 704 -200 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG <:75<;<;;<<<<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS54_65:3:290:558:349 147 chr1 869 99 35M = 719 -185 TCTCAGCTAGGGGAACAGGGAGGTGCACTAATGCG 2;2;;'5&;<<5<<;5/<<<<<7<<;+;<<+1<8< MF:i:18 Aq:i:59 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS1_95:3:308:956:873 99 chr1 870 99 35M = 1068 233 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC <<<<<<<<<<<<<;<;<;1<<<<<.<9<;<<<<+; MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:147:64:416 147 chr1 870 99 35M = 701 -204 CTCATCTAGGGGAACAGGGAGGTGCACTAATGCGC /;49;:6<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:812:345 163 chr1 871 99 36M = 1036 201 TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCTC <<<<<<<7<;<<7<;77;3<&0-;<5<;6<1'13<: MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:134:243:630 163 chr1 871 99 35M = 1052 216 TCATCTAGGGGAACAGGGAGGCGCACTAATGAGCT <<<:<<<<</<<<-<<<<6/<-<:<5+<::-2</2 MF:i:18 Aq:i:39 NM:i:2 UQ:i:29 H0:i:0 H1:i:1
--EAS54_81:2:27:856:401 83 chr1 871 99 35M = 679 -227 TCATCTAGGGGAACAGGGAGGTGCACTAATGCGCT .'=.93======;;====;======;===;=;=== MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:45:462:455 83 chr1 874 99 35M = 723 -186 TCTAGGGGAACAGGGAGGTGCACTAATGCGCTCCA 62*<;;;;<<;<<9;;<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:264:988:663 147 chr1 875 99 35M = 688 -222 CGAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC (%<:4<4<<7<<1-:<1766<66<<<<+<:<;8;< MF:i:18 Aq:i:60 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_63:1:145:71:26 163 chr1 875 99 35M = 1040 200 CTAGGGGAACAGGGAGGTGCACTAATGCGCTCCAC <<<<<<<<<<<<<<<<<;<;;<<;<;<9<9;;99; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:101:825:28 163 chr1 879 99 35M = 1079 235 GGGAACAGGGGGGTGCACTAATGCGCTCCACGCCC <<86<<;<78<<<)<;4<67<;<;<74-7;,;8,; MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_4:5:63:875:1339 83 chr1 879 99 35M = 711 -203 GGGAACAGGGAGGTGCACTAATGCGCTCCACGCCC ;;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:290:270:557 99 chr1 880 99 35M = 1052 207 GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA <<<<<<<<<<<<<;<<<<9<:;<<<<<<5<0<<;+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:134:853:558 163 chr1 880 99 35M = 1071 226 GGAACAGGGAGGTGCACTAATGCGCTCCACGCCCA ==========================9=9=;<;<5 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:282:567:481 99 chr1 880 88 35M = 1064 219 GGAACAGGGAGGCGCACTAATGCGCTCCACGCCCA <<<<<<<<<<<<3<7<7<<<<;<<0)<<<<<<<<3 MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS114_30:1:154:818:165 163 chr1 881 99 35M = 1041 195 GAACAGGGAGGTGCACTAATGCGCTCCACGCCCAA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<:7;:; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:301:54:240 163 chr1 882 99 35M = 1061 214 AACAGGGAGGTGCACTAATGCGCTCCACGCCCAAG <<<<:<9<<<<:<<<<9<<<<<<690<<6</<(83 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:12:402:843 163 chr1 885 99 35M = 1072 222 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:262:965:756 99 chr1 885 99 35M = 1069 219 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<9;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:30:816:90 163 chr1 885 99 35M = 1057 207 AGGGAGGTGCACTAATGCGCTCCACGCCCCAGCCC <<<<<<<<<<<<<<<<<<<:<<<<<<::1&(1::7 MF:i:18 Aq:i:69 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS188_7:4:171:104:398 163 chr1 885 99 35M = 1066 216 AGGGAGGTGCACTAATGCGCTCCACGCCCAAGCCC =========)===97===3===4===4==,)=/)= MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:163:31:455 83 chr1 886 99 35M = 730 -191 GGGAGGTGCACTAATGCGCTCCACGCCCAAGCCCT 8;<<;<<<78+<=</<<=;23<=<<<<<<<<<<<< MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:149:354:667 147 chr1 888 99 35M = 734 -189 GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC ;<;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:18:571:1110 99 chr1 888 99 35M = 1070 217 GAGGTGCACTAATGCGCTCCACGCCCAAGCCCTTC 7<<<<<<<<<<<<;<<<<<<<<<<<<788<<<;6< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:312:837:406 163 chr1 889 99 35M = 1048 194 AGGTGCACTAATGCGCTCCACGCCCAAGCCCTTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:160:272:398 83 chr1 891 99 35M = 705 -221 GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA 3:,<,;;<<;<<1<<<<<<<;<;<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:228:587:504 99 chr1 891 65 35M = 1050 194 GTGCACTAATGCGCTCCACGCCCAAGCCCTTCTCA <<<<7<<7;7<<3<<<<7<<<<<*3<<<<74<:<* MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:35:361:546 83 chr1 892 99 35M = 731 -196 TGCACTAATGCGCTCCACGCCCAAGCCCTTCTCAC :4;4;;<<;4<8<;;<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:84:438:1505 99 chr1 893 99 40M = 1068 215 GCACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTTC 35<<:;9<;<;5<<<:<3<<7:<9/<)<<:::9<&5;;+1 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:277:482:316 163 chr1 894 99 35M = 1098 239 CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG <<<<<<<<<<<<<<;<;<<<:<;<<<<;<<<1<1; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:86:498:373 83 chr1 894 99 35M = 716 -213 CACTAATGCGCTCCACGCCCAAGCCCTTCTCACAG ):)4:<5<<<<;89<<<969<<<:<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:236:498:526 163 chr1 895 99 35M = 1048 188 ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:43:1120:878 99 chr1 895 99 35M = 1075 215 ACTAATGCGCTCCACGCCCAAGCCCTTCTCACAGT <<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<=7;7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:104:153:698 83 chr1 896 99 36M = 713 -219 CTAATGCGCTCCACGCCCAAGCCCTTCTCACAGTTT 69<<)9<<:5:6<<<16:<6/<6<1<<<<<:<:<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:166:42:147 99 chr1 898 99 35M = 1048 185 AATGCGCTCCACGCCCAAGCCCTTCTAACAGTTTC <<;<<<<<<<<<<<<<<<<;6<<64;)<<7;7;;; MF:i:18 Aq:i:43 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--B7_595:2:178:77:424 99 chr1 900 99 35M = 1058 193 TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG <<<<<<<<<<<<<<<6<<;<<<<<<<<6<;<<<<6 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:87:734:888 83 chr1 900 99 35M = 717 -218 TGCGCTCCACGCCCAAGCCCTTCTCACAGTTTCTG 56<<86;:<<<4;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:149:650:44 83 chr1 902 99 36M = 726 -212 CGCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC ;8<<</<<:<<595<<9<<<<<<<<<<<<<<3<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:552:234 99 chr1 903 99 35M = 1094 226 GCTCCACGCCCAAGCCCTTCTCACAGTTTCTGCCC <<<<<<<<<<<<<;<<<<<<<<9<969<<<<3<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:58:703:72 163 chr1 905 99 35M = 1088 218 TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC 2<7<<<<<<<<<<<8:<<<<8<(<8<:::8.::<3 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:242:4:593 99 chr1 905 99 35M = 1086 216 TCCACGCCCAAGCCCTTCTCACAGTTTCTGCCCCC <<<<<<<<<<<8<<<<-<<<<<88;<;<<8<;88< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:67:620:344 147 chr1 905 99 35M = 755 -185 CCCCCGCCCAAGCCCTTCTCACAGTTTCTGCCCCC +++*+++#++++++,++++++++,,+,&+,,,,+, MF:i:18 Aq:i:33 NM:i:2 UQ:i:19 H0:i:1 H1:i:0
--EAS51_62:7:178:286:414 83 chr1 907 99 35M = 731 -211 CACGCCCAAGCCCTTCTCACAGTTTCTGCCCCCAG 68;38::<<;<<8;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:174:987:334 163 chr1 908 99 35M = 1082 209 ACACCCAAGCCCTTCTCACAGTTTCTGCCCCCAGC <<;4<<<<;;</4<4<+<<<<<;<<<<<</<93+2 MF:i:18 Aq:i:41 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS219_FC30151:1:55:8:1412 163 chr1 910 99 35M = 1072 197 GCCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:8:1351:1986 83 chr1 911 99 35M = 729 -217 CCCAAGCCCTTCTCACAGTTTCTGCCCCCAGCATG <8;<<<<<<<<<<<;<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:37:610:260 83 chr1 913 99 35M = 745 -203 CAAGCCCTTCTCACAGTTTCTGCCCCCAGCATGGT /74<.<4.&<<<:<<<<::<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:228:189:826 99 chr1 914 99 35M = 1112 233 AAGCCCTTCTCACAGTTTCTGCCCCCCGCATGGTT ;9=========;=1======9=====1;=<3=:6; MF:i:18 Aq:i:45 NM:i:1 UQ:i:16 H0:i:0 H1:i:1
--EAS56_59:3:149:953:349 147 chr1 915 99 35M = 777 -173 AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG 2;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:24:1374:211 99 chr1 915 99 35M = 1064 184 AGCCCTTCTCACAGTTTCTGCCCCCAGCATGGTTG ;;:<<;<;:;;;;;;;;;;<::;;;6;;2+74917 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:5:491:391 147 chr1 917 99 35M = 782 -170 CCCTGCTCACAGTTTCTGCCCCCAGCATGGTTGTA -/+5-.&&:5+:92=6===========9======= MF:i:18 Aq:i:62 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS114_32:2:306:119:56 99 chr1 919 99 35M = 1083 199 CTTCTCACAGTTTCTGCCCCCAGCATGGTTGTACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:216:381:608 163 chr1 920 99 35M = 1075 190 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<;;+<6:<;26; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:73:292:429 147 chr1 920 99 35M = 752 -203 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG ;6;6;<<<<<;<<<<;<<<<<<<<7<<<<<<5<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:170:265:818 83 chr1 920 73 35M = 748 -207 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG 3+;%;.;;<<9+;3;;;<<<;57<1<;<<<<<<<; MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:278:906:933 99 chr1 920 99 35M = 1071 186 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<. MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:190:95:706 99 chr1 920 99 35M = 1078 193 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<9<<<<<;;<;<;;<<;<;;<, MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:278:848:765 99 chr1 920 99 35M = 1088 203 TTCTCACAGTTTCTGCCCCCAGCATGGTTGTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:29:249:878 163 chr1 921 99 35M = 1077 191 TCTCACAGTTTCTGCCCCCAGCATGGTTGTACTGG <<<<<<<<<<<<<<<<<<<<<<:<:<<=<<:<<6& MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:259:467:737 163 chr1 923 99 36M = 1102 215 TCACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCA <<<<<<<<<<<<7<<<<<<<'<<.<<<<<<;;;<67 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:24:195:604 163 chr1 923 99 35M = 1098 210 TCACAGTTTCTGCCCCCAGCATGGTTGTACTGTGC <;<<<<<<<<<89<<<<<868<8;6<8;3(38&<8 MF:i:18 Aq:i:65 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_32:4:42:923:169 163 chr1 925 99 35M = 1099 209 ACAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAA 9<<<;9<<<<<;<;<<.<<;<;6<<<<1;8<<-0; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:29:529:379 163 chr1 926 99 35M = 1117 226 CAGTTTCTGCCCCCAGCATGGTTGTACTGGGCAAT <<<<<<<<8<<<<<<<<<<<<<<<<<;<672;<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:26:785:882 163 chr1 926 99 35M = 1107 216 CAGTTTCTGCCCCAAGCATGGTTGTACTGGGCAAT <<<0<<<<<<<<<6,<<)<<<<<<<&<<0<<,<'< MF:i:18 Aq:i:39 NM:i:1 UQ:i:21 H0:i:0 H1:i:1
--B7_591:7:129:956:115 83 chr1 927 99 36M = 740 -223 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC <<:<9<4<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:82:356:253 147 chr1 927 99 35M = 752 -210 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA 97;7<<;;<<<<<7;<<:<<<9<<;<<<9<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:134:379:893 99 chr1 927 99 35M = 1095 203 AGTTTCTGCCCCCAGCATGGTTGTACTGGGCAATA <<<<<<<<<<<<<5<<<<;<<<<<;<:5;<<4+<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:256:404:584 99 chr1 928 99 35M = 1096 203 GTTTCTGCCCCCAGCATGGTTGTACTGGGCAATAC <<<<<<<<<<<<<<<<<<<<<7<3;<:;;3:3:</ MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:76:333:905 163 chr1 929 99 35M = 1076 182 TTTCTGCCCCCAGCATGGTTGTACTGGGCAATACA <<<<<7;<;<<6<<6<<7<<7<)&<4+6)0+<;(0 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:11:646:628 99 chr1 930 99 36M = 1106 212 TTCTGCCCCCAGCATGGTTGTACTGGGCAATACATG <<<<<<<<<<6<<<<<<<<<<<<</<;<<<<<<6<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:136:389:320 99 chr1 930 99 35M = 1100 205 TTCTGCCCCCAGCATGGTTGTACTGGGCAATACAT 7<<<<<;<<7<6<<;;<;<;;677<6;(27;<(97 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:93:334:858 99 chr1 932 99 35M = 1106 209 CTGCCCCCAGCATGGTTGTACTTGGCAATACATGA <<<<<<<<;<<<<;;<<9<<<<&;&<<9<9;/;&; MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:3:46:981:766 83 chr1 933 99 35M = 778 -190 TGCCCCCAGCATGGTTGTACTGGGCAATACATGAG /<<<;/;<<316<<<3<<<<7<<<7<<<;<<<<<7 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:209:159:130 99 chr1 934 99 34M = 1109 210 GCCCCCAGCATGGTTGTACTGGGCAATACATGAG <<<<<<8<<<<<<&<<+7<<4<<<22<;<<<<3< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:111:796:737 99 chr1 936 99 35M = 1112 211 CCCCAGCATGGTTGTACTGGGCAATACATGTGATT <<<<<<<<<<<<<<<:<<;7;<<<<993<4%:%<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:4:15:856:340 99 chr1 936 99 35M = 1093 192 CCCCAGCATGGTTGCACTGGGCAATACATGAGATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<77<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_610:5:7:761:623 147 chr1 938 99 35M = 757 -216 CCGGCATGGTTGTACTGGGCAATACATGAGATTAT ::';-8);<<<<;<1<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS1_97:5:84:927:843 99 chr1 938 99 35M = 1138 235 CCAGCATGGTTGTACTGGGCAATACATGAGATTAT <<<<<<<<<<<<<;9;;4;<<0<<7<<9<;<:<5< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:273:901:459 99 chr1 938 99 35M = 1098 195 CCAGCATGGTTGTACTGGGCAATACATGAGATTAT <<8<<<;<;8<;<;<;7+8<788<;;22<27;77; MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:256:407:470 83 chr1 939 99 35M = 762 -212 CAGCATGGTTGTACTGGGCAATACATGAGATTATT 7.47;0;;5<4033*<<<<<9,<<<<<;<<<<<3< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:77:251:446 163 chr1 939 99 35M = 1110 206 CAGCATGGTTGTACTGGGCAATACATGAGATTATT <<9<<<<<<<<<<<<<97<<<<<<<<<96<<<+<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:102:467:897 147 chr1 940 97 35M = 756 -219 AGCATGGTTGTACAGGGCAATACATGAGATTATTA 83333<+02<:<.&<+<.<::7<<::<<<<:<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS221_1:6:92:1807:1185 99 chr1 940 99 35M = 1119 214 AGCATGGTTGTACTGGGCAATACATGAGATTATTA <<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:142:858:903 99 chr1 943 99 35M = 1121 213 ATGGTTGTACTGGGCAATACATGAGATTATTAGGA ======;====5=======9======;===3=5=; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:143:560:194 147 chr1 946 99 35M = 768 -213 GTTGTACTGGGCAATACATGAGATTATTAGGAAAT 9:<;7<:::<:<;<<<<<<<<<<:<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:148:437:481 83 chr1 949 99 36M = 764 -221 GTACTGGGCAATACATGAGATTATTAGGAAATGCTT <<<;<<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:75:917:886 163 chr1 951 99 35M = 1110 194 ACTGGGCAATACATGAGATTATTAGGAAATGCTTT <<<<<<<<<<<<<<:<<<<<<<<<71<<<:6<:8< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:118:851:285 163 chr1 953 99 35M = 1133 215 TGGGCAATACATGAGATTATTAGGAAATGCTTTAC <<<<<<<<<<<<<<<<<<<<<<<;;<;<:<<<<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:179:389:585 83 chr1 953 24 35M = 770 -218 TGTGAAATGAATGAGATTATTAGGAAATGCTTTAC ;<)<;*;9*+<;<<,,<,<4<4<<<<<;<4<9494 MF:i:18 Aq:i:24 NM:i:4 UQ:i:53 H0:i:0 H1:i:0
--EAS114_30:7:269:944:220 163 chr1 953 99 35M = 1147 229 TGGGCAATACATGAGATTATTAGGAAATGCTTTAC <<<<<<<8<<<<<<<<<<<<<<<;<<<<<;<<;81 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:93:1002:845 163 chr1 954 99 35M = 1129 210 GGGCAATACATGAGATTATTAGGAAATGCTTTACT <<<<<<<<<<<<<<<<<<<<<:<<;<<<;<<<</< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:66:584:407 83 chr1 954 99 35M = 785 -204 GGGCAATACATGAGATTATTAGGAAATGCTTTACT <<84<<<766<<<.6<<<<<<4<<7<<<<<<<7<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:63:48:631 163 chr1 957 99 35M = 1143 221 CAATACATGAGATTATTAGGAAATGCTTTACTGTC <<<<<<;<<7</<<<<<<;;;<<<;<;<<7;;);< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:187:791:153 147 chr1 958 99 35M = 803 -190 AATACATGAGATTATTAGGAAATGCTTTACTGTCA :;55&<99<<1<;<<8<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:72:1809:1398 99 chr1 958 99 35M = 1145 222 AATACATGAGATTATTAGGAAATGCTTTACTGTCA <<<<<<<<<<<<<<<<<<::<9<<<<<<<<<6<<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:66:257:524 147 chr1 959 99 35M = 791 -203 ATACATGAGATTATTAGGAAATGCTTTACTGTCAT <;<<<<<<<<3<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:247:522:670 163 chr1 960 99 35M = 1121 196 TACATGAGATTATTAGGAAATGCTTTACTGTCATA <<<<<<<<<<<<<<<;<<<<<<<<<<<<<5;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:37:400:627 163 chr1 961 99 35M = 1154 228 ACATGAGATTATTAGGAAATGCTTTACTGTCATAA <<<<<<7+<<<<<<2615<<6<<<<5<<1<<;:74 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:329:177:267 163 chr1 962 99 35M = 1139 212 CATGAGATTATTAGGAAATGCTTTACTGTCATAAC <<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<9; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:166:203:416 163 chr1 963 99 35M = 1136 208 ATGAGATTATTAGGAAATGCTTTACTGTCATAACT <<<<<<<<<<<<<<<<<<;<<<<<<<;<<<<<97< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:14:360:580 147 chr1 963 99 35M = 799 -199 ATGAGATTATTAGGAAATGCTTTACTGTCATAACT <,1<;<;;<<<<<1<<<;<7<<6<:;;<<<<<<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:193:38:987 163 chr1 964 99 35M = 1158 229 TGAGATTATTAGGAAATGCTTTACTGTCATAACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<:;:;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:39:59:738 163 chr1 965 99 35M = 1142 212 GAGATTATTAGGAAATGCTTTACTGTCATAATTAT 3<8.<<<<<<<-<<<<3<388;;880<0<0)-722 MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS51_66:4:209:92:210 163 chr1 965 99 35M = 1156 226 GAGATTATTAGGAAATGCTTTACTGTCATAACTAT <<<<<<<<<<<<<<<<;<<<<<<<5<7<<;;;<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:86:308:648 99 chr1 970 99 35M = 1161 226 TATTAGGAAATGCTTTACTGTCATAACTATGAAGA =8=====;=8======;=======35==;=;.;25 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:206:563:262 163 chr1 971 99 35M = 1137 201 ATTAGGAAATGCTTTACTGTCATAACTATGAAGAG <<<<<<<<<;<<<<<<<<<<<<;<<<<<<<-;<4; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:82:822:767 99 chr1 972 99 35M = 1165 228 TTAGGAAATGCTTTACTGTCATAACTATGAAGAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<.<<.<,< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:207:926:427 163 chr1 973 99 35M = 1159 221 TAGGAAATGCTTTACTGTCATAACTATGAAGAGAC <<<<<<7<<<<<;<<<<<6:<;<6<&<58<<6::: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:144:28:475 99 chr1 974 99 35M = 1167 228 AGGAAATGCTTTACTGTCATAACTATGAAGAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<::8< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:55:74:1040 147 chr1 975 99 35M = 818 -192 GGAAATGCTTTACTGTCATAACTATGAAGAGACTA ;;;;;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:274:176:479 99 chr1 976 99 35M = 1144 203 GAAATGCTTTACTGTCATAACTATGAAGAGACTAT <<<<<<<<<<<<<;<<<<<<<<<<;<<9<59<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:122:337:968 147 chr1 981 10 35M = 823 -193 GCTTTACTGTCTAAACTATGAAGAGACTATTGCCA %454<75!7<+!990<9<6<<<<6<</<<<<<<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:24 H0:i:0 H1:i:0
--EAS114_28:7:157:786:424 99 chr1 981 99 36M = 1171 226 GCTTTACTGTCATAACTATGAAGAGACTATTGCCAG <<<<<<<<<<<<<;<<<<<<;<<;<<;<<<<+4:70 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:63:527:1923 147 chr1 981 99 35M = 803 -213 GCTTTACTGTCATAACCATGAAGAGACTATTGCCA 9<<<8<-8;;8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:7:55:506:125 147 chr1 982 99 35M = 817 -200 CTTTACTGTCATAACTATGAAGAGACTACTGCCAG 118%67;1;8,4:187<4>::1:818;;&::<>.; MF:i:18 Aq:i:35 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_81:2:31:98:804 147 chr1 982 99 35M = 805 -212 CTTTACTGTCATAACTATGAAGAGACTATTGCCAG ====;========7===================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:235:805:373 163 chr1 983 99 35M = 1146 198 TTTACTGTCATAACTATGAAGAGACTATTTCCAGA <<<<<<<<<<<<<<<<<<<<;<;<<<<<<;;<99; MF:i:18 Aq:i:74 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS114_28:5:11:868:62 99 chr1 983 99 36M = 1154 207 TTTACTGTCATAACTATGAAGAGACTATTGCCAGAT <<<<<<<<<<<<<<<<<<<<:<<<;<<<<(7:7039 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:280:512:316 163 chr1 984 99 35M = 1159 210 TTACTGTCATAACTATGAAGAGACTATTGCCAGCT ==<========6==4==6;;==:===;=2/:+8%6 MF:i:18 Aq:i:68 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:5:292:122:666 99 chr1 985 99 35M = 1159 209 TACTGTCATAACTATGAAGAGACTATTGTCAGATG <<<<<<6<<<<<<<<8;<<<<<<<<<<3&9+;;(; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_53:1:23:403:981 99 chr1 985 99 35M = 1151 201 TACTGTCATAACTATGAAGAGACTATTGCCAGATG <8<<<;<<<<<<;<<<<<<8;<<<9<9,3;,6(91 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:33:1566:588 99 chr1 985 76 35M = 1166 216 TACTGTCATAACTATGAAGAGCCTATTGCCAGATG <;.;;;;6;;;;6;;29;;;<+9;;;.3;;73797 MF:i:18 Aq:i:37 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS139_11:7:92:367:1495 83 chr1 987 99 35M = 820 -202 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA <8<88<<<<7<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:38:1576:1923 83 chr1 987 99 35M = 822 -200 CTGTCATAACTATGAAGAGACTATTGCCAGATGAA 8;<98<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:190:481:295 163 chr1 990 99 35M = 1161 206 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<<<<<<<<<<<<<<<<<<<<<9<<<<<9<7<2:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:168:117:441 99 chr1 990 99 35M = 1151 196 TCATAACTATGAAGAGACTATTGCCAGATGAACCA <<3<<<<<<<<<<<<<<<<<<<+<<17;<;:<995 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:239:796:221 163 chr1 992 99 35M = 1160 203 ATAACTATGAAGAGACTATTGCCAGCTGACCCCCC <<<7<<7<<7<<7<;<<<<<,;;,+'<+/+99%:' MF:i:18 Aq:i:37 NM:i:4 UQ:i:26 H0:i:0 H1:i:1
--EAS220_1:4:69:88:1154 147 chr1 992 99 35M = 805 -222 ATAACTATGAAGAGACTATTGCCAGATGAACCACA <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:34:956:1309 99 chr1 994 99 35M = 1168 209 AACTATGAAGAGACTATTGCCAGATGAACCACACA <<<<<<7<<<<<<<<<<<6<<<<<<<<<<<:<8<8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:229:717:121 99 chr1 995 99 35M = 1150 190 ACTATGAAGAGACTATTGCCAGATGAACCACACAC =================<)=<4<0=.<<<71;41& MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS219_1:1:67:191:668 99 chr1 995 99 35M = 1134 174 ACTATGAAGAGACTATTGCCAGATGAACCACACCT <<<<<<<<<<<<<<<<<6<<;<;<;<<<<<<6;%2 MF:i:18 Aq:i:74 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_64:3:309:303:278 163 chr1 996 99 35M = 1178 217 CTATGAAGAGACTATTGCCAGATGAACCACACATT <<<<<<<<<<<<<<<<+<<+<<7<<<<<5<<<;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:60:1020:1259 99 chr1 996 99 35M = 1157 196 CTATGAAGAGACTATTGCCAGATGAACCACACATT <;<<<<;<<<<<<<<<;<<<<<<<8<<<<<:<:<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:89:1487:520 83 chr1 997 99 35M = 805 -227 TATGAAGAGACTATTGCCAGATGAACCACACATTA 4;;/<<<<<:<;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:15:805:420 163 chr1 998 35 35M = 1164 201 ATGAAGAGACTATTCACATGTGAACCACACATTTA ;73;;;;67.;1<<+*.;*&<4947<&474&*9*( MF:i:130 Aq:i:35 NM:i:4 UQ:i:33 H0:i:0 H1:i:0
--EAS56_57:3:119:761:239 147 chr1 999 99 35M = 813 -221 TGAAGAGACTATTGCCAGATGAACCACACATTAAT ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:142:457:584 99 chr1 999 99 35M = 1160 196 TGAAGAGACTATTTCCAGATGAACCACACATTAAT <<<<<<<<<<<<</<<,6<66<<<;<;;<*4744. MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS218_4:7:87:964:826 83 chr1 999 99 35M = 822 -212 TGAAGAGACTATTGCCAGATGAACCACACATTAAT )6<<<<<<:;<6<<::<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:49:905:27 83 chr1 1000 68 35M = 821 -214 GAAGAGACTATTGCCAGTTGAACCACACATTAATA 99515<<&<<6595-56%;86&<;<<<6<<<<6;< MF:i:18 Aq:i:31 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS1_108:3:75:934:439 83 chr1 1001 99 35M = 842 -194 AAGAGACTATTGCCAGATGAACCACACATTAATAC ==7=:=========================<==== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:99:212:522 83 chr1 1002 99 35M = 806 -231 AGAGACTATTGCCAGATGAACCACACATTAATACT <1<16<7<3<<;;<8<<<<<<<<<<<<;<<<<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:187:294:947 147 chr1 1002 99 35M = 823 -214 AGAGACTATTGCCAGATGAACCACACATTAATACT <<:<<8181;<8<<<<<<<<8<<<<<<<<<<<<<: MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:2:152:860:286 163 chr1 1004 99 35M = 1171 202 AGACTATTGCCAGATGAACCACACATTAATACTAT <;<<<;<<0:<3<:<<2<<<<<7+<7+47<9(999 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:49:183:435 83 chr1 1005 99 35M = 843 -197 GACTATTGCCAGATGAACCACACATTAATACTATG 1<7<<<<;:<<<<<;<<<;<<<;<;<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:63:854:610 163 chr1 1005 99 35M = 1180 210 GACTATTGCCAGATGAACCACACATTAATACTATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:12:276:1797 99 chr1 1006 99 35M = 1190 219 ACTATTGCCAGATGAACCACACATTAATACTATGT <<<<<<<<<<<<:</<<9<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:190:42:671 163 chr1 1008 99 36M = 1192 220 TATTGCCAGATGAACCACACATTAATACTATGTTTC <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:67:692:110 99 chr1 1009 99 35M = 1175 201 ATTGCCAGATGAACCACACATTAATACTATGTTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:61:183:767 99 chr1 1010 99 35M = 1195 220 TTGCCAGATGAACCACACCTTAATACTATGTTTCT <<<<<<<<<<;<<<9<9<+<<<8<<<<<<;8<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS221_1:8:77:781:676 83 chr1 1010 99 35M = 846 -199 TTGCCAGATGAACCACACATTAATACTATGTTTCT :<;<2<<<<<<26<<<<6<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:21:132:1423 99 chr1 1012 99 35M = 1178 201 GCCAGATGAACCACACATTAATACTATGTTTCTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:163:757:432 147 chr1 1013 99 35M = 837 -211 CCAGATGAACCACACATTAATACTATGTTTCTCAT 1+<8<<<<<<;<5<;<<<<<;5<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_30:3:302:288:657 99 chr1 1013 99 35M = 1173 195 CCAGATGAACCACACATTAATACTATGTTTCTTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:97:1584:777 99 chr1 1013 99 35M = 1200 222 CCAGATGAACCACACATTAATACTATGTTTCTTAT <<;<;;;;<;<;<<;;;;;;;;;;;;;;:;79979 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:280:133:495 147 chr1 1015 99 35M = 843 -207 AGATGAACCACACATTAATACTATGTTTCTTATCT <:<9:<<7:<6<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:100:708:1984 147 chr1 1015 99 35M = 819 -231 AGATGAACCACACATTAATACTATGTTTCTTATCT :8<(8<)9<;<<<<+<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:182:313:319 99 chr1 1016 99 35M = 1180 199 GATGAACCACACATTAATACTATGTTTCTTATCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<;<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:41:474:283 99 chr1 1018 99 35M = 1182 199 TGAACCACACATTAATACTATGTTTCTTATCTGCA <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<+<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:28:474:566 83 chr1 1018 99 36M = 855 -199 TGAACCACACATTAATACTATGTTTCTTATCTGCAC ;<<<+<<<<5<<<<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:84:91:614 83 chr1 1019 99 35M = 839 -215 GAACCACACATTAATACTATGTTTCTTATCTGCAC <<;;<<<7<<<<<<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:159:222:274 99 chr1 1019 99 35M = 1189 205 GAACCACACATTAATACTATGTTTCTTATCTGCAC =;9====;=9==59=+==9========9===5;7= MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:62:603:1552 163 chr1 1019 99 35M = 1180 196 GAACCACACATTAATACTATGTTTCTTATCTGCAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:212:329:348 83 chr1 1020 99 34M = 842 -212 AACCACACATTAATACTATGTTTCTTATCTGCAC 8<6:<:<<<;<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:233:97:262 99 chr1 1021 99 34M = 1175 189 ACCACACATTAATACTATGTTTCTTATCTGCCCA <<<<<<<<<<<;<;<<:<<<<<<<<<<<<.<&77 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_45:7:9:512:826 147 chr1 1021 99 35M = 859 -197 ACCACACATTAATACTATGTTTCTTATCTGCACAT 76777:;;;;;;;;;;;;;;;;;;;;;;;;;:;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:29:794:282 163 chr1 1025 99 36M = 1196 207 CACATTAATACTATGTTTCTTATCTGCACATTACTA <<<<<<<<<<<<<<<<<<<<<;<<<&<<;:<<8<<8 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:278:524:521 163 chr1 1025 99 35M = 1224 234 CACATTAATACTATGTTTCTTATCTGCACATTACT <<<;<<;<<<<<<<;<<<<<<<<<<7;5;<<<;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:39:966:551 99 chr1 1026 99 35M = 1205 214 ACATTAATACTATGTTTCTTATCTGCACATTACTA <<<<<<<<<<<<<<<<<<<<<<<<:<;<&<<&<<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:194:696:490 147 chr1 1026 99 35M = 862 -199 ACATTAATACTATGTTTCTTATCTGCACATTACTA ========;======;==========8==:===== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:305:565:952 99 chr1 1030 99 36M = 1213 219 TAATACTATGTTTCTTATCTGCACATTACTACCCTG 7<<<<<<<<<7<<<<<<<<<7<<<;;<;<;<<<<<+ MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:287:258:321 99 chr1 1030 99 35M = 1194 199 TAATACTATGTTTCTTATCTGCACATTACTACCCT <<<<<<<<<<<;<<<<<<<<42:<+<<<;<<;;;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:278:440:902 147 chr1 1032 99 35M = 851 -216 ATACTATGTTTCTTATCTGCACATTACTACCCTGC <;7;4<;<;;;<<;<;;;<<<<<9<<<;<<<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:180:905:36 99 chr1 1033 99 35M = 1212 214 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ==========8===;;=========;==77%41=; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:152:918:824 83 chr1 1033 99 35M = 839 -229 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:81:786:340 83 chr1 1033 99 35M = 863 -205 TACTATGTTTCTTATCTGCACATTACTACCCTGCA ;<;<<<;<<;<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:196:11:27 163 chr1 1035 65 36M = 1198 199 CTATGTTTCTTATCTGCNCATTACTACCCTGCAATT <<<<<<<<;<<<<<<<8!4<<<;+<88;8<+2,8<; MF:i:18 Aq:i:24 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS192_3:7:298:644:697 83 chr1 1035 99 35M = 863 -207 CTATGTTTCTTATCTGCACATTACTACCCTGCAAT 8:<8;<;:7;<<;4;:+<7<<<<;<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:812:345 83 chr1 1036 99 36M = 871 -201 TATGTTTCTTATCTGCACATTACTACCCTGCAATTA ;<;<<<<5<<<:<;<:<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:178:305:843 83 chr1 1037 99 35M = 864 -208 ATGTTTCTTATCTGCACATTACTACCCTGCAATTA <<<<<<<4<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:30:788:376 147 chr1 1038 99 35M = 866 -207 TGTTTCTTATCTGCACATTACTACCCTGCAATTAA :5<<4:88;9<<<<<;<<<<;<8<;<<<<1<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:1:145:71:26 83 chr1 1040 99 35M = 875 -200 TTTCTTATCTGCACATTACTACCCTGCAATTAATA 882;8;<;;887<<<;;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:157:42:763 163 chr1 1040 99 35M = 1203 198 TTTCTTATCTGCACATTACTACCCTGCAATTATTA <<;<;<<<<<;<:4<<<<<<<<<;;4<<<:;;+;+ MF:i:18 Aq:i:61 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--B7_589:8:74:674:124 83 chr1 1041 99 35M = 854 -222 TTCTTATCTGCACATTACTACCCTGCAATTAATAT ;;;;;<<:<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:154:818:165 83 chr1 1041 99 35M = 881 -195 TTCTTATCTGCACATTACTACCCTGCAATTAATAT ;;;;<<<;<;;<;<<<<;<<;;;<<;<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:319:174:811 99 chr1 1044 99 35M = 1242 233 TTATCTGCACATTTCTACCCTGCAATTAATATAAT <<<<<<<<<;<<<<<<<<<;;<<<<<<<8<<;9<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_19:3:87:133:930 163 chr1 1044 99 40M = 1198 194 TTATCTGCACATTACTACCCTGCAATTAATATAATTGTGT <<<7<<<<;<<;7<<7<<;;<<<;<5;<;;;5;;<:/48: MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:44:1466:425 163 chr1 1044 99 35M = 1213 204 TTATCTGCACATTACTACCCTGCAATTAATATAAT <<<<<<<<<<<<<<<<<<<<<;<<<<<<;<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:236:498:526 83 chr1 1048 99 35M = 895 -188 CAGCACATTACTACCCTGCAATTAATATAATTGTG <%88<;<:8<<<<:<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_64:3:143:310:958 83 chr1 1048 99 35M = 868 -215 CTGCACATTACTACCCTGCAATTAATATAATTGTG 84<;<6<<<<;<<<;;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:312:837:406 83 chr1 1048 99 35M = 889 -194 CTGCACATTACTACCCTGCAATTAATATAATTGTG ;<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:166:42:147 147 chr1 1048 99 35M = 898 -185 CTGCACATTACTACCCTGCAATTAATATAATTGTG 3.7;;;;:<<<77<<3<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:279:763:945 99 chr1 1048 99 36M = 1210 198 CTGCACATTACTACCCTGCAATTAATATAATTGTGT <<<<<<<<<<<<<<<<<<<4:<<47<:<;<<</<9< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:82:998:566 163 chr1 1050 99 35M = 1227 212 GCACATTACTACCCTGCAATTAATATAATTGTGTC <<<<<<<:<<0<<<<:<82<<::<4<<;<<4<4<; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:228:587:504 147 chr1 1050 65 35M = 891 -194 GCACATTACGACCCGGCAAGGTGTATAATTGTGTC ;4;4;&&82&04+&&48;3&3&*<7<47<<;-<-8 MF:i:130 Aq:i:65 NM:i:6 UQ:i:47 H0:i:0 H1:i:0
--B7_595:6:290:270:557 147 chr1 1052 99 35M = 880 -207 ACATTACTACCCTGCAATTAATATAATTGTGTCCA 87:9;;;<851+:5.<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:134:243:630 83 chr1 1052 99 35M = 871 -216 ACATTACTACCCTGCAATTAATATAATTGTGTCCA 63<;37:<*&:<<<,,*<<:7<<7<<<<<<<::<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:47:303:887 163 chr1 1052 96 35M = 1240 223 ACATTACTACCCTGCCATTAATATACTTGTGTCCA <<;;<+<9<<<<<9<(6<;//</<8(<<89;6084 MF:i:18 Aq:i:25 NM:i:2 UQ:i:14 H0:i:0 H1:i:0
--EAS221_3:8:74:770:1712 163 chr1 1052 99 35M = 1208 191 ACATTACTACCCTGCAATTAATATAATTGTGTCCA <<<<<<<<<<<<<<<<<<<5<<<<<<<<<<<<7<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:29:575:453 163 chr1 1056 99 36M = 1228 208 TACTACCCTGCAATTAATATAATTGTGTCCATTTAC <<<<<<<<<<<<<<<<<<<<<<<<7<1<:<9<&<98 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:5:318:177:383 163 chr1 1056 99 35M = 1251 230 TACTACCCTGCAATTAATATAATTGTGTCCATGTA ;<<<<<<<<;<<<<<<<<<<<<<<<<<<7<;1'<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:179:549:753 99 chr1 1056 99 35M = 1218 197 TACTACCCTGCAATTAATATAATTGTGTCCATGTA <<<<<<<<<<<<<<<<<<<<<<<<8<7<<<:<9<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:30:816:90 83 chr1 1057 99 35M = 885 -207 ACTACCCTGCAATTAATATAATTGTGTCCATGTAC :<3:%9299<<<<<<<<<5<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:178:77:424 147 chr1 1058 99 35M = 900 -193 CTACCCTGCAATTAATATAATTGTGTCCATGTACA :5:8<;<;:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:301:54:240 83 chr1 1061 99 35M = 882 -214 CCCTGCAATTAATATAATTGTGTCCATGTACACAC &..*3===1=========5.5==5===4====:5= MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:91:521:517 99 chr1 1061 99 35M = 1239 213 CCCTGCAATTAATATAATTGTGTCCATGTACACAC <<<<<<<<<<<<<<<<9<<<<<<<<<<8<<;;;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:24:1374:211 147 chr1 1064 99 35M = 915 -184 TGCAATTAATATAATTGTGTCCATGTACACACGCT 77661;;;5;;:;;:;:;;;;;;8:;;;:;;;;;: MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:282:567:481 147 chr1 1064 88 35M = 880 -219 TGCAATTAATATAATTGTGTCCACGTACACACGCT <9<6<;<9<<<;<<<;<5<7<5</7<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS188_7:4:171:104:398 83 chr1 1066 99 35M = 885 -216 CAATTAATATAATTGTGTCCATGTACACACGCTGT 79<+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:9:80:353 163 chr1 1067 99 35M = 1233 201 AATTAATATAATTGTGTCCATGTACACACGCTGTC <<<<<<<<<<<<<<<<<<<<<6<<<;;<<5<<2;2 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:42:920:522 163 chr1 1067 99 35M = 1244 212 AATTAATATAATTGTGTCCATGTACACACGCTGTT <<<<<<<<<<<<<:<<<<<<<:<<<<<<<:;;::& MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_95:3:308:956:873 147 chr1 1068 99 35M = 870 -233 ATAAAAATAAGTGTGTCCATGTACACACGCTGTCC 91.97&9499&-1*98*19999839999.9&9799 MF:i:18 Aq:i:31 NM:i:3 UQ:i:23 H0:i:0 H1:i:1
--EAS139_19:6:84:438:1505 147 chr1 1068 99 40M = 893 -215 ATTAATATAATTGTGTCCATGTACACACTCTGTCCTATGT :0::413::;:::0:179::3<;<:<9<&6<<<;<019<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS51_62:3:55:340:837 163 chr1 1069 99 35M = 1238 204 TTAATATAATTGTGTCCATGTACACACGCTGTCCT <<;<<;<<<<<8<;<<<;<7<<<;<<<<<93+79( MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:262:965:756 147 chr1 1069 99 35M = 885 -219 TTAATATAATTGTGTCCATGTACACACGCTGTCCT <<:<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:18:571:1110 147 chr1 1070 99 35M = 888 -217 TAATATAATTGTGTCCATGTACACACGCTGTCCTA 9<<;<;==;;=;=<;<=================== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:40:918:950 163 chr1 1071 99 35M = 1247 211 AATATAATTGTGTCCATGTACACACGCTTTCCTTT =========,=9=====2=7===7=0==&=+3=-= MF:i:18 Aq:i:65 NM:i:2 UQ:i:17 H0:i:1 H1:i:0
--EAS1_97:2:59:882:980 163 chr1 1071 99 35M = 1263 227 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <<<<<<<<<8<<<<<9<+<<<9<<<1<<77889+6 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:134:853:558 83 chr1 1071 99 35M = 880 -226 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <<<<8<<<7<<<<;;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:278:906:933 147 chr1 1071 99 35M = 920 -186 AATATAATTGTGTCCATGTACACACGCTGTCCTAT <88::<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:12:402:843 83 chr1 1072 99 35M = 885 -222 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <7<+<<11<9<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:160:434:853 163 chr1 1072 99 35M = 1259 222 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <<<<<<<<<<<<<<<<<<<<<<,<<<<:<<<<,<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:55:8:1412 83 chr1 1072 99 35M = 910 -197 ATATAATTGTGTCCATGTACACACGCTGTCCTATG <<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:219:294:861 163 chr1 1073 99 35M = 1244 206 TATAATTGTGTCCATGTACACACGCTGTCCTCTGT <<<<<<<<<<<<<9<<<5<9<<<9<<544<<'<+: MF:i:18 Aq:i:69 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS220_1:4:14:1665:1772 163 chr1 1073 84 35M = 1263 225 TATAATGGTGTCCATGTACACACGCTGTCCTATGT <<<<<7*<<<<<<<<<78<5<<7<<5<556<(73( MF:i:18 Aq:i:39 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--B7_591:3:45:294:380 163 chr1 1074 80 36M = 1233 195 ATAATTGTGTCCATGTACACACGATGTCATATGTAC <<<<<<<<9<<<<<<<<<70<<7<6272&:3<+</% MF:i:18 Aq:i:39 NM:i:2 UQ:i:32 H0:i:0 H1:i:1
--EAS1_108:7:222:538:267 99 chr1 1074 99 35M = 1228 189 ATAATTGTGTCCATGTACACACGCTGTCCTATTTA <<<<<<<<<<<<<<<<<<<<<;<<<<74;;39%6+ MF:i:18 Aq:i:67 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:216:381:608 83 chr1 1075 99 35M = 920 -190 TAATTGTGTCCATGTACACTCGCTGTCCTATGTAC 55<99<<<99;<;<<(<39&7<<<<<<<<<<<<<9 MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_67:1:138:186:274 99 chr1 1075 99 35M = 1231 191 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC =39====9===;=;=;=9=;=====;===-=+=-7 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:43:1120:878 147 chr1 1075 99 35M = 895 -215 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC <<<;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:166:776:590 163 chr1 1075 99 35M = 1252 212 TAATTGTGTCCATGTACACACGCTGTCCTATGTAC <<<<<</<<<<<<<<<<<<<'<=<:26.</79<:: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:76:333:905 83 chr1 1076 99 35M = 929 -182 AATTGTGTCCATGTACACACGCTGTCCTATGTACT <<;<<<<;7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:29:249:878 83 chr1 1077 99 35M = 921 -191 ATTGTGTCCATGTACACACGCTGTCCTATGTACTT <,;<9<;<:<<<<<<<<<<<<<<<<<<<<<<><<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:190:95:706 147 chr1 1078 99 35M = 920 -193 TTGTGTCCATGTACACACGCTGTCCTATGTACTTA 9;97437;<;;<<;<;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:101:825:28 83 chr1 1079 99 35M = 879 -235 TGTGTCCATGTACACACGCTGTCCTATGTACTTAT 0;0'0;<<<<<<8<;<<<<;;3<<;;<<<8<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:188:460:1000 99 chr1 1080 99 35M = 1251 206 GTGTCCATGTACACACGCTGTCCTATGTACTTATC <<<<<<<<<<<<<<<<7<<;:4;44<;;:8;;9;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:268:523:511 99 chr1 1081 99 35M = 1241 195 TGTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<;<<<<6<:9<<3<44 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:54:263:585 99 chr1 1081 99 36M = 1254 209 TGTCCATGTACACACGCTGTCCTATGTACTTATCAT <<<<<<<<<<<<<<<<<<<:;<<;<:;::<<;;:;4 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:174:987:334 83 chr1 1082 99 35M = 908 -209 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ,;<;;<<<&<<<1<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:224:932:942 99 chr1 1082 99 34M = 1250 203 GTCCATGTACACACGCTGTCCTATGTACTTATCA <<<<<<<<<<<<<<<<<<<<<<;<<<<7<<(;3, MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:12:1296:358 99 chr1 1082 96 35M = 1252 205 GTCCATGTACACACGCTGTCCTATGTACTTATCAT ;;;6;7;7;;;;;7;9;;-*1;9;699/99/7477 MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:306:119:56 147 chr1 1083 99 35M = 919 -199 TCCATGTACACACGCTGTCCTATGTACTTATCATG ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:66:179:118 163 chr1 1084 99 35M = 1262 213 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;<<6<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:110:584:649 99 chr1 1084 99 35M = 1266 217 CCATGTACACACGCTGTCCTATGTACTTATCATGA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<::<38 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:28:315:310 163 chr1 1085 99 35M = 1242 192 CATGTACACACGCTGTCCTATGTACTTATCATGAC <<<<<<<<<<<<<<<<<<<<<:<+.<<.<+7<*17 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:242:4:593 147 chr1 1086 99 35M = 905 -216 ATATACACACGCTGTCCTATGTACTTATCATGACT 1.%55877+8+88808887+7;7;18:8;;;.&;8 MF:i:18 Aq:i:53 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:131:946:353 163 chr1 1087 99 35M = 1249 197 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<;<<<<;;<<<<<<<;<:52;<2 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:4:1732:88 99 chr1 1087 99 35M = 1265 213 TGTACACACGCTGTCCTATGTACTTATCATGACTC <<<<<<<<<<<<<<<<<2<8;8<;<8;<2;2:<:< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:58:703:72 83 chr1 1088 99 35M = 905 -218 GTACACACGCTGTCCTATGTACTTATCATGACTCT 5&<<7;+95;7'6<<<<<.<<<<<;<<9<7<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:113:694:725 163 chr1 1088 99 35M = 1266 213 GTACACACGCTGTCCTATGTACTTATCATGACTCT <<<<<<<<<<<<9<<<<<:<<<<<<<<<<:;;<;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:278:848:765 147 chr1 1088 99 35M = 920 -203 GTACACACGCTGTCCTATGTACTTATCATGACTCT 7;;<;5<55<<;;<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:234:787:12 163 chr1 1092 97 35M = 1257 200 ACACGCTGGCCTATGTACTTATAATGACTCTATCC <;<<<9<<&+9;3;<993;<9<+94;9&41;08%9 MF:i:18 Aq:i:24 NM:i:2 UQ:i:15 H0:i:0 H1:i:0
--EAS218_1:4:15:856:340 147 chr1 1093 99 35M = 936 -192 CACGCTGTCCTATGTACTTATCATGACTCTATCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:258:266:101 163 chr1 1094 99 35M = 1285 226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA <<<<<<<<<<<<<<<<<<5<;,<-2<<<<;68<<6 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:177:552:234 147 chr1 1094 99 35M = 903 -226 ACGCTGTCCTATGTACTTATCATGACTCTATCCCA ::;:=;=99=====;;====;==========<=== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:134:379:893 147 chr1 1095 99 35M = 927 -203 CGCTGTCCTATGTACTTATCATGACTCTATCCCAA 7137::;<<<<<<<;<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:256:404:584 147 chr1 1096 99 35M = 928 -203 ACTGTCCTATGTACTTATCATGACTCTATCCCAAA &&326+23<3<<<+:<</<<8<<<:7:<<<<<<<< MF:i:18 Aq:i:60 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_30:4:317:378:535 163 chr1 1096 99 35M = 1258 197 GCTGTCCTATGTACTTATCATGACTCTATCCCAAA <<<<<<<<<<<<:<<<<<<<<<;<<;<8<;:7:1( MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:277:482:316 83 chr1 1098 99 35M = 894 -239 TGTCCTATGTACTTATCATGACTCTATCCCAAATT 9998;<<<<<;;<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:273:901:459 147 chr1 1098 99 35M = 938 -195 TGTCCTATGTACTTATCATGACTCTATCCCAAATT 4;+/+7,;<8+&<;;82;;<8<8<2<;<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:316:25:230 163 chr1 1098 99 35M = 1273 210 TGTCCTATGTACTTATCATGACTCTATCCCAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<);2;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:24:195:604 83 chr1 1098 99 35M = 923 -210 TGTCCTATGTACTTATCATGACTCTATCCCAAATT ;6<02;<<<<59<<;<;<<<<9<3<<<<<<<<<;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:42:923:169 83 chr1 1099 99 35M = 925 -209 TTCCTATGTACTTATCATGAATCTATCCCAAATTC &;972<;&<9<,;;;<<<;<&99<<;<;;3<<3<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:10 H0:i:0 H1:i:1
--EAS114_45:6:59:1548:1096 163 chr1 1099 99 35M = 1297 233 GTCCTATGTACTTATCATGACTCTATCCCAAATTC ;.;;;;;;;;6;;;;;;;;;;;;;;;73;;77777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:136:389:320 147 chr1 1100 99 35M = 930 -205 TCCTATGTACTTATCATGACTCTATCCCAAATTCC .5:,666<)<8<:<<:66<<<<<<<<<<5<<7<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:122:342:296 99 chr1 1100 99 35M = 1256 191 TCCTATGTACTTATCATGACTCTATCCCAAATTCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<*<<<<9< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:259:467:737 83 chr1 1102 99 36M = 923 -215 CTATGTACTTATCATGACTCTATCCCAAATTCCCAA 8<<<<<<<:<<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:71:832:743 163 chr1 1102 99 35M = 1290 223 CTATGTACTTATCATGACTCTATCCCAAATTCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<*<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:105:521:563 163 chr1 1103 72 35M = 1267 199 TATGTACTTATCATGACTCTATCCCAAATTCCCAA ;<)<9995<9<<59<7<<<<7<7<35,0,544<3( MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:201:195:757 163 chr1 1103 99 35M = 1298 230 TATGTACTTATCATGACTCTATCCCAAATTCCCAA <<<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;;8 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:6:585:132 163 chr1 1105 23 36M = 1276 207 TGTACTTATCATGTTTCTTTCCTAATTTTTCAATTA 6666166&6)+61))646+6&)&%&-44))1'144' MF:i:130 Aq:i:23 NM:i:7 UQ:i:59 H0:i:0 H1:i:0
--EAS1_105:2:179:532:82 99 chr1 1105 99 35M = 1285 215 TGTACTTATCATGACTCTATCCCAAATTCCCAATT <<<<<<<<<<<<<<<<<<<<3<;<;<<<<:<8<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:11:646:628 147 chr1 1106 99 36M = 930 -212 GTACTTATCATGACTCTATCCCAAATTCCCAATTAC <<<3<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:93:334:858 147 chr1 1106 99 35M = 932 -209 GTACTTATCATGACTCTATCCCAAATTCCCAATTA ;<;+;;<<;<<<<<;<<<<;;8<<<<8<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:26:785:882 83 chr1 1107 99 35M = 926 -216 TACTTATCATGACTCTATCCCAAATTCCCAATTAC <<&5&<<<<5.;5<'<<;.76<<<<<7<7<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:4:54:989:654 99 chr1 1108 99 35M = 1296 223 ACTTATCATGACTCTATCCCAAATTCCCAATTACG <<<<<<<<<<<<<<<9<<<<<<9<<<<<1<<<88; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:202:326:680 163 chr1 1108 78 35M = 1268 195 ACTTATCATGACTCTATCCCAAATTCTCAATTACG <<<<<<<4<<<*<<<*<<<7..:7<3*:7.7<+.; MF:i:18 Aq:i:37 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--B7_597:3:53:616:842 163 chr1 1109 99 35M = 1288 214 CTTATCATGACTCTATCCCAAATTCCCACTTACGT <<<<<<<<<<<<<<<<<<<;07<<<<<-&<<-<4; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_71:4:209:159:130 147 chr1 1109 99 35M = 934 -210 CTTATCATGACTCTATCCCAAATTCCCAATTACGT ;:6<:<8::;<<<;<-<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:75:917:886 83 chr1 1110 99 35M = 951 -194 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<8<<<<<<8<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:286:753:854 163 chr1 1110 99 35M = 1288 213 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<<<<<<<<<<<<<<<3<<<<<<9999<;<<9; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:290:146:36 99 chr1 1110 99 35M = 1280 205 TTATCATGACTCTATCCCAAATTCCCAATTACGTC <<<<<<<<<<<<<<<<<<<<<<<8<<<<<;;<;;< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:93:1475:542 163 chr1 1110 99 35M = 1254 179 TTATCATGACTCTATCCCAAATTCCCAATTACGTC ;;;;;;;;;;;;;;;;;;;;;;9;;;9;;;77777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:77:251:446 83 chr1 1110 99 35M = 939 -206 TTATCATGACTCTATCCCAAATGCCCAATTACGTC <<24,:8<<<:1<<<:35<:<:,<<<<<<:5:<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS1_105:3:176:431:647 163 chr1 1112 99 35M = 1285 208 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <<<<<<<<<<<<<<<<2<<<<<<<<6<<<<9<<6< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:111:796:737 147 chr1 1112 99 35M = 936 -211 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <3<<<<<<<<<<<7<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:228:189:826 147 chr1 1112 99 35M = 914 -233 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT :74=:.==1========================== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:35:631:594 163 chr1 1112 99 35M = 1271 194 ATCATGACTCTATCCCAAATTCCCAATTACGTCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:29:529:379 83 chr1 1117 99 35M = 926 -226 GACTCTATCCCAAATTCCCAATTACGTCCTATCTT ;<<<:<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:74:596:137 99 chr1 1119 91 35M = 1294 210 CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT <<<<<<<<<</4<<<<<<*<:6<<<<<<<<;/3<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:92:1807:1185 147 chr1 1119 99 35M = 940 -214 CTCTATCCCAAATTCCCAATTACGTCCTATCTTCT <<<<<<9<<<<<<<<<<<<<<<<<<<<<<><<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:57:735:151 99 chr1 1121 94 35M = 1314 228 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<<<<8<<8<:<<*<:<<<4<<<;,<<<<:<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:142:858:903 147 chr1 1121 99 35M = 943 -213 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC <<<<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:247:522:670 83 chr1 1121 99 35M = 960 -196 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTC ;;;9;:<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:75:732:442 99 chr1 1121 99 40M = 1293 212 CTATCCCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<;<<<<<9<<<;<<;<<<5<<;8<<<<<<<<;:9%% MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:183:645:699 99 chr1 1122 86 35M = 1281 194 TATCCCAAATTCCCAATTACGTCCTATCTTCTTCT <<9<9<<<<<<<<<;<<;<<*175;173<;;;<-/ MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:175:437:950 163 chr1 1126 99 35M = 1298 207 CCAAATTCCCAATTACGTCCTATCTTCTTCTTAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:59 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:93:1002:845 83 chr1 1129 99 35M = 954 -210 AATTCCCAATTACGTCCTATCTTCTTCTTAGGGAA <<::;;;<<<<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:50:542:881 163 chr1 1132 99 35M = 1324 227 TCCCAATTACGTCCTATCTTCTTCTTAGGTAAGAA <<<<<4<09<<9<<2<<<<<<<<<<<2/.&2<%<7 MF:i:18 Aq:i:63 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_99:3:118:851:285 83 chr1 1133 99 35M = 953 -215 CCCAATTACGTCCTATCTTCTTCTTAGGGAAGAAC 3+7<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:67:191:668 147 chr1 1134 99 35M = 995 -174 CCAATTACGTCCTATCTTCTTCTTAGGGAAGAACA <<<<<7<<7<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:166:203:416 83 chr1 1136 99 35M = 963 -208 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC <<<<<<<<::<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:15:1497:1530 99 chr1 1136 99 35M = 1314 213 AATTACGTCCTATCTTCTTCTTAGGGAAGAACAGC 0<;;;9;;86<;;;<<&<<.<<;)3;7;654-471 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:206:563:262 83 chr1 1137 99 35M = 971 -201 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:40:352:151 99 chr1 1137 99 35M = 1327 225 ATTACGTCCTATCTTCTTCTTAGGGAAGAACAGCT <<<<<<<<<<<<<<<;<<9<<<<:<<<<;<99<3< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:67:302:762 99 chr1 1138 99 36M = 1313 211 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<;;65;<-<;<:8<<<3 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:84:927:843 147 chr1 1138 99 35M = 938 -235 TTACGTCCTATCTTCTTCTTAGGGAAGAACAGCTT 588;<:<<<<<<<6<<<<;<<<:/<<3<:;<*<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:147:479:41 163 chr1 1139 99 35M = 1322 218 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<::6<<;<<<;;9;;6 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:329:177:267 83 chr1 1139 99 35M = 962 -212 TACGTCCTATCTTCTTCTTAGGGAAGAACAGCTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:72:916:763 163 chr1 1142 99 35M = 1340 233 GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT </:8<8)<<<<:<<<<<;.89<:67<.;<<7+336 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:124:128:489 99 chr1 1142 99 35M = 1348 241 GTCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGT <<<<<<<<<<<<<<<<<6:6<<-4<::;;<<:48< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:39:59:738 83 chr1 1142 99 35M = 965 -212 GTCCTATGTTCTTCTTAGGGAAGAACAGCTTAGGT ;.;4;<;3<<9<<9<&<<9<<<<<;<9<;<<;9<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS1_99:6:63:48:631 83 chr1 1143 99 35M = 957 -221 TCCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTA ;*:;;<2<<2779;:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:274:176:479 147 chr1 1144 99 35M = 976 -203 CCTATCTTCTTCTTAGGGAAGAACAGCTTAGGTAT 7)<<7<626<<7<<<<<<<<<<<<<<<<<<<3<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:72:1809:1398 147 chr1 1145 99 35M = 958 -222 CTATCTTCTTCTTAGGGAAGAACAGCTTAGGTATC ;:;;:<7:7<:<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:235:805:373 83 chr1 1146 99 35M = 983 -198 TATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCA <<;<<<<<<9<9<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:269:944:220 83 chr1 1147 99 35M = 953 -229 ATCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAA <;<;8<<;7<<<<<;<<-<<<<<<;<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:174:597:66 163 chr1 1148 99 35M = 1307 194 TCTTCTTCTTAGGGAAGAACAGCTTAGGTATCAAT <<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;6;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:229:717:121 147 chr1 1150 99 35M = 995 -190 TTCTTCTGAGGGAAGAACAGCTTAGGTATCAATTT 6;-;7<<(<<<<<8<18<7<<<<<<<<<;<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS56_53:1:23:403:981 147 chr1 1151 99 35M = 985 -201 TCTTCATAGGGAAGAACAGCTTAGGTATCAATTTG (;3+<&3<</7<<<<<<;<<<<<<<<<<<<</<2< MF:i:18 Aq:i:65 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS112_32:7:168:117:441 147 chr1 1151 99 35M = 990 -196 TCTTCTTAGGGAAGAACAGCTTAGGTATCAATTTG ;;;;3;<<<<<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:52:1455:1212 99 chr1 1153 99 40M = 1304 191 TTCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTCT <9<<<99<;<<9<;<-<<<6<<75;;<*%<5<3+.8:*5; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:37:400:627 83 chr1 1154 99 35M = 961 -228 TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTG 474*;<<9<;<<<;<<:<<<<<<;<<<<<<;<<;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:11:868:62 147 chr1 1154 99 36M = 983 -207 TCTTAGGGAAGAACAGCTTAGGTATCAATTTGGTGT ;;77;;7<<<<<<<<7<<<;<7<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:209:92:210 83 chr1 1156 99 35M = 965 -226 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT ;9;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:128:394:455 163 chr1 1156 99 35M = 1313 192 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT ======6==========;===9==;5===;==;== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:316:949:122 99 chr1 1156 99 35M = 1321 200 TTAGGGAAGAACAGCTTAGGTATCAATTTGGTGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<0<:<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:60:1020:1259 147 chr1 1157 99 35M = 996 -196 TAGGGAAGAACAGCTTAGGTATCAATTTGGTGTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:193:38:987 83 chr1 1158 99 35M = 964 -229 AGGGAAGAACAGCTTAGGTATCAATTTTGTGTTCT <<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_93:5:292:122:666 147 chr1 1159 99 35M = 985 -209 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG <;<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:280:512:316 83 chr1 1159 99 35M = 984 -210 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG ;9===;======;7==;;======;=====;==== MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:207:926:427 83 chr1 1159 99 35M = 973 -221 GGGAAGAACAGCTTAGGTATCAATTTGGTGTTCTG ;;7<<;4<<<2<<;<<<<<<<<<<7<;<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:239:796:221 83 chr1 1160 99 35M = 992 -203 GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT ;;<<;<<;<<<+:<<<4<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:142:457:584 147 chr1 1160 99 35M = 999 -196 GGAAGAACAGCTTAGGTATCAATTTGGTGTTCTGT 8::<:<<9<<.<:<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:190:481:295 83 chr1 1161 99 35M = 990 -206 GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG ;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:86:308:648 147 chr1 1161 99 35M = 970 -226 GAAGAACAGCTTAGGTATCAATTTGGTGTTCTGTG <7<<<;<<<<+;<<<2<5<<<77;<<2<;;<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:182:23:585 99 chr1 1163 99 35M = 1336 208 AGAACAGCTTAGGTATCAATTTGGTGTTCTGTGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:216:650:516 99 chr1 1164 99 36M = 1326 198 GAACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:15:805:420 83 chr1 1164 35 35M = 998 -201 GAACAGTTTAGGTATCAATTTGGTGTTCTTTGTAA <64<59&996<(64<)7).68<0<0<<7741<1:< MF:i:18 Aq:i:35 NM:i:2 UQ:i:24 H0:i:0 H1:i:1
--EAS56_65:6:82:822:767 147 chr1 1165 99 35M = 972 -228 AACAGCTTAGGTATCAATTTGGTGTTCTGTGTAAA <<9<<<<<<<<<<;;<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:33:1566:588 147 chr1 1166 76 35M = 985 -216 ACAGCTTAGGCATCAATTTGGTGTTCTGTGTAAAG -6246;;97;77;;97;;;;;;9;7;79;)&;37; MF:i:18 Aq:i:37 NM:i:1 UQ:i:22 H0:i:0 H1:i:1
--EAS1_93:1:20:635:509 163 chr1 1167 99 35M = 1333 201 CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT <<<<<<<<<;<<<<;<<<;<;;;<<<;<<<<<<(8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:144:28:475 147 chr1 1167 99 35M = 974 -228 CAGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGT ;;;9;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:36:1402:1709 163 chr1 1168 99 35M = 1326 193 AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC <<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<:9<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:34:956:1309 147 chr1 1168 99 35M = 994 -209 AGCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTC 9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:157:784:936 163 chr1 1169 99 35M = 1356 222 GCTTAGGTATCAATTTGGTGTTCTGTGTAAAGTCT <<<<<<<<<<<<<<<<<:<<<<<<;<<<<814<4< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:2:152:860:286 83 chr1 1171 99 35M = 1004 -202 TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCA 2;5;8<<;5<<<;<2<8<<<<<<;8<;<<<<;<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:157:786:424 147 chr1 1171 99 36M = 981 -226 TTAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG ;<;2;;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:33:1407:94 163 chr1 1172 99 35M = 1360 223 TAGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAG ;;;;;;;6:;;:::7;:;;;;:::;;;;:;47771 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:302:288:657 147 chr1 1173 99 35M = 1013 -195 AGGTATCAATTTGGTGTTCTGTGTAAAGTCTCAGG <:5<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:233:97:262 147 chr1 1175 99 35M = 1021 -189 GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA --;;7<;<;;:;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:67:692:110 147 chr1 1175 99 35M = 1009 -201 GTATCAATTTGGTGTTCTGTGTAAAGTCTCAGGGA ;;<<8<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:68:692:347 163 chr1 1176 99 36M = 1351 211 TATCAATTTGGTGTTCTGTGTAAAGTCTCATGGAGC <<<<<<<<<+6<;<<<<3<:<<<<6<8<<<&*/;*0 MF:i:18 Aq:i:64 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS51_64:3:309:303:278 83 chr1 1178 99 35M = 996 -217 TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC <:<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:21:132:1423 147 chr1 1178 99 35M = 1012 -201 TCAATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCC :<<<<<6<<;<<;<5<;<<<<<<;<6<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:63:854:610 83 chr1 1180 99 35M = 1005 -210 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT :.5;2<:88<<72:<<;<<7<8;<;/<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:182:313:319 147 chr1 1180 99 35M = 1016 -199 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT </<;185;8<;;87<;8<<<<8<;83<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:62:603:1552 83 chr1 1180 99 35M = 1019 -196 AATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGT 8::;:<<6<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:145:144:796 99 chr1 1181 99 35M = 1372 226 ATTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTC <<<<<<<<<<<<<<;<<<<<<;<<<<<<4;4;<;/ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:41:474:283 147 chr1 1182 99 35M = 1018 -199 TTTGGTGTTCTGTGTAAAGTCTCAGGGAGCCGTCC 6/;;;88;;<:;48<<<<<;<;<<<<<<<<<<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:329:458:365 99 chr1 1186 99 35M = 1364 213 GTGTTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGT ==========================9======== MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:159:222:274 147 chr1 1189 99 35M = 1019 -205 GTCTGGGGAAAGTCTCAGGGAGCCGTCCGTGTCCT ''7*<&<'<<<<.<2<<<<<<<<<<+<<<8<8<<; MF:i:18 Aq:i:37 NM:i:3 UQ:i:17 H0:i:0 H1:i:1
--EAS114_32:6:88:162:587 99 chr1 1189 99 35M = 1372 218 TTCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCT <;<<<<<<<<<;<5<;<;<<7<++<<2&*:322+7 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:148:340:479 99 chr1 1190 99 35M = 1364 209 TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC <<<<<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:12:276:1797 147 chr1 1190 99 35M = 1006 -219 TCTGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTC )9<02)<<<<<<<<<<<<<1<<<<&<<<<9<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:190:42:671 83 chr1 1192 99 36M = 1008 -220 TGTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA <<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:321:271:138 99 chr1 1193 99 35M = 1394 236 GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA <<<<<<<<<<<<<<<<<<<<<;9<<;<<;;<88;& MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:154:669:853 163 chr1 1193 99 35M = 1371 213 GTGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCA ============<===.====<:=<9=<<<9;:;2 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:287:258:321 147 chr1 1194 99 35M = 1030 -199 TGTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCAT :.<9<)<;<9<.<<:<:+5:<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:61:183:767 147 chr1 1195 99 35M = 1010 -220 GTAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATC 6&.;;<3<363<<<<<<<<8<<<6<<<<3<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:29:794:282 83 chr1 1196 99 36M = 1025 -207 TAAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG 7<<<<45::-<<<<<;<<-;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:313:827:992 99 chr1 1197 99 35M = 1379 217 AAAGTCTCAGGGAGCCGTCCGTGTCCTCCCATCTG <<<<6<<<<:<<<<<66<<<:33:<<<80<;6<8+ MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:196:11:27 83 chr1 1198 65 36M = 1035 -199 AAGACCCAGTTAGCCGTCCGTGTCCTCCCATCTGGC 96&6<'<7:!!<,:;+7<<6:<<<<<<<<<7<7;:< MF:i:18 Aq:i:24 NM:i:4 UQ:i:27 H0:i:0 H1:i:0
--EAS139_19:3:87:133:930 83 chr1 1198 99 40M = 1044 -194 CAGTCTCAGGGCGCCGTCCGTTTCCTCCCATCTGGCCTCG )8&)907)-;9&,<<9)<;<<0<;<<99<<<<<<;<<9<< MF:i:18 Aq:i:39 NM:i:3 UQ:i:28 H0:i:0 H1:i:1
--EAS114_45:7:97:1584:777 147 chr1 1200 99 35M = 1013 -222 GTCTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCC 66746,9::9;;;;:;;;;;;;;;;;;;;;:;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:127:153:861 99 chr1 1202 99 35M = 1374 207 CTCAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTC <<<<<<<<<<<<<<<<<<<<<<<=<*<<<24;;:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:157:42:763 83 chr1 1203 99 35M = 1040 -198 TCTGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCG 4++;((2(5;24<./<:<<<<<<<<;<<88<<<<9 MF:i:18 Aq:i:61 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:4:91:267:655 99 chr1 1204 99 35M = 1365 196 CAGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGT <<<<<<<<<<<<<<<<<<<<<;:;;7<9477<74; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:39:966:551 147 chr1 1205 99 35M = 1026 -214 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC 8;;;;;<<6'<<<+8<<<1<<<<4<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:61:38:1182 163 chr1 1205 99 35M = 1388 218 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:47:352:1492 99 chr1 1205 99 40M = 1385 220 AGGGAGCCGTCCGTGTCCTCCCATCTGGCCTCGCCCACTA :<<<::<24<04-&<;<<2<<<&<60)&<5<<6*8:)9+* MF:i:18 Aq:i:53 NM:i:3 UQ:i:28 H0:i:1 H1:i:0
--EAS221_3:8:74:770:1712 83 chr1 1208 99 35M = 1052 -191 GAGCCGTCCGTGTCCTCCCATCTGGCCTCGTCCAC 3.&::6<<<9<6:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:279:763:945 147 chr1 1210 99 36M = 1048 -198 GCCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT +9:-+<:1-44<<':<;<+<-<<<;:<<;;<<<<<0 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:306:388:342 163 chr1 1211 99 35M = 1398 222 CCGTCCGTGTCCTCCCATCTGGCCTCGTCCACACT ================5====:=====;==1=4== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:180:905:36 147 chr1 1212 99 35M = 1033 -214 CCTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG 6%%<;<662<<*;<<<8<<:<<<<<<<<<<<<<<; MF:i:18 Aq:i:65 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:2:19:752:816 99 chr1 1212 99 35M = 1394 217 CGTCCGTGTCCTCCCATCTGGCCTCGTCCACACTG <<<<<<<<<<<<<<<<<<<8<7;<;<<767277;6 MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:305:565:952 147 chr1 1213 99 36M = 1030 -219 GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT 5(<1<147<81<*8--8<<<7<91<<<;+<+<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:44:1466:425 83 chr1 1213 99 35M = 1044 -204 GTCCGTGTCCTCCCATCTGGCCTCGTCCACACTGG 6-<<9<<:<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:68:64:783 163 chr1 1214 99 35M = 1402 223 TCCGTGTCCTCCCATCTGGCCTCGTCCACACTGGT <<<<<<<<<<<<<<<<<;;<<<<<<;<<<9:<<:9 MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:64:37:257 163 chr1 1215 99 35M = 1389 209 CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT ================<=====;===8;4====== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:20:413:1334 99 chr1 1215 99 35M = 1370 190 CCGTGTCCTCCCATCTGGCCTCGTCCACACTGGTT 7<<;<<<.;<;67;7;;;:;;3;<59+...77677 MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:179:549:753 147 chr1 1218 99 35M = 1056 -197 TGTCCTCCCATCTGGCCTCGTCCACACTGGTTCTC :77<</<<<::<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:16:823:343 99 chr1 1223 99 35M = 1403 215 TCCCATCTGGCCTCGTCCACACTGGTTCTCTTGAA ================================4== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:266:556:252 99 chr1 1224 99 35M = 1392 203 CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA <<<<<<<<<<<<<<<<<;<<<<<<4;;<;;;<7;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:278:524:521 83 chr1 1224 99 35M = 1025 -234 CCCATCTGGCCTCGTCCACACTGGTTCTCTTGAAA 7777,<;<<7<<<<;;<<;;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:72:1426:1883 99 chr1 1226 99 35M = 1405 214 CATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:82:998:566 83 chr1 1227 99 35M = 1050 -212 ATCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCT <9<9<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:6:29:575:453 83 chr1 1228 99 36M = 1056 -208 TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTTG ;<<<;;<:<<<;<;<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:222:538:267 147 chr1 1228 99 35M = 1074 -189 TCTGGCCTCGTCCACACTGGTTCTCTTGAAAGCTT 52/8-<<7<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:138:186:274 147 chr1 1231 99 35M = 1075 -191 GGCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGG <;<<<<<6;<<<<<3<<36;3;<9<<<<<<3;<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:137:895:681 99 chr1 1232 99 35M = 1418 221 GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<-8<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:71:636:533 99 chr1 1232 99 35M = 1398 201 GCCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGC <<<<<<<<<<<<<<<<<<<<<<<7<<<5<<<-847 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:45:294:380 83 chr1 1233 80 36M = 1074 -195 CCTCGTCCACACTGGTTCGCTTGAAAGCTTGGGCTG ;<+<7<<<<;7<,<7<<<+/7;<<;<<;7<<<;<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_66:8:9:80:353 83 chr1 1233 99 35M = 1067 -201 CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT ;;5;:8<:<:;:;<<<<;<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:73:302:1574 99 chr1 1233 99 35M = 1429 231 CCTCGTCCACACTGGTTCTCTTGAAAGCTTGGGCT <<<<<<<<<<;<<<<<<<<<<<<+:;<<;:8;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:131:779:345 163 chr1 1237 99 35M = 1399 197 GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA ============================9====;= MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:159:71:155 99 chr1 1237 99 35M = 1428 226 GTCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAA =========;=<======;=:=3;==;=6<==;=; MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:55:340:837 83 chr1 1238 99 35M = 1069 -204 TCCACACTGGTTCTCTTGAAAGCTTGGGCTGTAAT 61378<::<<<5:<;;:<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:91:521:517 147 chr1 1239 99 35M = 1061 -213 CCACACTGGTTCTCTTGAAAGCTTGGGCTGTAATG 8;8<4=:===7===9=============<====== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:47:303:887 83 chr1 1240 96 35M = 1052 -223 CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA <;<6<;<;<8<<<8<<<<;<<<.<<<<<<<8<8;< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:74:570:695 163 chr1 1240 99 35M = 1436 231 CACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGA =========================7====;8<8; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:268:523:511 147 chr1 1241 99 35M = 1081 -195 ACACTGGTTCTCTTGAAAGCTTGGGCTGTAATGAT 8<7<99<<<<<<<<<:<<<<<<4<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:319:174:811 147 chr1 1242 99 35M = 1044 -233 CACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATG ;7;3<<3.<<<<<<<<<<<4<<<<<<<<<<<<<0< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:28:315:310 83 chr1 1242 99 35M = 1085 -192 AAACTGTTCTCTTGAAAGCTTGGGCTGTAATGATG +%,768<<:<:<2<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:4 UQ:i:70 H0:i:1 H1:i:0
--EAS1_108:1:328:614:638 99 chr1 1243 99 35M = 1428 220 ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGC <<<<<<<<<<<<<<<<<<<<4/;<<9<<<<7<<*: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:63:930:152 163 chr1 1243 99 35M = 1410 202 ACTGGTTCTCTTGAAAGCTTGGGCTGTAATGATTC <<<<;<<<<<<<7<<;::<<)726;)<99<)&;&+ MF:i:18 Aq:i:59 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_59:1:219:294:861 83 chr1 1244 99 35M = 1073 -206 CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC ;,;<;<<<;&<<<<<<<5<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:6:42:920:522 83 chr1 1244 99 35M = 1067 -212 CTGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCC ;;;;;99<;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:87:89:696 99 chr1 1245 99 36M = 1419 210 TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCC <<<<<<<<<<<<<<<<<<<<<<<<<<;<:;<<<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:166:979:531 163 chr1 1245 99 35M = 1410 200 TGGTTCTCTTGAAAGCTTGGGCTGTAATGATGCCC <<</<<<<<<<<<9<<9<<;<7<<<<9<<<9<,)6 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:40:918:950 83 chr1 1247 99 35M = 1071 -211 GTTCTCTTGAAAGCTTGGGCTGTAATGATGCCCCT =0=&&33======;=====.=============== MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:131:946:353 83 chr1 1249 99 35M = 1087 -197 TCTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTG <<:<<66<<<6<<4<<<:8<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:224:932:942 147 chr1 1250 99 35M = 1082 -203 CTCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGG <;<<;;<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:318:177:383 83 chr1 1251 99 35M = 1056 -230 TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC 5:9;7;777<<7<<<<<<<<<<<<<<<<<<<<<<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:188:460:1000 147 chr1 1251 99 35M = 1080 -206 TCTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGC +;+077<7;<57<;;8<<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:12:1296:358 147 chr1 1252 96 35M = 1082 -205 CTTGAAAGCTTGGTCTGTAATGATGCCCCTTGGCC -770074;;6;&42;:2;;;:;;;;:;;/:;;;;: MF:i:18 Aq:i:37 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS188_4:5:166:776:590 83 chr1 1252 99 35M = 1075 -212 CTTGAAAGCTTGGGCTGTAATGATGCCCCTTGGCC <;:;<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:54:263:585 147 chr1 1254 99 36M = 1081 -209 TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCATC 1:::6<<<<;;;<4<<<<<<<<6<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:93:1475:542 83 chr1 1254 99 35M = 1110 -179 TGAAAGCTTGGGCTGTAATGATGCCCCTTGGCCAT 98987:9:<:;:;;;;;<<;<;<;;;;<<<;;;<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:122:342:296 147 chr1 1256 99 35M = 1100 -191 AAAGCTTGGGCTGTAATGATGCCCCTTGGCCATCA <:;:<<<;<2<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:234:787:12 83 chr1 1257 97 35M = 1092 -200 AAGCTTGGGCTGTAATGATGCCCCTTGGCCATCAC ;;.<;;994<;9<<;;;<<<<<<<7<<<<<<<<<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:317:378:535 83 chr1 1258 99 35M = 1096 -197 AGCTTGGGCTGTAATGATGCCCCTTGGCCATCACC ;7;':<77<<;<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:160:434:853 83 chr1 1259 99 35M = 1072 -222 GCTTGGGCTGTAATGATGCCCCTTGGCCATCACCC ;;*4;<;<<<;<<<<<<<8<<<;<<<<<<<<8<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:18:1498:1475 163 chr1 1260 99 35M = 1427 202 CTTGGGCTGTAATGATGCCCCTTGGCCATCACCCG <<<<<7<<<<<<+<<-3<<3<:<2<1<<:<<<<<+ MF:i:18 Aq:i:71 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--B7_593:2:104:744:280 99 chr1 1262 64 36M = 1421 195 TGGGCTGTAATGATGCCCCTTGTCCATCACCCGGTC <<<<<<<<<<<<<<;<;<<<<:4<<4<<0<;80+;: MF:i:18 Aq:i:21 NM:i:2 UQ:i:34 H0:i:0 H1:i:1
--EAS1_95:4:66:179:118 83 chr1 1262 99 35M = 1084 -213 TGGGCTGTAATGATGCCCCTTGGCCATCACCCAGT <<99<<<<<<<<<<<<<<<<<<<9<<<:<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:277:194:143 99 chr1 1262 99 35M = 1444 217 TGGGCTGTAATGATGCCCCTTGGCCATCACCCGGT <<<<<<<<<<<;<<<<<<<<<<9;<<<8</<<6<: MF:i:18 Aq:i:72 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS1_97:2:59:882:980 83 chr1 1263 99 35M = 1071 -227 GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC 7339%<6<<<<<;<<9<<8<<<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS220_1:4:14:1665:1772 83 chr1 1263 84 35M = 1073 -225 GGGCTGTAATGATGCCCCTTGGCCATCACCCGGTC <&7<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_57:2:259:42:969 163 chr1 1265 99 35M = 1426 196 GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC <<<<<;<<;<<3<<<;9<36<<29;<<;;;</;<2 MF:i:18 Aq:i:69 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:4:4:1732:88 147 chr1 1265 99 35M = 1087 -213 GCTGTAATGATGCCCCTTGGCCATCACCCGGTCCC :<4<:<<:<::<<<<<::<<<<<:<:<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:2:110:584:649 147 chr1 1266 99 35M = 1084 -217 CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT ++:4686<<68<;<;<;<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_59:5:113:694:725 83 chr1 1266 99 35M = 1088 -213 CTGTAATGATGCCCCTTGGCCATCACCCGGTCCCT ;::<<:<:<<<<<<<<<<:<:<<<<<<;<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:8:58:369:244 163 chr1 1266 99 35M = 1436 205 CTGTAATGATGCCCCTTGGCCATCACCCAGTCCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:105:521:563 83 chr1 1267 10 35M = 1103 -199 TGTAATGCTGCCCCTTGGCCATCCCCCGGTCCCTG /8)-8/6(98<967<3<<979<<1<<<7<<<<7<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:45 H0:i:0 H1:i:0
--EAS188_4:5:202:326:680 83 chr1 1268 78 35M = 1108 -195 GTAATGATGCCCCTTGGCCATCACCCGGTCCCTGC +33<81<:*<;<;;30;<<<;<<<8<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS192_3:6:216:292:528 99 chr1 1269 99 35M = 1438 204 TAATGATGCCCCTTGGCCATCACCCAGTCCCTGCC <;<;<<<<<<<;<<<<<<<<;;;;:;;:<%<;1;: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1864:477 163 chr1 1270 99 35M = 1465 230 AATGATGCCCCTTGGCCATCACCCAGTCCCTGCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:35:631:594 83 chr1 1271 99 35M = 1112 -194 ATGATGCCCCTTGGCCATCACCCGGTCCCTGCCCC <<<<4<<<<<.<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS112_34:8:103:812:255 99 chr1 1272 99 35M = 1461 224 TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCC <<<<<<<<<<<<<<<9<<;<<<39;;<;32:7;7+ MF:i:18 Aq:i:69 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS188_7:4:259:869:641 99 chr1 1272 99 35M = 1435 198 TGATGCCCCTTGGCCATCACCCAGTCCCTGCCCCA <<<<<<<<<<<<<<<<<<<<<,;<:<<<<<<<<<1 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:316:25:230 83 chr1 1273 99 35M = 1098 -210 GATGCCCCTTGGCCATCACCCGGTCCCTGCCCCAT 8;8;<<;<;;<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:6:38:1071:155 99 chr1 1274 99 35M = 1465 226 ATGCCCCTTGGCCATCACCCAGTCCCTGCCCCATC <<<<<<<<<<<<<:<<<<<<<<8<<<:<<:;;8:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:6:585:132 83 chr1 1276 23 36M = 1105 -207 GCCCCTTGACCACCACCCAGTCCCTGCCCCATCTCT :<473$'<+5;7*+<7<&<37<7<<<<7;;7<<:<7 MF:i:18 Aq:i:23 NM:i:2 UQ:i:19 H0:i:0 H1:i:0
--B7_595:6:47:720:789 99 chr1 1278 90 35M = 1455 212 CCCTTGGCCATCACCCGGTCCCGGCCCCTTCTCTT <<72<<<<<<<<;;<7;,0<2;*7<2;<*;;<<64 MF:i:18 Aq:i:25 NM:i:3 UQ:i:44 H0:i:0 H1:i:0
--EAS192_3:6:185:868:496 163 chr1 1278 99 35M = 1442 199 CCCTTGGCCATCACCCAGTCCCTGCCCCATCTCTT <<<<<<<<<<<<;<<<;<<<<<<<<<<<9<<;<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:290:146:36 147 chr1 1280 99 35M = 1110 -205 CTTTCCCATCCCCCGGTCCCTGCCCCATCTCTTGT 7;%%%<8-4<(<<<7<<<:<:<<<<<<<<<<<<<< MF:i:18 Aq:i:25 NM:i:4 UQ:i:37 H0:i:0 H1:i:0
--B7_593:5:267:71:603 99 chr1 1281 99 36M = 1446 201 TTGGCCATCACCCAGTCCCTGCCCCATCTCTTGTAA <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<9; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:183:645:699 147 chr1 1281 86 35M = 1122 -194 GTGGCCCTCCCCCATTCCCTGCCCCATCTCTTGTA &)))2-&420<<<'--<6:6-<7<<<+:7<65<<< MF:i:18 Aq:i:21 NM:i:4 UQ:i:37 H0:i:0 H1:i:0
--EAS1_105:2:179:532:82 147 chr1 1285 99 35M = 1105 -215 CCATCACCCGGTCCCTGCCCCATCTCTTGTAATCT <:96<6<<<<89<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:3:176:431:647 83 chr1 1285 99 35M = 1112 -208 CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT <(9(<<<7;<<7<<<<<<<7<<<<<<7<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:258:266:101 83 chr1 1285 99 35M = 1094 -226 CCATCACCCAGTCCCTGCCCCATCTCTTGTAATCT %==/7&8=======:===6================ MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:179:735:569 163 chr1 1286 99 35M = 1461 210 CATCACCCGGTCCCTGCCCCATCTCTTGTAATCTC <<<<<<<<<<<<<<<<<<<<3<<<<<<<<4/<;<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:3:200:712:439 163 chr1 1286 99 35M = 1435 184 CGTCACCCGGTCCCTGCCCCATCTCTTGTAATCTC <7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:49 H0:i:0 H1:i:0
--EAS1_103:5:319:165:698 99 chr1 1287 99 35M = 1485 233 ATCACCCAGTCCCTGCCCCATATCTTGTAATCTCT <<<<<<<<<<<<<<<<<<<3<9<<<<<<<;<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:24 H0:i:0 H1:i:1
--B7_597:3:53:616:842 83 chr1 1288 99 35M = 1109 -214 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:286:753:854 83 chr1 1288 99 35M = 1110 -213 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC ;<2<<<,57:<<9<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:1256:204 99 chr1 1288 99 35M = 1467 214 TCACCCAGTCCCTGCCCCATCTCTTGTAATCTCTC <<<<<;;;;;;<;;;;;;;<;<;;;;<:-;79697 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:289:132:526 99 chr1 1289 99 36M = 1472 219 CACCCGGTCCCTGCCCCATCTCTTGTAATCTCTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<8<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS218_1:4:71:832:743 83 chr1 1290 99 35M = 1102 -223 ACCCAGTCCCTGCCCCATCTCTTGTAATCTCTCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:102:511:946 99 chr1 1291 26 35M = 1461 205 CCCAGTCCCTGCCCCATCTCGGGTAATCTCTCTCC <<9<<;<<<<;<<<<;<<7;%<5<<0<<<)<.<.+ MF:i:18 Aq:i:26 NM:i:2 UQ:i:31 H0:i:0 H1:i:0
--EAS114_39:5:42:1223:1087 99 chr1 1293 99 35M = 1479 221 CAGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTT <<<<<<<<<<<<<5<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:75:732:442 147 chr1 1293 99 40M = 1121 -212 CGGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC 7,*&28<61:88<.7<:<<:6<1<85:<:1<5<&::<<&< MF:i:18 Aq:i:60 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS54_73:3:23:502:103 163 chr1 1294 99 35M = 1486 227 AGTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTT <2<<<<<<<<<<.<<<<<<<:1&:<<<7<<<<<<: MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:74:596:137 147 chr1 1294 91 35M = 1119 -210 GGTCCCTGCCCCATCGCTTGTAATCTCTCGCCTTT +40778449779049'+*87489498949%89948 MF:i:18 Aq:i:22 NM:i:3 UQ:i:32 H0:i:0 H1:i:0
--EAS51_66:8:36:688:722 99 chr1 1295 99 35M = 1469 209 GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:60:182:718 163 chr1 1295 99 35M = 1485 225 GTCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTT <<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:4:54:989:654 147 chr1 1296 99 35M = 1108 -223 TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT ,<1<2<<<;9)9<<;<<;<<<4<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:9:203:653 163 chr1 1296 99 35M = 1488 227 TCCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTT <<<<<<<<<<<<<<<<<<<<<<::<9<<<<<;;;< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:322:631:245 163 chr1 1297 99 36M = 1474 213 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC <<<<<<<<<<<<<<<<<0<<<<<<<<<<<<<<<<5; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:59:1548:1096 83 chr1 1297 99 35M = 1099 -233 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG 88888;;88;;;;8;;9;;;<<<<<<<<<<<<<<; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:52:1779:1664 99 chr1 1297 99 35M = 1462 200 CCCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTG <<<<<<<<<<<<<<<<<<71<<<<<<<<<<<<<<% MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:218:173:667 99 chr1 1298 99 35M = 1448 185 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC <<<<<<<<<<<<<<<6<<<<<<<<<<<<<<<<<.< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:175:437:950 83 chr1 1298 99 35M = 1126 -207 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC ;;5:;;9<<:<;<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:201:195:757 83 chr1 1298 99 35M = 1103 -230 CCTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGC :<':<:<<46<:<;:<;<;<<9<<<<<<<<;<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:8:377:655 99 chr1 1299 99 35M = 1473 209 CTGCCCCATCTCTTGTAATCTCTCTCCTTTTTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:50:950:562 99 chr1 1301 99 35M = 1473 207 GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGC <<<<<<<<<<<<<<<&<<8<<<<<<<5<:<+<:+; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:153:543:671 99 chr1 1301 99 34M = 1465 199 GCCCCATCTCTTGTAATCTCTCTCCTTTTTGCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<<7 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:33:1193:664 163 chr1 1301 99 40M = 1474 213 GCCCCATCTCTTGTAATCTCTCTCCTTTTTTCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%:<'<9:::9 MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_93:1:253:59:242 99 chr1 1302 99 35M = 1478 211 CCCCATCTCTTGTAATCTCTCTCCTTTTTGCTGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<</<<9;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:52:1455:1212 147 chr1 1304 99 40M = 1153 -191 CCATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGT 6::4::;4%;9:<79)<:<;<<:4::7<<9<&+71<9;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:316:176:543 99 chr1 1305 99 35M = 1469 199 CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC ====<=9===<<<=====9====<<=3==,96==9 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:50:1339:1154 163 chr1 1305 99 35M = 1481 211 CATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCC ==========<<==============;==7<;<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:169:292:652 99 chr1 1306 99 35M = 1510 239 ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<6<<-<<<<8< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:11:706:1030 99 chr1 1306 92 35M = 1469 198 ATCTCTTGTAATCTCTCTCATCTTTGCTGCATCCC <<<2<<2<<<<<<<<<<<<0<&<<<+<:2<4<<): MF:i:18 Aq:i:26 NM:i:2 UQ:i:20 H0:i:0 H1:i:0
--EAS221_3:6:70:843:706 99 chr1 1306 99 35M = 1449 178 ATCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCC <<<<<<<<<<<<<<<<<<<<<<<<<5<<5<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:7:174:597:66 83 chr1 1307 99 35M = 1148 -194 TCTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCT 9<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:7:1547:1933 163 chr1 1308 99 35M = 1497 224 CTCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTG <<<<<<<<<<<<<<<<<<<<<<<:<<8<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:117:411 163 chr1 1309 99 36M = 1482 209 TCTTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTC <<<<<<<<<<<<<<<<<<<<<<7<<:<<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:53:156:845 99 chr1 1311 99 35M = 1487 211 TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT <<<<<<8<<<.<<<<.6<<--<-<<<<<<<6<<<< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:90:1403:1635 99 chr1 1311 99 35M = 1480 204 TTGTAATCTCTCTCCTTTTTGCTGCATCCCTGTCT <<;<;<<<<;<;<;;<<<<<9;<.;;<:;99.979 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:67:302:762 147 chr1 1313 99 36M = 1138 -211 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC :8;88<;<<<;<<8<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:270:448:491 99 chr1 1313 99 35M = 1501 223 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC <<<<<<<<<<<<<<<<<<&<<.<<<<<<<:;;;<; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:82:932:400 99 chr1 1313 97 34M = 1486 208 GTAATCTCTCTCCTCTTCGCTGCATCCCTGTCTT <<<<<<8<1<<<<8+<<&<<<8<<<<<<<+(,/8 MF:i:18 Aq:i:25 NM:i:2 UQ:i:15 H0:i:0 H1:i:0
--EAS54_81:2:128:394:455 83 chr1 1313 99 35M = 1156 -192 GTAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTC ;=;9.=5=;=9====;;================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:57:735:151 147 chr1 1314 94 35M = 1121 -228 TAAACTCTCACCTTATTGCTGCATCCCTGTCTTCC 07;+79:;<)<<9<+8<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:3 UQ:i:28 H0:i:0 H1:i:0
--EAS114_28:6:51:506:878 163 chr1 1314 99 36M = 1501 223 TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCT <<<<<<<<<<<<<<<<<4<<<<<<<<<<0<<<<<:; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:15:1497:1530 147 chr1 1314 99 35M = 1136 -213 TAATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCC 77778:;;;:;;;;:9;:;;;;;;;;;9;:;;;;; MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:9:1595:1826 99 chr1 1316 99 35M = 1494 213 ATCTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:73:273:488 163 chr1 1318 99 35M = 1512 229 CTCTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTG <<<<<2<88<88<<<8<<1<<<<<<68<<<;<;<* MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:199:760:42 163 chr1 1318 24 35M = 1489 206 CTCTCTAATTTTTGCTGCTTCCATGTCTTACTCTG +2&2&2&22222220222&220-222-22-22-22 MF:i:130 Aq:i:24 NM:i:5 UQ:i:51 H0:i:0 H1:i:0
--EAS1_95:7:61:702:720 163 chr1 1320 99 35M = 1500 215 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC ==============;=======&=========3:= MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:41:576:1016 163 chr1 1320 99 35M = 1503 218 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<<<<<;<<<;<<<<<<<<<<<4<::< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:115:683:296 99 chr1 1320 99 35M = 1514 229 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<<8<<<<<<<<<<6<<<<3<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:63:1265:820 99 chr1 1320 99 35M = 1480 195 CTCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTC <<<<<<<<<<27<<<<<<<<<<<<<<<<<<<<03< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:92:288:1354 163 chr1 1321 99 40M = 1480 199 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT <<<<<<:<<<<<<<<<<<8<<:<<<<;;<8<<<8<:8+:: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:316:949:122 147 chr1 1321 99 35M = 1156 -200 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT 59899<<<<;;<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:37:1626:862 163 chr1 1321 99 35M = 1489 203 TCTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:147:479:41 83 chr1 1322 99 35M = 1139 -218 CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTT ;:;:;<::<:<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:936:1509 163 chr1 1322 99 40M = 1502 220 CTCCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTTATTT <<<<<<<<<7<<7<<<<<<<;<<<<<<<<<:<:<;%8::: MF:i:18 Aq:i:75 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_62:6:50:542:881 83 chr1 1324 99 35M = 1132 -227 CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA +2<<<;<3;29<6<5;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:71:85:629 163 chr1 1324 99 35M = 1484 195 CCTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGA <<<<<<<<<<9<<<<<<<<<<<<<<<<<5<9<<+6 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:191:948:257 163 chr1 1325 99 35M = 1493 203 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT :<<<<<<<<9<:<<<<<<:<<<<;<<<<8<<<<7< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:249:986:224 99 chr1 1325 99 35M = 1499 209 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT =========5======7878===98==7=9==.-= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:6:1067:91 163 chr1 1325 99 35M = 1483 193 CTTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<:8<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:216:650:516 147 chr1 1326 99 36M = 1164 -198 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ;9;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:18:376:416 163 chr1 1326 99 35M = 1510 219 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGTTT <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;:(<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS114_28:5:209:778:588 163 chr1 1326 99 36M = 1514 224 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT <<<<<<<<;<<<<<<<<<;<<<;<8<8<<<<;7;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:36:1402:1709 83 chr1 1326 99 35M = 1168 -193 TTTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATT ;;;:<<<;<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:40:352:151 147 chr1 1327 99 35M = 1137 -225 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ;=;;5=:-=9=====;;================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:139:331:63 99 chr1 1327 99 35M = 1486 194 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT ====================<<============= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:11:1274:1230 163 chr1 1327 99 35M = 1507 215 TTTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:36:678:316 99 chr1 1328 99 35M = 1500 207 TTTGCTGCATCCCTGTCTTCCTCTGTCTTGATTTA <<<<<<<<<<<<<<;<<<<<<<<<;<<<<,2<<<) MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:102:825:507 163 chr1 1330 99 35M = 1501 206 TGCTGCATCCCTGTCTTCCTCTGTCTTGATTTACT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:171:343:758 99 chr1 1331 99 36M = 1494 199 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<<<<<<<<<<<;<<<<59<<<9;<<3 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:85:1224:625 99 chr1 1331 99 35M = 1532 236 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTCCTT <<<<<<<<<;<<;<<7<<:<<7.<<<:&7<<.<;< MF:i:18 Aq:i:70 NM:i:1 UQ:i:13 H0:i:1 H1:i:0
--EAS188_7:5:308:354:124 99 chr1 1331 99 35M = 1507 211 GCTGCATCCCTGTCTTCCTCTGTCTTGATTTACTT <<<<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:7:22:22:934 163 chr1 1332 99 35M = 1500 203 CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<6<<<;<<<;84;<<48;<;6;<;) MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:71:707:568 163 chr1 1332 99 35M = 1518 221 CTGCATCCCTGTCTTCCTCTGTCTTGATTTACTTG <<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:123:610:472 99 chr1 1333 99 35M = 1504 206 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT <<<<<<<<<<:<<<<<<<<<<<<<+:<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:20:635:509 83 chr1 1333 99 35M = 1167 -201 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT 50<59<<9<9<<<<<<<<<<<<<<<<<<<6<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:92:213:217 99 chr1 1333 99 35M = 1515 217 TGCATCCCTGTCTTCCTCTGTCTTGATTTACTTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:47:471:858 163 chr1 1335 99 35M = 1487 187 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<;<<<<<<<<9<<<4;;<<<<;<<<<<.<<4;<4 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:90:406:631 163 chr1 1335 99 35M = 1525 225 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<<<<<<<<<<<<<<<<:<<<<:;<<<<;<<8;<8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:81:1723:1820 99 chr1 1335 99 35M = 1524 224 CATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:182:23:585 147 chr1 1336 99 35M = 1163 -208 ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT 9:<<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:150:508:757 163 chr1 1336 99 35M = 1483 182 ATCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGT <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<,< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:261:504:780 163 chr1 1337 99 35M = 1501 199 TCCCTGTCTTCCTCTGTCTTGATTTACTTGTTGTT <<<<<<<<<<<<<<<<<<<</2<<<9<<<5<<,<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:324:515:230 163 chr1 1339 99 35M = 1512 207 CCTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGG <<;<<<<<<<<<<<<<<<:<<<<8<<<4<<4<<34 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:72:916:763 83 chr1 1340 99 35M = 1142 -233 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT <;;:<<<<<<<;<<;;;<<<<<<<<<;;<;<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:194:168:684 99 chr1 1340 99 36M = 1512 208 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<7<<.<<6-<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:113:43:634 163 chr1 1340 99 35M = 1500 195 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTTTT <<<<<<<<<<<<.<<<<<<<<<<<<</<<2;;%%; MF:i:18 Aq:i:45 NM:i:2 UQ:i:8 H0:i:1 H1:i:0
--EAS54_71:5:16:434:204 163 chr1 1340 99 35M = 1522 216 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT =================;)===8===:==7;<+%; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:246:205:734 73 chr1 1340 65 35M = 1340 0 CTGTCTTCCTCTGTCTTGATTTACTTGTTGTTGGT <<<4<<6666<<6<:<<<3<<<:'<<:<<<<;6<+ MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:246:205:734 133 chr1 1340 0 * = 1340 0 CTCCAGGGAAGTTATCTCTCATCTAGANNNNNTTG <<<<<<:/<<<,6'</7;<-+9<<;<7!!!!!8<, MF:i:192
--EAS54_65:3:102:884:63 163 chr1 1341 99 35M = 1481 175 TGTCTTCCTCTGTCTTGATTTCCTTGTTGTTGGTT <<<<<<<<<<<<<<<<<3<<<%<<<9<<9<<7+;< MF:i:18 Aq:i:43 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS51_64:3:67:782:132 99 chr1 1343 99 35M = 1498 190 TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<:<<;4<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:70:348:972 163 chr1 1343 99 35M = 1528 220 TCTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTT <.<<3+.7<<7<<:78:<<7<:<7:<3<<7.:::< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:9:206:901 99 chr1 1344 99 35M = 1517 208 CTTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTC <<<<<<<<<<<<<<<<<<<<<<5<<5<<%%:<<<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:21:443:404 99 chr1 1345 99 35M = 1529 219 TTCCTCTGTCTTGATTTACTTGTTGTTGGTTTTCT <<<<<<<<<<<<<<<<<<<<<7<<;<<;+<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:148:286:316 163 chr1 1347 99 35M = 1531 219 CCTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGT <<<<<<<<+<<7<<<<<<<6<<<6<142<<<6<2< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:77:48:860 99 chr1 1348 99 35M = 1521 208 CTCTGTCTTGATTTACTTGTTGTTTGTTTTCTGTT =========;===========9==*;5=;=;=,7= MF:i:18 Aq:i:45 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS51_64:6:124:128:489 147 chr1 1348 99 35M = 1142 -241 CTCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTT ::55<<<8<<<6<<;<<<<<<<<7<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:213:54:878 137 chr1 1348 99 35M * 0 0 CTCTGTCTTGATTTACTTGTTGTTGGTTTTTTGTT <<<<<<<<<;<<<<<<<<:<<:<<++<<<<%<%<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS218_1:4:73:42:1038 163 chr1 1349 99 35M = 1513 199 TCTGTCTTGATTTACTTGTTGTTGGTTTTCTGTTT <<<<<<<<<<<<<<<<<<<<<<<:<<<<<.<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:320:505:814 99 chr1 1350 99 35M = 1515 200 CTGTCTTGATTTACTTGTTGTTGGTTTTCTTTTTC <<<<<<<<<<<<<<<<;<<8<<76<<<<;<&<<<7 MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_593:2:68:692:347 83 chr1 1351 99 36M = 1176 -211 TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCTT 9<;;;;<<<:<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:252:428:683 137 chr1 1351 99 35M * 0 0 TGTCTTGATTTACTTGTTGTTGGTTTTCTGTTTCT <<<<<<;<<<<<<<<7<<7<<&+<<<<:<&<<<4< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:73:182:444 99 chr1 1354 99 34M = 1533 214 CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTT <<<<;;<<<<<<<<<<<<;<;<<<<<:<<<<<7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:63:267:545 163 chr1 1354 99 35M = 1524 205 CTTGATTTACTTGTTGTTGGTTTTCTGTTTCTTTG <<<<<<<<<<<<:<<<<<::<<<<<<.<<<;;;;5 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:177:562:806 99 chr1 1356 99 35M = 1515 194 TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTTTT <;<29<99<<;<<<9<20<9<<5;;<<<<<<<+.< MF:i:18 Aq:i:35 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS51_62:7:157:784:936 83 chr1 1356 99 35M = 1169 -222 TGATTTACTTGTTGTTGGTTTTCTGTTTCTTTGTT <:<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:345:87 163 chr1 1360 99 35M = 1513 188 TTACTTGTTGTTGGTTTTCTGTTTCTTTTTTTGAT <<<<<<<<<<<<<<<<<<<<;<<<-<<<6<<<+8< MF:i:18 Aq:i:71 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS114_45:1:33:1407:94 83 chr1 1360 99 35M = 1172 -223 TTACTTGTTGTTGGTTTTCTGTTTCTTTGTTTGAT 77477;4;;;;;44;;;;;;7;;;;;;;9;;;;;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:2:434:715 163 chr1 1363 99 35M = 1527 199 CTTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTT <<<<<<<<<<<<<<<<<;<<<<<<<0<<<68<<<+ MF:i:18 Aq:i:71 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:4:137:319:642 137 chr1 1363 99 35M * 0 0 CTTGTTGTTGGTTTTCTGTTTCTTTTTTTGATTTT <<<<<<<<<27<<<<<<<<<<<<<<&;<<&3;;<% MF:i:18 Aq:i:41 NM:i:2 UQ:i:9 H0:i:0 H1:i:1
--B7_610:3:148:340:479 147 chr1 1364 99 35M = 1190 -209 TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:329:458:365 147 chr1 1364 99 35M = 1186 -213 TTGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGG ====:==9========>==7>==9>=7=>=>>=>> MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:91:267:655 147 chr1 1365 99 35M = 1204 -196 TGTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGT ;,:;5:<6:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:91:856:504 99 chr1 1366 99 35M = 1520 189 GTTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTT <<<<<<<<<<<<<<7<<<<<<<7<<<&;<<<&&<& MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_108:2:170:326:433 99 chr1 1367 99 35M = 1535 203 TTGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGG =====<=9===:=<:==2=======2:===9==/5 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:132:717:233 99 chr1 1368 99 35M = 1529 196 TGTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGA <<<<<<<<<<<<;<<<<<<<<<<<7<<<<&-<4<1 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:14:420:712 99 chr1 1368 99 40M = 1525 197 TGTTGGTTTTCTGTTTCTTTGTTTGATTTTTTTGAAGACA <<<<<<<<<<<<;<<<<<<<;<<<-;<<<&,<&*8111:6 MF:i:18 Aq:i:66 NM:i:3 UQ:i:21 H0:i:1 H1:i:0
--EAS114_39:4:43:1047:1626 163 chr1 1369 99 35M = 1523 189 GTTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAA <<<<<<<<<<<<<<<<<<<:<<<:<<<<:+;-4:( MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:20:413:1334 147 chr1 1370 99 35M = 1215 -190 TTGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAG 88878777;:;:1:;9;;;6;;;6;9;;;;;296; MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:154:669:853 83 chr1 1371 99 35M = 1193 -213 TGGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGA <::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:117:857:942 99 chr1 1372 99 35M = 1527 190 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC <<<<<<<<<<<<<<<<<<<<<<<<<:6<;;7;9<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:145:144:796 147 chr1 1372 99 35M = 1181 -226 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC ;<<<;<<<<<<<<<;<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:88:162:587 147 chr1 1372 99 35M = 1189 -218 GGTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGAC 386;;388-<8;<;68<<;;<;<6<<<8<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:73:108:1621 99 chr1 1373 99 35M = 1532 194 GTTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACA <<<<<<<<71<<<<<<<<<+<<<<70:0<9<<61< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:127:153:861 147 chr1 1374 99 35M = 1202 -207 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT :;:6;9<<1;<<95<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:152:765:744 163 chr1 1374 99 35M = 1534 195 TTTTCTGTTTCTTTGTTTGATTTGGTGGAAGACAT <<<<<<<<<<<<<<<<<<:<<<<<<<<&<7293<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:313:827:992 147 chr1 1379 99 35M = 1197 -217 TGTTTCTTTGTTTGATTTGGTGGAAGACATAATCC '187:1'<75<.*<<:5<..<<*<<917<<7<<17 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:7:268:263 121 chr1 1381 22 35M = 1381 0 TTGCGTTATTTGAGTTGGTGGAAGACATAATCCCA ',)*&2<$7+<<<'<-<7<<<<<<<7<<</4/;<< MF:i:64 Aq:i:0 NM:i:4 UQ:i:22 H0:i:0 H1:i:0
--EAS51_64:3:7:268:263 181 chr1 1381 0 * = 1381 0 TCGTACAGAAGTTTAATGGAGCCTTGGGACCTTAC !!66'&+/&'8+2''1+'611'&6&+/&+.&+1'& MF:i:192
--EAS139_19:1:47:352:1492 147 chr1 1385 99 40M = 1205 -220 TTTGTTTTGTATGGTGGAAGACATAATCCCACGCTTCCTA +7+/7+/%%1'6+3++1;:</<<5<)27<<9<)9<<9<7< MF:i:18 Aq:i:53 NM:i:3 UQ:i:14 H0:i:1 H1:i:0
--EAS139_11:5:61:38:1182 83 chr1 1388 99 35M = 1205 -218 GTTTGATTTGGTGGAAGACATAATCCCACGCTTCC 9:;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:64:37:257 83 chr1 1389 99 35M = 1215 -209 TTTGATTTGGTGGAAGACATAATCCCACGCTTCCT ;47<<47+9<4<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:266:556:252 147 chr1 1392 99 35M = 1224 -203 GATTTGGTGGAAGACATAATCCCACGCTTCCTATG .8558<72<(<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:321:271:138 147 chr1 1394 99 35M = 1193 -236 TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA 261:5969==9=:=<==<================= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:19:752:816 147 chr1 1394 99 35M = 1212 -217 TTTGGTGGAAGACATAATCCCACGCTTCCTATGGA +<<+<--/<<<<4<2<<<<45<<<:<<<<<<+<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:306:388:342 83 chr1 1398 99 35M = 1211 -222 GGGGAAGACATAATCCCACGCTTCCTATGGAAAGG 9/<9;<<<;<;<<7<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS114_39:1:71:636:533 147 chr1 1398 99 35M = 1232 -201 GTGGAAGACATAATCCCACGCTTCCTATGGAAAGG ,51(<<8<:<<<<<<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:131:779:345 83 chr1 1399 99 35M = 1237 -197 TGGAAGACATAATCCCACGCTTCCTATGGAAAGGT <<7<<<<<<<<:<<<<<<<<<<<<<;<<<<<<;<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:68:64:783 83 chr1 1402 99 35M = 1214 -223 AAGACATAATCCCACGCTTCCTATGGAAAGGTTGT <<9<8<6<<<<<;<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:16:823:343 147 chr1 1403 99 35M = 1223 -215 AGACATAACCCCACGCTTCCTATGGAAAGGTTGTT <<<:<<<;+;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS219_FC30151:5:72:1426:1883 147 chr1 1405 99 35M = 1226 -214 ACATAATCCCACGCTTCCTATGGAAAGGTTGTTGG ;9<;<;0<;<;<<<<;<<<;:<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:166:979:531 83 chr1 1410 99 35M = 1245 -200 ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT 81<<<3<*<<:<<<<<<<8<<<<<<<<<<<<:<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:63:930:152 83 chr1 1410 99 35M = 1243 -202 ATCCCACGCTTCCTATGGAAAGGTTGTTGGGAGAT ;:4:8;:::;=:8;=;========;=:======== MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:137:895:681 147 chr1 1418 99 35M = 1232 -221 CTTCCTATGGAAAGGTTGTTGGGAGATTTTTAATG 4;5+6;<<<<<<<<<9;<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:87:89:696 147 chr1 1419 99 36M = 1245 -210 TTCCTATGGAAAGGTTGTTGGGAGATTTTTAATGAT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:104:744:280 147 chr1 1421 64 36M = 1262 -195 CATATGGAAAGGTTGTTGGGATTTTTTTAATGATTC '&+74*0<'/.47:8<<<<;<7''6/1<<<.<<68< MF:i:18 Aq:i:21 NM:i:3 UQ:i:33 H0:i:0 H1:i:0
--EAS56_57:2:259:42:969 83 chr1 1426 99 35M = 1265 -196 GGAAAGGTTGTTGGGAGATTTTTAATGATTCCTCA <<<6<<<<<<-<<<<<<;<<;<6<<<<<<<;<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:18:1498:1475 83 chr1 1427 99 35M = 1260 -202 GAAAGGTTGTTGGGAGATTTTTAATGATTCCTCAA :<4<*7<<<<<<<:<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:328:614:638 147 chr1 1428 99 35M = 1243 -220 AAAGGTTGTTGGGAGATTTTTAATGATTCCTCAAT <<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:159:71:155 147 chr1 1428 99 35M = 1237 -226 AAAGGTTGTTGGGAGATTTTTAATGATTCCTCGAT 5;;9<<:<;:<<<<7<<7;<3<<<:<<<;<<<<<; MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_39:1:73:302:1574 147 chr1 1429 99 35M = 1233 -231 AAGGTTGTTGGGAGATTTTTAATGATTCCTCAATG 7<88;;<;;<;;<<<<<<<<<<<<<<<<<<<<<1< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:200:712:439 83 chr1 1435 99 35M = 1286 -184 GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA <;<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<<<7 MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:259:869:641 147 chr1 1435 99 35M = 1272 -198 GTTGGGAGATTTTTAATGATTCCTCAATGTTAAAA 99=:=9=99<=========<=<<============ MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:74:570:695 83 chr1 1436 99 35M = 1240 -231 TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT .;:8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:58:369:244 83 chr1 1436 99 35M = 1266 -205 TTGGGAGATTTTTAATGATTCCTCAATGTTAAAAT <<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:216:292:528 147 chr1 1438 99 35M = 1269 -204 GGGAGATTTTTAATGATTCCTCAATGTTAAAATGT ;:;;8<<<<<<<<<<<<<:<<;<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:185:868:496 83 chr1 1442 99 35M = 1278 -199 GATTTTTAATGATTCCTCAATGTTAAAATGTCTAT :;;<;;<<<<<<<<;4<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:277:194:143 147 chr1 1444 99 35M = 1262 -217 TTTTTAATGATTCCTCAATGTTAAAATGTCTATTT ;<<;<<<;8;<0<7<<<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:267:71:603 147 chr1 1446 99 36M = 1281 -201 TTTAATGATTCCTCAATGTTAAAATGTCTATTTTTG 9;;<;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:218:173:667 147 chr1 1448 99 35M = 1298 -185 TAATGATTCCTCAATGTTAAAATGTCTATTTTTGT <<<<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:70:843:706 147 chr1 1449 99 35M = 1306 -178 AATGATTCCTCAATGTTAAAATGTCTATTTTTGTC <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:47:720:789 147 chr1 1455 90 35M = 1278 -212 TCCTCAATGTTAAAATGTCTATTTTTGTCTTGACA /)040<.878<<<<;8<;<9<9;<<<<<<<<<<93 MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:102:511:946 147 chr1 1461 26 35M = 1291 -205 ATGTAAAAGTGACTGTTATTGTCTTGACACCCAAC <%-4:6<:/&46;/*;<*84<0<'<&*<2<<<<<< MF:i:130 Aq:i:26 NM:i:5 UQ:i:78 H0:i:0 H1:i:0
--EAS112_34:8:103:812:255 147 chr1 1461 99 35M = 1272 -224 ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC 7:777:7<<::7<7<7<<:7<7<:<<<<<<<<<7< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:179:735:569 83 chr1 1461 99 35M = 1286 -210 ATGTTAAAATGTCTATTTTTGTCTTGACACCCAAC <5<3:<<<<5;8<<<55;<:</:<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:52:1779:1664 147 chr1 1462 99 35M = 1297 -200 TGTTAAAATGTCTATTTTTGTCTTGACACCCAACT 6;;:;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:153:543:671 147 chr1 1465 99 35M = 1301 -199 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT ;;;;;=;==================;========= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:38:1071:155 147 chr1 1465 99 35M = 1274 -226 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT <<62<<<<<<3<<<<</<<<<<<<%<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1864:477 83 chr1 1465 99 35M = 1270 -230 TAAAATGTCTATTTTTGTCTTGACACCCAACTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:1256:204 147 chr1 1467 99 35M = 1288 -214 AAATGTCTATTTTTGTCTTGACACCCAACTAATAT 66777:;;37;;:;;0;:;;;;):;;:7;;;;;;; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:316:176:543 147 chr1 1469 99 35M = 1305 -199 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT <<)/3<<<&<*<<0<<8<<82</5<<<<<88<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:36:688:722 147 chr1 1469 99 35M = 1295 -209 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT <;;<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:11:706:1030 147 chr1 1469 92 35M = 1306 -198 ATGTCTATTTTTGTCTTGACACCCAACTAATATTT +<5069+9<<<<+<;<<<<;<<77<7<<;<<;<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:289:132:526 147 chr1 1472 99 36M = 1289 -219 TCTATTTTTGTCTTGACACCCAACTAATATTTGTCT ;<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:50:950:562 147 chr1 1473 99 35M = 1301 -207 CTATTTTTGTCTTGACACCCTACTAATATTTGTCT <<3<<<8<;<<<<<<+<<8<&<<<<7<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS188_4:5:8:377:655 147 chr1 1473 99 35M = 1299 -209 CTATTTTTGTCTTGACACCCAACTAATATTTGTCT ;<8;;:<;<<:<;<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:322:631:245 83 chr1 1474 99 36M = 1297 -213 TATTTTTGTCTTGACACCCAACTAATATTTGTCTGA <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:33:1193:664 83 chr1 1474 99 40M = 1301 -213 TATTTTTGTCTTGACACCCAACTAATATTTGTCTGAGCAA ;;;;;;<;;-9<<<:</+9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:253:59:242 147 chr1 1478 99 35M = 1302 -211 TTTGTCTTGACACCCAACTAATATTTGTCTGAGCA <<<:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:42:1223:1087 147 chr1 1479 99 35M = 1293 -221 TTGTCTTGACACCCAACTAATATTTGTCTGAGCAA ;:<<<:<7<<<;;<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:90:1403:1635 147 chr1 1480 99 35M = 1311 -204 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA 86878;;;8;788;;;;;;;;;;;;;8;5;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:92:288:1354 83 chr1 1480 99 40M = 1321 -199 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAAACAGT ::::;;;<<<<9;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:63:1265:820 147 chr1 1480 99 35M = 1320 -195 TGTCTTGACACCCAACTAATATTTGTCTGAGCAAA <<<<<<3<<1<<<<<<<7<<<<<<<<<<<<<<<+< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:102:884:63 83 chr1 1481 99 35M = 1341 -175 GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA <;7;;<<8<;8;<<<8<<<<<<8<<<8;<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:50:1339:1154 83 chr1 1481 99 35M = 1305 -211 GTCTTGACACCCAACTAATATTTGTCTGAGCAAAA 7;7;8;<5<:86<<;<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:30:117:411 83 chr1 1482 99 36M = 1309 -209 TCTTGACACCCAACTAATATTTGTCTGAGCAAAACA ;88<<<<<:<7<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:150:508:757 83 chr1 1483 99 35M = 1336 -182 CTTGACACCCAACTAATATTTGTCTGAGCAAAACA 6;;;<8<6;8<<8<<<<<;<<<<;<<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:6:1067:91 83 chr1 1483 99 35M = 1325 -193 CTTGACACCCAACTAATATTTGTCTGAGCAAAACA 3<;<<:;9;<<7;;<;<<<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:71:85:629 83 chr1 1484 99 35M = 1324 -195 TTGACACCCAACTAATATTTGTCTGAGCAAAACAG ,,1<1<7&%<9+:<<9<<9<<<<<<<<5<<<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:319:165:698 147 chr1 1485 99 35M = 1287 -233 TGACACCCAACTAATATTTGTCTGAGCAAAACAGT ;5;2;<:;<<:<<<<<<<<<;:;<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:60:182:718 83 chr1 1485 99 35M = 1295 -225 TGACACCCAACTAATATTTGTCTGAGCAAAACAGT <<<:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:82:932:400 147 chr1 1486 97 35M = 1313 -208 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC <<;<<72<<7<<<<<<<<<<;<<<+7<<<<<<<<< MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:23:502:103 83 chr1 1486 99 35M = 1294 -227 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC 4:386:6<:::<:<:4:+<::4<<<6<<<<<<<66 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:139:331:63 147 chr1 1486 99 35M = 1327 -194 GACACCCAACTAATATTTGTCTGAGCAAAACAGTC 7===================:=:============ MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:53:156:845 147 chr1 1487 99 35M = 1311 -211 ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT 171(*00,0;;&;7=77=;5;;(;1:=5======= MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:47:471:858 83 chr1 1487 99 35M = 1335 -187 ACACCCAACTAATATTTGTCTGAGCAAAACAGTCT /;9<<63<<<<3<;<<<<<<<<<<<<<<<<<<<9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:9:203:653 83 chr1 1488 99 35M = 1296 -227 CACCCAACTAATATTTGTCTGAGCAAAACAGTCTA 37))&<8<<<<<7<4<;<777<<:<<<<<<<<;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:199:760:42 83 chr1 1489 24 35M = 1318 -206 ACCCAATTAATATTTTTCTTAGCAAAACAGTCTAG 58*5.<+<<<<,4<<**<90**9<<<<<<4<<<<< MF:i:18 Aq:i:24 NM:i:3 UQ:i:34 H0:i:0 H1:i:0
--EAS218_1:4:37:1626:862 83 chr1 1489 99 35M = 1321 -203 ACCCAACTAATATTTGTCTGAGCAAAACAGTCTAG :663<<3<<<<<<<<<<:<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:191:948:257 83 chr1 1493 99 35M = 1325 -203 AACTAATATTTGTCTGAGCAAAACAGTCTAGATGA :;;;;<<<<<<5<5<<<<<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:171:343:758 147 chr1 1494 99 36M = 1331 -199 ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAGA :+;;<<<<<;<;:<<<;;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:9:1595:1826 147 chr1 1494 99 35M = 1316 -213 ACTAATATTTGTCTGAGCAAAACAGTCTAGATGAG ;76;;6:9<9<963;<<7<<<<<<<;<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:7:1547:1933 83 chr1 1497 99 35M = 1308 -224 AATATTTGACTGAGCAAAACAGTCTAGATGAGAGA <<<<<<<<-<<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS51_64:3:67:782:132 147 chr1 1498 99 35M = 1343 -190 ATATTTGTCTGAGCAAAACAGTCTAGATGAGAGAG ;;<;;;<<;;<<<;<<<;<<<;<<<<<<<<<<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:249:986:224 147 chr1 1499 99 35M = 1325 -209 TATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGA <<<3<;<;;<<;8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:61:702:720 83 chr1 1500 99 35M = 1320 -215 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <<<4<4+0;<<:<<<<<<<<-<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:113:43:634 83 chr1 1500 99 35M = 1340 -195 ATTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAA ;9;1;<5:<<<%<<<<;<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS56_53:7:22:22:934 83 chr1 1500 99 35M = 1332 -203 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <+72::72<<60<<<<<<<96<<<<0<<<<1<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:36:678:316 147 chr1 1500 99 35M = 1328 -207 ATTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAA <<72.2,;;<)6<<<<:<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:102:825:507 83 chr1 1501 99 35M = 1330 -206 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC <05<<<<<<<7<<<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:261:504:780 83 chr1 1501 99 35M = 1337 -199 TTTGTCTGAGAAAAACAGTCTAGATGAGAGAGAAC 80;8(;0==8+====;==49=============== MF:i:18 Aq:i:43 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_78:7:270:448:491 147 chr1 1501 99 35M = 1313 -223 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAAC 7;;;;+2;<<+<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:51:506:878 83 chr1 1501 99 36M = 1314 -223 TTTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACT <970;49;<;+<<<:<<<;;<<<<<<<<<<<<<<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:936:1509 83 chr1 1502 99 40M = 1322 -220 TTGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT 99;66:<<;-<<<<:<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:41:576:1016 83 chr1 1503 99 35M = 1320 -218 TGTCTGAGCAAAACAGTCTAGATGAGAGAGAACTT :<;<<<<<6<<<<;<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:123:610:472 147 chr1 1504 99 35M = 1333 -206 GTCTGAGCAAAACAGTCTAGATGAGAGAGAACTTC :<::+<<9<<9<<<<=<<<<<=<<<<<<<<?<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:308:354:124 147 chr1 1507 99 35M = 1331 -211 TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT %+<)2<<<<<<<<8<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:11:1274:1230 83 chr1 1507 99 35M = 1327 -215 TGAGCAAAACAGTCTAGATGAGAGAGAACTTCCCT .<<<<<<<<<<<<<<<<5<<<<<<<<<<5<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:169:292:652 147 chr1 1510 99 35M = 1306 -239 GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA 79919-<-<<<<<<<<<<<<<<<<<<<6<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:18:376:416 83 chr1 1510 99 35M = 1326 -219 GCAAAACAGTCTAGATGAGAGAGAACTTCCCTGGA 70<<<<<<<7<7<<<2<<<<<<<<<<8<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:194:168:684 147 chr1 1512 99 36M = 1340 -208 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT ;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:73:273:488 83 chr1 1512 99 35M = 1318 -229 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAGG </<<:<<9;;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:324:515:230 83 chr1 1512 99 34M = 1339 -207 AAAACAGTCTAGATGAGAGAGAACTTCCCTGGAG 7<<1<<<7<+<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:1:209:345:87 83 chr1 1513 99 35M = 1360 -188 AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT <<;<<<<5<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:73:42:1038 83 chr1 1513 99 35M = 1349 -199 AAACAGTCTAGATGAGAGAGAACTTCCCTGGAGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:209:778:588 83 chr1 1514 99 36M = 1326 -224 AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT ;8;98;;;<3<<<<<<<<<;<<;<<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:1:115:683:296 147 chr1 1514 99 35M = 1320 -229 AACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTC <<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:92:213:217 147 chr1 1515 99 35M = 1333 -217 ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT <<<<<:<<<<<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:177:562:806 147 chr1 1515 99 35M = 1356 -194 ACAGTGTAGATGAGAGAGACCTTCCCTGGAGGTCT )2<9;'/:<5<<<:<<:<:&5:&<8,<<+:<&<<< MF:i:18 Aq:i:35 NM:i:2 UQ:i:11 H0:i:0 H1:i:1
--EAS1_103:3:320:505:814 147 chr1 1515 99 35M = 1350 -200 ACAGTCTAGATGAGAGAGAACTTCCCTGGAGGTCT <2<;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:9:206:901 147 chr1 1517 99 35M = 1344 -208 AGTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGA <<<<<<<<<<<<<.<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:71:707:568 83 chr1 1518 99 35M = 1332 -221 GTCTAGATGAGAGAGAACTTCCCTGGAGGTCTGAT ;9;<;<<<<<;<<<<<;<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:91:856:504 147 chr1 1520 99 35M = 1366 -189 CTAGATGAGAGAGAACTTCCCTGGAGGTCTGATGG :::<<:<<<<<<<<<<<<<<<<<<<<<:<:<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:77:48:860 147 chr1 1521 99 35M = 1348 -208 TAGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC ;8;8;<9<9<<<<<<<<<4<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:16:434:204 83 chr1 1522 99 34M = 1340 -216 AGATGAGAGAGAACTTCCCTGGAGGTCTGATGGC <:7:<<<<<<<<<<<9<<<+<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:43:1047:1626 83 chr1 1523 99 35M = 1369 -189 GATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGT <<4<<<<<<<<<<<:<<<;<<<<<:<7<<;<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:81:1723:1820 147 chr1 1524 99 35M = 1335 -224 ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT ;6;;;<<<<<<<<<<<2<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:63:267:545 83 chr1 1524 99 35M = 1354 -205 ATGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:90:406:631 83 chr1 1525 99 35M = 1335 -225 TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTT <<<:<:<<<-<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:14:420:712 147 chr1 1525 99 40M = 1368 -197 TGAGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCC 1::::<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:2:434:715 83 chr1 1527 99 35M = 1363 -199 AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT <<<<<<<<<:;<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:117:857:942 147 chr1 1527 99 35M = 1372 -190 AGAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCT <<;<<<<<<<9<<<8<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:70:348:972 83 chr1 1528 99 35M = 1343 -220 GAGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTC <99<-7<<7<<<87<<<)<<<<<<8<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:132:717:233 147 chr1 1529 99 35M = 1368 -196 AGAGAACTTCCCTGGAGGTCTGATGGAGTTTCTCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:4:21:443:404 147 chr1 1529 99 35M = 1345 -219 AGAGAACTTCCCTGGAGGTCTGATGGCGTTTCTCC =9=9=9==:========================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:148:286:316 83 chr1 1531 99 35M = 1347 -219 AGAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCT ;::::;9/:<9<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:85:1224:625 147 chr1 1532 99 35M = 1331 -236 GAACTCCCCTGGAGGTCTGATGGCGTTTCTCCCTC 17;;7&-;<;<;:<6<<:;<<<<<<<;<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS221_1:8:73:108:1621 147 chr1 1532 99 35M = 1373 -194 GAACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTC <<8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:73:182:444 147 chr1 1533 99 35M = 1354 -214 AACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCG :1<4;;::<<;<<<<;<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:152:765:744 83 chr1 1534 99 35M = 1374 -195 ACTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGT 6<;6<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:170:326:433 147 chr1 1535 99 35M = 1367 -203 CTTCCCTGGAGGTCTGATGGCGTTTCTCCCTCGTC :44<<<<<<<<<<:6<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:8:4:841:340 73 chr2 1 99 36M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTAA <<<<<<<<;<<<<<<<<;<<<<<;<;:<<<<<<<;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:4:142:943:582 73 chr2 1 99 35M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA <<<<<<;<<<<<<:<<;<<<<;<<<;<<<:;<<<5 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:43:859:229 153 chr2 1 66 35M * 0 0 TTCAAATGAACTTCTGTAATTGAAAAATTCATTTA +37<=<.;<<7.;77<5<<0<<<;<<<27<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:286:923:549 73 chr2 2 99 35M * 0 0 TCAAATGAACTTCTGTAATTGAAAAATTCATTTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:117:578:853 73 chr2 5 99 35M * 0 0 AATGAACTTCTGTAATTGAAAAATTCATTTAAGAA <;<9<<<<<;<<;<<<<<<<<<<<,<98;<;;&92 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:289:472:86 137 chr2 6 99 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:302:997:951 73 chr2 6 69 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<<<<<<<<;<<:<<52<<:;;<6<<;<:<2:9/ MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:13:1729:1844 73 chr2 6 99 35M * 0 0 ATGAACTTCTGTAATTGAAAAATTCATTTAAGAAA <<<;;<;7<<<<4<<<<762;6<<<<<<<;6;618 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:43:239:977 137 chr2 7 99 36M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;7;<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:233:191:520 73 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2<8<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:75:555:1591 137 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:43:656:1866 137 chr2 7 99 35M * 0 0 TGAACTTCTGTAATTGAAAAATTCATTTAAGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;:; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:100:563:301 137 chr2 8 99 35M * 0 0 GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;8;;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:126:526:276 137 chr2 8 84 35M * 0 0 GAACTTCTGTAATTGAAAAATTCATTTAAGAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:161:366:544 137 chr2 11 99 35M * 0 0 CTTCTGTAATTGAAAAATTCATTTAAGAAATTACA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:326:652:890 73 chr2 12 99 35M * 0 0 TTCTGTAATTGAAAAATTCATTTAAGAAATTACAA <<<<<<<<<<2<<<<<<<<<<<<<<+<8:<<9998 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:238:441:727 73 chr2 16 99 35M * 0 0 GTAATTGAAAAATTCATTTAAGAAATTACAAAATA <<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<;;<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:64:507:478 137 chr2 17 99 35M * 0 0 TAATTGAAAAATTCATTTAAGAAATTACAAAATAT <<<<<;<<<<<<<<<<<<<<<;;;<<<;<<8;<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:118:440:850 137 chr2 18 99 35M * 0 0 AATTGAAAAATTCATTTAAGAAATTACAAAATATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<949<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:270:995:918 137 chr2 24 84 35M * 0 0 AAAATTCATTTAAGAAATTACAAAATATAGTTGAA <<<<<<<<<<<<<:<<<<<<8<8<8<<<<:<;4;4 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:305:819:245 73 chr2 25 98 35M * 0 0 AAATTCATTTAAGAAATTACAAAATATAGTTGAAA 8<<<<8<;<<<<<;<8<<8<8<<<<8<<<899<<+ MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_26:7:13:172:720 73 chr2 26 99 35M * 0 0 AATTCATTTAAGAAATTACAAAATATAGTTGAAAG ============:3<==:====<=9=3===;==83 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_63:7:34:334:825 73 chr2 30 99 35M * 0 0 CATTTAAGAAATTACAAAATATAGTTGAAAGCTCT <<<<<<<<<<<<<<<<<<<<<<<<3;<<<<6<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:32:1379:738 137 chr2 33 99 35M * 0 0 TTAAGAAATTACAAAATATAGTTGAAAGCTCTAAC ;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:5:70:318:1631 137 chr2 34 99 40M * 0 0 TAAGAAATTACAAAATATAGTTGAAAGCTCTAACAATAGA <<<<<<;<<<<<<<<<<<<;9:<<<<<<<<<<<<<:::78 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:285:241:560 163 chr2 37 99 35M = 200 198 GAAATTACAAAATATAGTTGAAAGCTCTAACAATA <<<<<<<<<<;<<<<;<<<<<<<<<<<<;<;;;<. MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:389:889 99 chr2 37 99 36M = 205 204 GAAATTACAAAATATAGTTGAAAGCTCTAACAATAG <<<<<<<<<<<<<<<<<<<<;<<<<<<<;9;;<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:127:725:381 163 chr2 39 99 35M = 209 204 AATTACAAAATATAGTTGAAAGCTCTAACAATAGA <<<<<<<<<<<<<<<<<<<<<;<<<<;;;;;<<8: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_93:5:66:372:343 163 chr2 40 99 35M = 228 223 ATTACAAAATATAGTTGAAAGATCTAACAATAGAC <<<<<<<<<<8<<<<<6<<<8&8<<<<<58<:<:: MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_65:6:67:800:450 99 chr2 41 99 35M = 221 215 TTACAAAATATAGTTGAAAGCTCTAACAATAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:90:1906:1528 163 chr2 41 99 35M = 222 216 TTACAAAATATAGTTGAAAGCTCTAACAATAGACT <<<<<<<<<<<<<<<:<<<:<<<<;<<<<<;:7:; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:117:284:589 163 chr2 43 99 35M = 210 202 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA ==================================0 MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:26:211:481 99 chr2 43 99 35M = 222 214 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA <<<<<<<<<<<<<<<<<<<<<<<7<<<<<:<7<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:85:923:726 99 chr2 43 99 35M = 199 191 ACAAAATATAGTTGAAAGCTCTAACAATAGACTAA <<<<<<<7<<<<<<<<<<<55<<<9<*<<<991<4 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:107:395:312 163 chr2 44 99 35M = 224 215 CAAAATATAGTTGAAAGCTCTAACAATAGACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<;<;;<:<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:7:5:753:806 163 chr2 45 99 35M = 197 187 AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<7:-<;;3;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_103:3:277:921:474 163 chr2 45 99 35M = 241 231 AAAATATAGTTGAAAGCTCTAACAATAGACTAAAC <<<<<<<<<<<<<<<:<<<<<<<<<<<5<<;;;;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_63:4:38:28:122 163 chr2 46 99 35M = 227 216 AAATATAGTTGAAAGCTCTAACAATAGACTAAACC <<<<<<;<<<<<<<;<<<<6<<<<<<:<<<<;;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS221_3:8:50:1203:1094 163 chr2 46 99 35M = 223 212 AAATATAGTTGAAAGCTCTAACAATAGACTAAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:2:223:583:968 99 chr2 47 88 36M = 215 204 AATATAGTTGAAAGCTCTAACAATAGACTAAACCAA <<<<<<<29<<<<4<<<<<<<<<<<7<<7<..<<47 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:1:28:350:895 163 chr2 48 95 35M = 215 202 ATATAGTTGAAAGCTCTAACAATAGACTAAACCAA <<<<<<<<;<;<<<<<<<<<;;<<;<<<<<;;<;8 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:7:69:1130:832 99 chr2 50 94 35M = 231 216 ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC ;;2<;<;;<;9;<;;;;;;;7;8;;7;;;;77437 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS188_7:3:296:224:724 163 chr2 50 99 35M = 234 219 ATAGTTGAAAGCTCTAACAATAGACTAAACCAAGC <<<<;<<<<<<7;<<<<<6<<<06<<<<<<2(<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_595:4:319:250:718 163 chr2 52 99 35M = 240 223 AGTTGAAAGCTCTAACAATAGACTAAACCAAGCAG <<<<<<<<<<<;<<5<5;<851;85;)9;;8594; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_73:3:203:419:243 163 chr2 54 99 35M = 237 218 TTGAAAGCTCTAACAATAGACTAAACCAAGCAGAA <<<<<<<<<<<<<<<9<;<8<<<;<<<;<<<4<77 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:21:1601:1666 163 chr2 56 99 40M = 228 212 GAAAGCTCTAACAATAGACTAAACCAAGCAGAAGAAAGAG 7<<<<<<<<:<<7<<<:<<<<<<4<<44<<914<;:5::: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:158:943:467 163 chr2 57 99 35M = 225 203 AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA <<<<<;<<<<<<<<<<<<<<;;<<<<<<<<<;8<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:54:91:1232 99 chr2 57 99 35M = 246 224 AAAGCTCTAACAATAGACTAAACCAAGCAGAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:29:833:612 163 chr2 58 99 35M = 224 201 AAGCTCTAACAATAGACTAAACCAAGCAGAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:1:189:503:110 163 chr2 63 79 35M = 229 201 CTAACAATAGACTAAACCAAGCAGAAGAAAGAGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:2 H1:i:0
--EAS114_28:2:114:938:216 99 chr2 63 99 36M = 218 191 CTAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_95:5:257:654:116 99 chr2 64 99 35M = 231 202 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<<<;:<<<<<<<<<88 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_97:3:277:144:848 163 chr2 64 99 35M = 228 199 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<;<<<<<<<<<<<<<<<<<3<<9;;6; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_108:4:75:166:463 99 chr2 64 99 35M = 250 221 TAACAATAGACTAAACCAAGCAGAAGAAAGAGGTT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<++3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:4
--B7_610:5:102:915:87 99 chr2 65 99 35M = 222 192 AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC <<<<<<<<<<<<<<<<<<<<;<<<<<3<<;<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:0
--EAS54_71:3:78:855:352 163 chr2 65 99 35M = 240 209 AACAATAGACTAAACCAAGCAGAAGAAAGAGGTTC <<<<<<<<;<<<<<<<<<;<<<<<<<<;<;<<:<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:0
--EAS56_57:2:206:873:186 163 chr2 66 99 35M = 227 196 ACAATAGACTAAACCAAGCAGAAGAAAGAGGTTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;53 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_93:6:238:514:194 163 chr2 68 99 35M = 265 232 AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<;<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:3:285:489:327 99 chr2 68 99 35M = 233 200 AATAGACTAAACCAAGCAGAAGAAAGAGGTTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_67:1:15:381:715 99 chr2 72 99 35M = 237 200 GACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTT ;=====;===9==;===9;;;=4;9=====;==== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:199:818:124 99 chr2 73 99 35M = 266 228 ACTAAACCAAGCAGAAGAAAGAGGTTCAGAACTTG <<<<<<<<<<<<<<<<<;<<;<<;7<<<<<<9<9; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:182:1002:639 163 chr2 77 99 35M = 246 204 AACCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGA <<<<<<<<<<<<<<<<<<<<<9-<<<<4<;<;;<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:945:2005 163 chr2 77 99 35M = 262 220 AACCAAGCAGAAGAAAGAGGCTCAGAACTTGAAGA <<<<<<<<<<<<<<<<<<<<%<<<<<<;<<<<<<< MF:i:18 Aq:i:44 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--B7_591:5:254:542:848 99 chr2 79 99 36M = 233 190 CCAAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAA <<<;<<<<<<<<<<<<<<<;4<;8<<<;;9<9;8;9 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:71:517:742 99 chr2 81 99 35M = 266 220 AAGCAGAAGAAAGAGGTTCAGAACTTGAAGACAAG <<<<<<<<<<<<;<<<<<<<<<<<<<48:4<<<<3 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:254:617:73 163 chr2 83 99 35M = 266 218 GCAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<6;:;4% MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:13:1507:1146 99 chr2 84 99 35M = 278 229 CAGAAGAAAGAGGTTCAGAACTTGAAGACAAGTCT ;<9;;;;<<;;;;<<;<;;;;<;;<<;<;<99777 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:32:686:735 99 chr2 84 78 35M = 255 206 CAGAAGAAAGAGGTTCANANNNTGANGACAAGTCT <<<<<<<<<<<<<<<<<!<!!!<<<!<<<<<<<<< MF:i:130 Aq:i:78 NM:i:5 UQ:i:0 H0:i:0 H1:i:0
--EAS56_57:3:112:729:591 99 chr2 86 99 35M = 283 232 GAAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:17:1222:783 163 chr2 87 99 35M = 251 199 AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCGT <<<<<<<)<<<16<<;<<<6<4<:<4<+://<7)< MF:i:18 Aq:i:59 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS188_7:6:46:122:479 99 chr2 87 99 35M = 248 196 AAGAAAGAGGTTCAGAACTTGAAGACAAGTCTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:313:531:169 163 chr2 89 99 36M = 250 197 GAAAGAGGTTCAGAACTTGAAGACAAGTCTCTTATG <<<<<<<<<<<<<;<<<<<<<<<<<:<<:<;<<;<2 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:148:170:895 99 chr2 91 99 35M = 247 191 AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA <<<<<<<<<<9<<<<<6<<<<<<<<<<<<<<<<6< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:34:380:815 163 chr2 91 99 35M = 283 227 AAGAGGTTCAGAACTTGAAGACAAGTCTCTTATGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:210:809:735 163 chr2 93 99 35M = 291 233 GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<5<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:40:925:442 163 chr2 93 99 35M = 271 213 GAGGTTCAGAACTTGAAGACAAGTCTCTTATGAAT ;<;<<<<<<<<<<<3;<7;:<;;<<<;<<:<32<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:169:256:888 163 chr2 94 99 35M = 270 210 AGGTTCAGAACTTGAAGACAAGTCTCTTATGAATT <<<<<<<<<<<<<<<<<<<<<<;;<;<<;<<:;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:117:156:84 99 chr2 95 99 35M = 285 225 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:35:522:294 163 chr2 95 99 35M = 272 212 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA ===============================:=:= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:41:653:1568 163 chr2 95 99 35M = 266 206 GGTTCAGAACTTGAAGACAAGTCTCTTATGAATTA ;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;88888 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:178:276:693 163 chr2 96 99 36M = 259 199 GTTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:223:440:667 99 chr2 97 99 35M = 282 220 TTCAGAACTTGAAGACAAGTCTCTTATGAATTAAC <<<<<<<<<<<<<<<<<<<;<<<<<<<<;<<<<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:194:470:416 99 chr2 98 99 35M = 265 202 TCAGAACTTGAAGACAAGTCTCTTATGAATTAACC <<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:61:1000:1534 163 chr2 104 99 35M = 286 217 CTTGAAGACAAGTCTCTTATGAATTAACCCAGTCA <<<<4:<:<1)<<<<<<<+<:44<</7<<<)4:<) MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:145:383:182 163 chr2 105 99 35M = 291 221 TTGAAGACAAGTCTCTTATGAATTAACCCAGTCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:63:816:921 163 chr2 106 99 35M = 291 220 TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<4<846 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:77:1780:693 99 chr2 106 99 40M = 276 210 TGAAGACAAGTCTCTTATGAATTAACCCAGTCAGACAAAA <<<<<<<<<<<<;<<:<<;<<<<<<<<<<<<;<<<;;:69 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:215:861:605 163 chr2 107 94 36M = 262 191 NAAGACAAGTCTCTTATGAATTAACCCAGTCAGACA !+++++++++++++++++++++++++++++++++++ MF:i:18 Aq:i:19 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS221_3:2:22:1623:709 99 chr2 107 99 35M = 287 215 GAAGACAAGTCTCTTATGAATTAACCCAGTCAGAC <<<<<<<<<7<<<<<<<:<<<<<<<<:85:<:2<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:54:436:1452 163 chr2 108 99 35M = 275 202 AAGACAAGTCTCTTATGAATTAACCCAGTCAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:42:333:516 163 chr2 109 99 35M = 296 222 AGACAAGTCTCTTATGAATTAACCCAGTCAGACAA <<<<<5<*<2<<<<<<<<<<<<<<<<<<<<<<<</ MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:119:730:190 99 chr2 114 99 35M = 301 222 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<9<;;<<<;<<<<<<<8<<<1<<918<;;;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:63:727:203 99 chr2 114 99 35M = 278 199 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:27:577:849 163 chr2 114 99 35M = 316 237 AGTCTCTTATGAATTAACCCAGTCAGACAAAAATA <<<<<<<<<<<<<<<<<<<<;:<<<;<<<<<<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:5:259:250 99 chr2 115 99 35M = 269 189 GTCTCTTATGAATTAACCCAGTCAGACAAAAATAA <<<<<<<<<<<<<<<<<<<<;<<<;5<<5<;7<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:17:989:186 99 chr2 120 91 35M = 299 214 TTATGAATTAACCCAGTCAGACAAAAATAAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<:<<;<7;:::: MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_45:2:33:1445:1357 99 chr2 121 85 35M = 299 213 TATGAATTAACCCAGTCAGACAAAAATAAAGAAAA ;;<;<<<<<<;;;<9:;:;;;;;:;:;;;;99777 MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:7
--EAS221_3:4:30:1452:1563 163 chr2 122 94 35M = 313 226 ATGAATTAACCAAGTCAGACAAAAATAAAGAAAAA <<<<<<<<<<<<<<:<<<<1<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_45:1:77:1000:1780 163 chr2 123 66 35M = 279 191 TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA ;;;:;;;;;;;/;;;7:4;;7;;;;;;;;;77777 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:6 H1:i:47
--EAS114_45:4:48:310:473 99 chr2 123 66 35M = 298 210 TGAATTAACCCAGTCAGACAAAAATAAAGAAAAAA <<<;<<;;;<<;;<;;;;;;;;;;;;;;;;89799 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:6 H1:i:47
--B7_591:2:279:124:41 99 chr2 124 69 36M = 307 219 GAATTAACCCAGTCAGACAAAAANNAAGAAAAAAGA <<<<<<<7/<8<<<<<<<<<<4*!!<<7<7<<5<<3 MF:i:18 Aq:i:0 NM:i:2 UQ:i:0 H0:i:0 H1:i:0
--EAS112_32:8:89:254:332 163 chr2 124 76 35M = 291 202 GAATTAACCCAGTCAGACAAAAATAAAGAAAAAAG ==================;=========;=7;;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:4 H1:i:36
--B7_597:7:103:731:697 99 chr2 125 72 35M = 304 214 AATTAACCCAGTCAGACAAAAATAAAGAAAAAAGA <<<<<<<<<<<<<<<<<<:<:<<6<<<<<<<:<;: MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:9 H1:i:55
--EAS139_11:2:71:83:58 163 chr2 148 77 9M2I24M = 349 236 AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS192_3:4:63:5:870 163 chr2 148 75 9M2I24M = 330 217 AAAGAAAAAAGAATTTTAAAAATGAACAGAGCTTT <<;<<<<<<<<<<<<<<<<<;<<<<<<<<<;;<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:2:29:1822:1881 163 chr2 150 74 7M2I31M = 328 218 AGAAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAGAAG <<<<<<<<<<<<4<<<<<<<<<<<<<<:<<<:<<;::::: MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS221_3:2:100:1147:124 163 chr2 150 99 35M = 345 230 AAAAAAGAATTTTAAAAATGAACAGAGCTTTCAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<< MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS192_3:8:6:104:118 163 chr2 154 99 35M = 323 204 AAGAATTTTAAAAATGAACAGAGCTTTCAAGAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<=<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:6:185:96:948 99 chr2 160 99 36M = 324 200 TTTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT <<<<<<<<<;6<<<<<<<<<;<<<;;<<<<<<<;<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:7:213:309:373 163 chr2 161 99 35M = 317 191 TTAAAAATGAACAGAGCTTTCAAGAAGTATGAGAT <;<<<<<<;<7<<<<<-<<<<<<<<<<<<<<4<7< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:30:466:652 99 chr2 163 98 35M = 332 204 AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA <<<<<<<<<<<<<<<<<<<<<<<<;<<<4;7<<<7 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:156:21:69 163 chr2 163 99 35M = 362 234 AAAAATGAACAGAGCTTTCAAGAAGTATGAGATTA <<<<<<<<<<<<<<<<<<<<<<<:<4<<<:<;<;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:197:52:58 163 chr2 165 99 35M = 323 193 AAATGAACAGAGCTTTCAAGAAGTATGAGATTATG <<<<<<<<<<<<<<<<<<9<<<<2<<<<<<;<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:214:946:229 163 chr2 165 99 35M = 339 209 AAATGAACAGAGCTTTCAAGAAGTATGATATTATG <<<<<<<<<<<<<<<<<::<;;;<;<;7<:<<7<2 MF:i:18 Aq:i:65 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS192_3:4:293:168:240 99 chr2 167 99 35M = 340 208 ATGAACAGAGCTTTCAAGAAGTATGAGATTATGTA <<<<;<<<;;;<;<<;;;<<;;<<::::<<;;+;7 MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:208:118:673 99 chr2 169 76 35M = 332 198 GAACAGAGCTTTCAAGAAGTATGAGATTATGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:71:478:175 163 chr2 171 99 35M = 317 181 ACAGAGCTTTCAAGAAGTATGAGATTATGTAAAGT <<<<<<<<<<<;<<<<<;<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:177:24:389 163 chr2 175 99 35M = 365 225 AGCTTTCAAGAAGTATGAGATTATGTAAAGTAACT <<<<<<<<<<<<<<<<<<<<<<<<7<;;<;9969; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:14:1211:1332 163 chr2 178 99 35M = 351 208 TTTCAAGAAGTATGAGATTATGTAAAGTAACTGAA ;;.;;;;;;;3;;;;;6;;;;;;8;;;;;;63777 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:324:238:736 163 chr2 180 99 35M = 367 222 TCAAGAAGTATGAGATTATGTAAAGTAACTGAACC =================================== MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:9:648:712 99 chr2 182 99 35M = 358 211 AAGAAGTATGAGATTATGTAAAGTAACTGAACCTA <9<;<<<<<<<;<<<<<8<<<<9<<;<<8)<:1<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:41:1308:619 163 chr2 184 99 35M = 360 211 GAAGTATGAGATTATGTAAAGTAACTGAACCTATG <6+<*<<<<<<<:<<<<<<<:<<&<<<<1<6<11: MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:328:537:640 99 chr2 185 99 35M = 352 202 AAGTATGAGATTATGTAAAGTAACTGAACCTATGA <;<<<<<<;<<<<<<<<<:;<<8<<<;:<<<;<;9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:86:697:941 163 chr2 187 99 35M = 341 189 GTATGAGATTATGTAAAGTAACTGAACCTATGAGT =====================<=<==<<====;=5 MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:224:592:744 99 chr2 188 99 35M = 383 230 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<;<<<<<7<<<<<<<&<*<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:135:354:66 99 chr2 188 99 35M = 356 203 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<;<<<<<<<<<<;<<2<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:71:311:202 163 chr2 188 99 35M = 379 226 TATGAGATTATGTAAAGTAACTGAACCTATGAGTC <<<<<<<<<<<<<<<<:4<<<<<<<<<<<<8;4;: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:50:30:15 99 chr2 192 39 35M = 358 201 AGATTATGTAAAGTAACTTAACCTATGAGTCCAAG +:79.68872.:9&:92/.299169/5+/6/3/&2 MF:i:18 Aq:i:10 NM:i:3 UQ:i:45 H0:i:0 H1:i:1
--EAS192_3:5:287:334:110 73 chr2 196 73 35M = 196 0 TATGTAAAGTAACTGAACCTATGAGTCACAGGTAT <<<<<<<<<<<<<<<<<<4;<<<<<<<::6<55:. MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:287:334:110 133 chr2 196 0 * = 196 0 GATGAATACTAAGATTGATGTAGCAGCTTTTGCAA .5+7)09<))&-&:33953<-./&&&)((;+3399 MF:i:192
--B7_597:7:5:753:806 83 chr2 197 99 35M = 45 -187 ATGTAAAGTAACTGAACCTATGAGTCACAGGTATT ;:<:<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:149:572:877 163 chr2 197 99 36M = 334 173 ATGTAAAGTAACTGAACCTATGAGTCACAGGTATTC =>7><>;>+>>/;>>=>=>=:>><>=<<==;)<=8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:85:923:726 147 chr2 199 99 35M = 43 -191 GTAAAGTAACTGAACCTATGAGTCACAGGTATTCC <:<<<%3<<1<<86<<-<<<<<<<<<<<<6<<1<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:285:241:560 83 chr2 200 99 35M = 37 -198 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT :<<<<;<<,<<<<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:41:461:436 163 chr2 200 74 35M = 389 224 TAAAGTAACTGAACCTATGAGTCACAGGTATTCCT <<<<<<<<<<<<<<<<<<<:<<<<<<<<;<;;;:; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:6:25:949:33 99 chr2 201 99 35M = 383 217 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG =;===/8========*==&;6=&=&:=6&:=::67 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:60:590:1760 99 chr2 201 99 35M = 376 210 AAAGTAACTGAACCTATGAGTCACAGGTATTCCTG <:<<<<<2<<<<:<::<<<::<<<<<6<<<<<<<6 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:86:693:234 163 chr2 202 82 35M = 388 221 AAGTAACTGAACCTATGAGTCACAGGTATTCCTGA ;;;;;;;;;;;;;;;;9;;;;;;;;99;;&70777 MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:4:223:776 163 chr2 203 93 35M = 387 219 AGTAACTGAACCTATGAGTCACAGGTATTCCTGAG <<<<<<<<<<<<<<<<<<<<<<<<<9<<<:;<;2< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:88:84:1558 99 chr2 203 95 35M = 394 226 AGTAACTGAACCTATGAGTCACAGGTATTCCTGTG <<;<<<<<<<<<<<<;;<<<<<<<::<<<<<<7&< MF:i:18 Aq:i:22 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_597:2:168:829:88 163 chr2 205 99 35M = 369 199 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGA <<<<<<<<<<<<<<<<<<<<<<<6<<<<<<9;4;2 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:389:889 147 chr2 205 99 36M = 37 -204 TAACTGAACCTATGAGTCACAGGTATTCCTGAGGAA ;<<;;56;==================8========8 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:81:685:141 99 chr2 207 85 34M = 382 210 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAA <<<<<<<<<<<<<<<<<<<<<;;<<;<<<',7,7 MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:1312:1400 99 chr2 207 99 40M = 385 218 ACTGAACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<;<<<:<<:<;<:<<<;:;<<<<<<:<8<1;;:::88 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:127:725:381 83 chr2 209 99 34M = 39 -204 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAA +<<.<<;<;<<<3;<;<<<<<<6<8;<<<<<<<1 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:19:736:559 99 chr2 209 99 35M = 370 196 TGAACCTATGAGTCACAGGTATTCCTGAGGAAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:117:284:589 83 chr2 210 99 35M = 43 -202 GAACCTATGAGTCACAGGTATTCCTGAGGAAAAAG ==8==;==================;========== MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:120:596:847 163 chr2 211 83 35M = 410 234 AACCTATGAGTCACAGGTATTCCTGAGGAAAAAGA <<<<<<<<<<<<<;<<<9<<<<<<<;:<62;58;2 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_610:5:51:904:391 163 chr2 212 97 35M = 401 224 ACCTATGAGTCACAGGTATTCCTGAGGAAAAAGAA <<<<<<<<<<<<<<<<<;<<<<<;:;<2<6;;;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:96:1314:1448 163 chr2 213 93 35M = 388 210 CCTATGAGTCACAGGTATTCCTGAGGAAAAATAAA <<<<<<<<<<<<<<<<<<<<<<<<5<4<<<<-<<< MF:i:18 Aq:i:18 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS139_19:3:73:1158:535 163 chr2 213 99 40M = 377 204 CCTATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTG <<<<<<<<<<<<<<<<<<<<<<8<;;<<<<<9<<9::8:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:223:583:968 147 chr2 215 88 36M = 47 -204 TATGAGGCACAGGTATTCCTGAGGAAAAAGAAAAAG 1<';<<&%-:<<<<<:66%<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:3:160:173:889 163 chr2 215 99 35M = 379 199 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA <<<<<<<<<<<<<<<<<<<<;0<7<<;<<<;7<09 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:28:350:895 83 chr2 215 95 35M = 48 -202 TATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAA :<;<<<:;<-<<<<<4;77<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:4:45:707:147 163 chr2 216 99 35M = 424 243 ATGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<&<<<<:<<9<<<9<<<<75;;;< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:18:1757:95 99 chr2 216 45 35M = 374 193 ATGAGTCGCAGGTATTCCTGAGGAAAAAGAAAAAG <<<<<<<<<<<<<<<<<<<1<:<<<<<<:<<<;:< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_66:6:310:747:415 163 chr2 217 99 35M = 387 205 TGAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGT <<<<<<<<<<<<<<<<<<:<<<<<;<<<<<;<;<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:114:938:216 147 chr2 218 99 36M = 63 -191 GAGTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGA <<<<7<6<<<<<<<6<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:179:629:513 163 chr2 220 99 35M = 409 224 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG <<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:88:55:1187 99 chr2 220 66 35M = 391 206 GTCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAG ;;<;;;<<99<<;;<;;;;;:;49;:;;;;87898 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:119:38:945 99 chr2 221 99 35M = 428 242 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA <<<<<<<<<<<<<<<8<<<<<8<<<8<;<<7<:<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:67:800:450 147 chr2 221 99 35M = 41 -215 TCACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGA 9-<9<;<<<<9;5<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:102:915:87 147 chr2 222 99 35M = 65 -192 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA ;<8<;;<<<<7;<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:113:367:659 163 chr2 222 72 35M = 390 203 CACAGGTATTCCTGAGGAAAAAGAAAAAGCGAGAA =9====8==========:=:=====9=:=&====5 MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS218_1:2:26:211:481 147 chr2 222 99 35M = 43 -214 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<:<<<<<<9:5<<<<<<<<<<<<<<:<:<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:90:1906:1528 83 chr2 222 99 35M = 41 -216 CACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAA :<<<<<<<<<3:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:13:100:876 163 chr2 223 73 36M = 397 210 ACAGGGATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <8<<<*<2<7<<<6<<<<<<6<<8<<<<5<<<<4<9 MF:i:18 Aq:i:30 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS56_63:5:117:570:971 163 chr2 223 99 35M = 413 225 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <<<<<<<<<<<<<;;;<<<<6<7;9;<:;<;<;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:50:1203:1094 83 chr2 223 99 35M = 46 -212 ACAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAG <7<<<<<5:+63<<<<<<<<<<<<<<<<2<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:107:395:312 83 chr2 224 99 35M = 44 -215 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT ;<;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:29:833:612 83 chr2 224 99 35M = 58 -201 CAGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGT <<;<<<;<::<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:158:943:467 83 chr2 225 99 35M = 57 -203 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT <:<<;;<:5<<<<<<<<<<<<<<<<<<;<<<;<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:201:768:529 163 chr2 225 99 35M = 396 206 AGGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTT ==========================1=======; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:11:994:584 99 chr2 226 97 35M = 417 226 GGTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTT <<<<<<<<<<<7<<<<<<<<<<<<<6<<<<<<3<6 MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:206:873:186 83 chr2 227 99 35M = 66 -196 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;<<;--7<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:4:38:28:122 83 chr2 227 99 35M = 46 -216 GTATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTG ;9;9;-1<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:66:372:343 83 chr2 228 99 35M = 40 -223 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG ;<1;89<<<<<;<9<<<<9<<<;8<9<;<<<<<;8 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:277:144:848 83 chr2 228 99 35M = 64 -199 TATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGG <<<)63<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:21:1601:1666 83 chr2 228 99 40M = 56 -212 TATTACTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA -;;3&1<<<<<<<<<<<<1<<<</<<<<<</<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_57:1:189:503:110 83 chr2 229 79 35M = 63 -201 ATTCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGA =;;6:============================== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:5:257:654:116 147 chr2 231 99 35M = 64 -202 TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA 0+37<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:69:1130:832 147 chr2 231 94 35M = 50 -216 TCCTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAA 6)377;3;;;;;;;;;1;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:254:542:848 147 chr2 233 99 36M = 79 -190 CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC ,:4<8<<<<<<<<<<<<<;:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:285:489:327 147 chr2 233 99 35M = 68 -200 CTGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAA 9;;<<8<<<<<<<<<<<<;<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:163:611:211 163 chr2 234 99 35M = 405 206 TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC ============8===============;=6;;<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:296:224:724 83 chr2 234 99 35M = 50 -219 TGAGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAAC 8<<<5<<<<<<<<<<<<<<<<<<<<7<<<<<;<9< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:58:271:612 99 chr2 236 99 35M = 415 214 AGGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTA <;<<<<<<<<<7<<<<<<<<<<<<<<+47<<;<:: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:15:381:715 147 chr2 237 99 35M = 72 -200 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT <<<<<<<<<<<<<<9<<<<<<97;<<<<<<<<9<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:203:419:243 83 chr2 237 99 35M = 54 -218 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:41:1281:1785 99 chr2 237 99 35M = 399 197 GGAAAAAGAAAAAGTGAGAAGTTTGGAAAAACTAT <<<<<<<<<<<<<<<<<<<<<;<<<;<<<<<<<8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:218:858:445 99 chr2 239 99 35M = 421 217 AAAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT ;===5=;=======;==3======9;,79==;=== MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:4:319:250:718 83 chr2 240 99 35M = 52 -223 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG <;:<<<<;<<<:<<<<<<49:<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:92:493:891 99 chr2 240 99 35M = 408 203 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTG <<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<8 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:78:855:352 83 chr2 240 99 34M = 65 -209 AAAAGAAAAAGTGAGAAGTTTGGAAAAACTATTT 2<<<<<<<9<<4<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:277:921:474 83 chr2 241 99 35M = 45 -231 AAAGAAAAAGTGAGAAGTTTGGAAAAACTATTTGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:41:199:388 99 chr2 243 99 35M = 403 195 AGAAAAAGTGAGAAGTTTGGAAAAACTATTTGAGG ;;<<<<<;;<<<<<<;;<;;<<;;<<<<<<99999 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:307:481:625 99 chr2 245 99 36M = 410 201 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:134:126:465 99 chr2 245 99 35M = 434 224 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA <<<<<<<<<<<<<;<<<<<<<<<<<<<5<<:<<41 MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:44:153:969 163 chr2 245 95 35M = 447 237 AAAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAA *:::7<77<:<<<<:<<(597:<:<9//7<529/0 MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:182:1002:639 83 chr2 246 99 35M = 77 -204 AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG <<;;9;9<<<<<<;<7;<;<<<<;;<<<;<<7;<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:54:91:1232 147 chr2 246 99 35M = 57 -224 AAAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAG ;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:204:737:61 163 chr2 247 99 35M = 437 225 AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT <<<<<<<<<<<<<<<<<<<<<<<<<:<<9<+4:<0 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:148:170:895 147 chr2 247 99 35M = 91 -191 AAAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGT <<9<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:46:122:479 147 chr2 248 99 35M = 87 -196 AAGTGAGAAGTTTGGAAGAACTATTTGAGGAAGTA <<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS219_1:7:16:1343:1621 99 chr2 248 99 35M = 426 213 AAGTGAGAAGTTTGGAAAAACTATTTGAGGAAGTA <<<<<<<<8<<<<;<<<;<;<<<<<<<:;4;71:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:313:531:169 83 chr2 250 99 36M = 89 -197 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT 98;<;;<<;8<<<<<<<<<<<8<<<<<<<<8<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:75:166:463 147 chr2 250 99 35M = 64 -221 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<============================== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:130:260:553 99 chr2 250 99 34M = 439 224 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGCAC <<<<<1<<<<<<<<<<6<<81</<4*2;7:+90( MF:i:18 Aq:i:42 NM:i:2 UQ:i:31 H0:i:1 H1:i:0
--EAS56_59:2:60:677:921 99 chr2 250 96 35M = 393 178 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:60:1037:1146 99 chr2 250 99 35M = 447 232 GTGAGAAGTTTGGAAAAACTATTTGAGGAAGTAAT <<<<<<<<<<<<<<<<<<<<<<<<<;<:;;;;;;< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:17:1222:783 83 chr2 251 99 35M = 87 -199 TGAGAAGTTTGGAAAAACTATTTGAGGAAGTAATT 6<<<8<69<8199<7<<<6<<<<<<<<<1:<:<<: MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:96:491:1891 163 chr2 253 99 35M = 409 191 AGAAGTTTGGAAAAACTATTTGAGGAAGTAATTGG <:<<<<<::<<<<<<<<<<<<<<<<:<<::7<<:7 MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:75:615:555 99 chr2 255 99 35M = 416 196 AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG <<<<<<<<<<<<<<<<<<<<<;<;<<<29<;.484 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:32:686:735 147 chr2 255 78 35M = 84 -206 AAGTTTGGAAAAACTATTTGAGGAAGTAATTGGGG <<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:65:85:1547 163 chr2 257 99 35M = 434 212 GTTTGGAAAAACTATTTGAGGAAGTAATTGGGGAA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<:<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:94:1655:1921 99 chr2 258 85 35M = 447 224 TTTGGAAAAACTATTTGAGGAAGTAATTGGGGAAA <<<8<<<<<<<<<8<<8;8<;<;<;;<<9+868<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_610:7:177:469:800 99 chr2 259 99 35M = 433 209 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA <<<<<<<<<<<<<<<<<<<<<<<<;<<;;<<<;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:178:276:693 83 chr2 259 99 36M = 96 -199 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAAC :;<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:14:697:541 99 chr2 259 99 35M = 432 208 TTGGAAAAACTATTTGAGGAAGTAATTGGGGAAAA <<<<<<<<<<<<<<<<<<<:<<<<<<<;;;;8;;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:37:156:134 163 chr2 261 99 35M = 443 217 GGAAAAACTATTTGAGGAAGTAATTGGGGAAAACC ;;;;;;;;;;9;;;;;;;;;;;;;;;9;;;77679 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:215:861:605 83 chr2 262 94 36M = 107 -191 GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC ;<<<<<;:<7:<<<;<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:945:2005 83 chr2 262 99 35M = 77 -220 GAAAAACTATTTGAGGAAGTAATTGGGGAAAACCT 7<<<<;;<<;<<<<<7<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:52:751:360 163 chr2 263 99 35M = 443 215 AAAAACTATTTGAGGAAGTAATTGGGGAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<:76<<<<;9:;: MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:238:514:194 83 chr2 265 99 35M = 68 -232 AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT <<6<<<<:9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:194:470:416 147 chr2 265 99 35M = 98 -202 AAACTATTTGAGGAAGTAATTGGGGAAAACCTCTT <<<7<<;<<<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:71:517:742 147 chr2 266 99 35M = 81 -220 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<<<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:254:617:73 83 chr2 266 99 35M = 83 -218 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<:<<<9;<<<;;<:<-<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:199:818:124 147 chr2 266 99 35M = 73 -228 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:41:653:1568 83 chr2 266 99 35M = 95 -206 AACTATTTGAGGAAGTAATTGGGGAAAACCTCTTT 977979;:;<;;;;;;<<5;<;<;<<<;;;;;;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:211:84:84 99 chr2 268 99 35M = 440 207 CTATTTGAGGAAGTAATTGGGGAAAACCTCTTTAG <<<<<<<<<<<<<<<<:<<:<<:<<<44<4<<9<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:152:355:962 163 chr2 269 99 35M = 456 222 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <;<<<<<;8<<<<<<<<<;5;;88<<3<<<<<&0; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:285:395:450 99 chr2 269 99 35M = 458 224 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <<<<<<<;<<<;<<<<<;:<:7<;<;7<7<<;;7< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:15:568:42 121 chr2 269 69 35M = 269 0 TTTTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT !!;:<8<;<<<8<<<<<<<<8<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:2 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:15:568:42 181 chr2 269 0 * = 269 0 TTTTTTTTTTTGTTTTTTTTTTTTTTTTTTTTATA !!!!!!!!!++++!!!!!!!!!!!!!!!!!!!,!, MF:i:192
--EAS192_3:8:6:237:885 99 chr2 269 99 35M = 433 199 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT <<<<<<<<9<<<<<<<<<<<<<<<<<<<<<;;;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:5:5:259:250 147 chr2 269 99 35M = 115 -189 TATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT 8<83;<<<<<<<<<<5<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:206:994:556 73 chr2 270 75 35M = 270 0 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:206:994:556 133 chr2 270 0 * = 270 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS54_71:4:169:256:888 83 chr2 270 99 34M = 94 -210 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGT &<<:<;<<;;<8<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:317:72:221 163 chr2 270 99 35M = 422 187 ATTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTC ===========;=======;;:==6=;=====;== MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:40:925:442 83 chr2 271 99 35M = 93 -213 TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT =;================================= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:158:909:321 163 chr2 271 99 35M = 453 217 TTTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:35:522:294 83 chr2 272 99 35M = 95 -212 TTGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:176:971:874 163 chr2 273 76 35M = 432 195 TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG <<<<<<<<<<<<<:<;<<<<<<<<<<<<<5<<<<7 MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:226:869:36 99 chr2 273 99 35M = 461 223 TGAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTG :<<<<,:<;:.:<<:<<717,;2171717717116 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:106:595:322 163 chr2 274 99 35M = 440 201 GAGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:54:436:1452 83 chr2 275 99 35M = 108 -202 AGGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:77:1780:693 147 chr2 276 99 40M = 106 -210 GGAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGAT :**::799<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:147:423:584 99 chr2 277 99 35M = 451 209 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;96 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:188:782:483 163 chr2 277 99 35M = 431 189 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<7<;77 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:78:1314:1275 99 chr2 277 99 35M = 469 227 GAAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAG <<<<<<<<<<<<<<<<<<<<<6<<<<<<<<<<<<8 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:63:727:203 147 chr2 278 99 35M = 114 -199 AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA <<;7<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:13:1507:1146 147 chr2 278 99 35M = 84 -229 AAGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGA 88788;,;:-:2;;;;;;;;:;:;;;;;;;;;;;; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:77:1000:1780 83 chr2 279 66 35M = 123 -191 AGTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAG 777774;;4-7;;;;;;:;;;:;;;<;;;;<<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:93:490:901 163 chr2 280 99 35M = 445 200 GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA <<<<<<<<<<<<<;<<<<<<<;<<<<<:<<1+4-8 MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:227:657:95 99 chr2 280 99 35M = 458 213 GTAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<85 MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:57:324:546 163 chr2 281 99 36M = 458 213 TAATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT <<<<<<<<<<<<<<<<<<<<<:<<<8:8<<;::;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:223:440:667 147 chr2 282 99 35M = 97 -220 AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATT <<;;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:274:1078 163 chr2 282 99 40M = 458 216 AATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC <<<2<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;::::: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:196:511:896 163 chr2 283 99 35M = 446 198 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT <<<<<<<<<<<<<<<<<<<<<<<<;<<<4<88;<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:112:729:591 147 chr2 283 99 35M = 86 -232 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:34:380:815 83 chr2 283 99 35M = 91 -227 ATTGGGGAAAACCTCTTTAGTCTTGCTAGAGATTT ;;;;<<<<<<;<<<<;<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:117:156:84 147 chr2 285 99 35M = 95 -225 TGGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAG <;;<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:61:1000:1534 83 chr2 286 99 35M = 104 -217 GGGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGA <<;<<<<;;<<;6;<<<;<4;<<7<<<<<;<<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:22:1623:709 147 chr2 287 99 35M = 107 -215 GGGAAAACCTCTTTAGTCTTGCTAGAGATTTAGAC <'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:7:682:201 163 chr2 288 99 35M = 452 199 GGAAAACCTCTTTAGTCTTGCTAGAGATTTAGACA <<<<<<<7<<7<<<<77&;-9<97<76<;<<993< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:91:89:666 153 chr2 289 60 35M * 0 0 GAAAACCTCTTTAGTCTTGCTAGAGATTTAGACAT 74752;;4;;;;;;;;7);;;4;;;;)4;;;;;13 MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:46:13:880 99 chr2 290 99 35M = 445 190 AAAACCTCTTTAGTCTTGCTAGAGATTTAGACATC <<<<<<<<<<<<<<<<<<<<;<7<3<<<9<+;;<9 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:187:715:521 163 chr2 291 99 35M = 451 195 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<<<<<<<<<<<<:<<<<<<<;<<;<;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:210:809:735 83 chr2 291 99 35M = 93 -233 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:145:383:182 83 chr2 291 99 35M = 105 -221 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:8:89:254:332 83 chr2 291 76 35M = 124 -202 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<:<;<<<<<<<<9<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:63:816:921 83 chr2 291 99 35M = 106 -220 AAACCTCTTTAGTCTTGCTAGAGATTTAGACATCT <<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:280:662:939 99 chr2 294 99 35M = 442 183 CCTCTTTAGTCTTGCTAGAGATTTAGACATCTAAA <<<<<<<<<<<<<;<<<;;7<<<<<<<<<<<<:8< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:250:628:423 163 chr2 295 99 36M = 489 230 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG <<<<<<<<<<<<<<<<<<:;<<<<:<<<<;;;;;;4 MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:255:549:422 163 chr2 295 99 35M = 456 196 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT <<<<<<<<<<<<<<<<;<<<<<<<:<<<<<<;;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:2:491:1886 89 chr2 295 75 35M * 0 0 CTCTTTAGTCTTGCTAGAGATTTAGACATCTAAAT <<:<8:<<<:<<<<<<<<<<<9<<<<<<<<<<<<: MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:267:821:860 163 chr2 296 99 35M = 451 189 TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG ;<<<<<8<<<<<8<<;<8<<<<<5<;<<<<<2;<5 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:42:333:516 83 chr2 296 99 35M = 109 -222 TCTTTAGTCTTGCTAGAGATTTAGACATCTAAATG <<<<<<<<7<63<7<<<<<<<<<<<7<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:119:161:322 99 chr2 297 99 35M = 479 217 CTTTAGTCTTGCTAGAGATTTAGACATCTAAATGA <<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<</6 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:48:310:473 147 chr2 298 66 35M = 123 -210 TTTAGTCTTGCTAGAGATTTAGACATCTAAATGAA 77999;;6;;;;;;;;;;;;;;;9;;;;;;;;;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:159:273:253 153 chr2 299 76 35M * 0 0 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA <<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:181:392:500 99 chr2 299 99 35M = 470 206 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA <<<<<:<<<2<<<<;5<<<<29+<<)</65<7.24 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:17:989:186 147 chr2 299 91 35M = 120 -214 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA 87;38$<3=/<==============9========= MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:33:1445:1357 147 chr2 299 85 35M = 121 -213 TTAGTCTTGCTAGAGATTTAGACATCTAAATGAAA 88888;;;;;;;:;;;;;;;:;9;;;;;;;;;;;; MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:119:730:190 147 chr2 301 99 35M = 114 -222 AGTCTTGCTAGAGATTTAGACATCTAAATGAAAGA ;;;3;<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:62:969:12 99 chr2 303 99 35M = 464 196 TCTTGCTAGAGATTTAGACATCTAAATGAAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:103:731:697 147 chr2 304 72 35M = 125 -214 CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC :::;3:<<<<<<<:<<<<<<:<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:111:142:21 163 chr2 304 99 35M = 479 210 CTTGCTAGAGATTTAGACATCTAAATGAAAGAGGC <<<<<<<<:<:<<<<<<<<<<<<<<<<<<<<;<;9 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:7:319:280:57 99 chr2 306 99 35M = 467 196 TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC ;==========;=====6;=========;=<;6;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:76:205:587 163 chr2 306 99 35M = 483 212 TGCTAGAGATTTAGACATCTAAATGAAAGAGGCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:279:124:41 147 chr2 307 69 36M = 124 -219 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA :17<8<<<:&<<<<<<:;'<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:10:349:1147 153 chr2 307 74 40M * 0 0 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA :/:::<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:16 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:22:490:2011 99 chr2 307 99 35M = 485 213 GCTAGAGATTTAGACATCTAAATGAAAGAGGCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:46:173:214 163 chr2 308 99 35M = 487 214 CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA <<<<<<<<<<<<<<<<<<<<<<<<<;<3<<<<<<; MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:283:577:398 99 chr2 308 99 35M = 488 215 CTAGAGATTTAGACATCTAAATGAAAGAGGCTCAA <<<<<<<<<<<<<<<<<<<9<<<<<<<<<;<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:27:280:592 99 chr2 310 99 36M = 484 210 AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAGA <<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<5< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:11:1238:1728 163 chr2 310 99 35M = 475 200 AGAGATTTAGACATCTAAATGAAAGAGGCTCAAAG <<7<<<<<;<<<<<<<<<<<<;<<<;<<<<<<;;< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:118:121:760 89 chr2 311 77 36M * 0 0 GAGATTTAGACATCTAAATGAAAGAGGCTCAAAGAA :<<<;;<<<<6<;<<<;<<<<;<<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:7:318:679:883 153 chr2 313 75 35M * 0 0 GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT <<;4<<;<:<<7<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:30:1452:1563 83 chr2 313 94 35M = 122 -226 GATTTAGACATCTAAATGAAAGAGGCTCAAAGAAT <<39<<<59<<:<<+<<<6<<:<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:189:130:136 99 chr2 314 79 35M = 494 215 ATTTAGACATCTAAATGAAAGAGGCTCAAAGAATG ==<<=================<<====<<=;=6== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:27:577:849 83 chr2 316 99 35M = 114 -237 TTAGACATCTAAATGAAAGAGGCTCAAAGAATGCC 5:<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:71:478:175 83 chr2 317 99 35M = 171 -181 TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA <<<<;<96<<<<;<<<<<<<<<77<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:38:999:463 99 chr2 317 39 35M = 503 221 TAGACATCTAAATGAAAGNNGCNNNAAGAATGCCA 7<<<<<<<<:07<<:<<7!!<<!!!::<88<<<<4 MF:i:130 Aq:i:39 NM:i:5 UQ:i:0 H0:i:0 H1:i:0
--EAS54_71:8:215:830:609 89 chr2 317 71 33M * 0 0 AAGACATCTAAATGAAAGAGGCTCAAAGAATGC +<)<:<<:<<<<<<<<<9<<<<<;<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS188_7:7:213:309:373 83 chr2 317 99 35M = 161 -191 TAGACATCTAAATGAAAGAGGCTCAAAGAATGCCA <<<86<82<<<<<<<<<<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:45:1339:1807 153 chr2 319 64 35M * 0 0 GACATCTAAATGAAAGAGGCTCAAAGAATGCCAGG 77797;;:;::&:;;0:;8;;4;;:;;6;;;;;;; MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:197:52:58 83 chr2 323 99 35M = 165 -193 TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA <7;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:8:6:104:118 83 chr2 323 99 35M = 154 -204 TCTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:185:96:948 147 chr2 324 99 36M = 160 -200 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATA 6<;;<;<<;<<<<<747<<<<<<<<77<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:61:346:384 163 chr2 324 68 35M = 496 207 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT <<;<<<<<<<<9<;<<9;<6<2;<6<<<;9*558; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:177:800:714 163 chr2 324 76 35M = 497 208 CTAAATGAAAGAGGCTCAAAGAATGCCAGGAAGAT <<<<<<<<<<<<<<<<<<<<<;<<<;<;<<<<<;< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:329:339:408 99 chr2 325 99 36M = 515 226 TAAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:214:565:337 99 chr2 326 99 35M = 481 190 AAATGAAAGAGGCTCAAAGAATGCCAGGAAGATAC <;<<<<<<<<<<<<<<;<<<<9<<<<<;;;;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:296:401:60 89 chr2 327 68 35M * 0 0 AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA <<*<<<<7<<)<<3<<<9<<<<<<<<<<<<<<;<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:88:1413:14 89 chr2 327 76 35M * 0 0 AATGAAAGAGGCTCAAAGAATGCCAGGAAGATACA <<<<<<<<<<<;;;<<<<<<;<;;<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:34:649:318 163 chr2 328 65 35M = 481 188 ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACAT 9<<3<<<9<<<<<<<<<7<<9<<0<<.0<*:77,; MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:29:1822:1881 83 chr2 328 74 40M = 150 -218 ATGAAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA ;87;;<<<;<5<5<<<<<<<;<<<<<<<<<<<<:<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:187:199:369 153 chr2 329 74 35M * 0 0 TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT ;<><<<<<<<<7<<<<<<<<=<<<<<<<<<<<<<< MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:23:268:529 153 chr2 329 71 35M * 0 0 TGAAAGAGGCTCAAAGAATGCCAGGAAGATACATT 7;<<<<<<57;-<<<<<<:<77<<<<<<<;<;<<< MF:i:32 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:315:219:7 153 chr2 330 69 35M * 0 0 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG 7==::<2=8<<<=====>888<=2=>==>,>,>>8 MF:i:32 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:63:5:870 83 chr2 330 75 35M = 148 -217 GAAAGAGGCTCAAAGAATGCCAGGAAGATACATTG :<;<;<<<4:;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:243:557:560 163 chr2 331 75 36M = 499 204 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<9<<<<<<<<<<<<<<<<<<;<<89<<9<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:270:430:269 163 chr2 331 99 36M = 519 224 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;7;: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:6:284:442:747 89 chr2 331 75 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <;<<<<<:<;<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:71:31:1973 89 chr2 331 76 35M * 0 0 AAAGAGGCTCAAAGAATGCCAGGAAGATACATTGC <<<<<7<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:30:466:652 147 chr2 332 98 35M = 163 -204 AAGAGGCTAAAAGAATGCCAGGAAGATACATTGCA <<<<<;3;&<<<<<<<</6<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_61:3:208:118:673 147 chr2 332 76 35M = 169 -198 AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA <<<<<;;<;<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:95:1530:28 163 chr2 332 74 35M = 490 193 AAGAGGCTCAAAGAATGCCAGGAAGATACATTGCA ;;;;;;;;;;:;;;;;;;8;;;;;;;;;;;77747 MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:104:965:517 73 chr2 333 77 35M = 333 0 AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA <<<<<<<<<<<<<<<<<<<<<:<<<<<<<8<<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:104:965:517 133 chr2 333 0 * = 333 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS54_65:7:155:629:357 163 chr2 333 99 35M = 521 223 AGAGGCTCAAAGAATGCCAGGAAGATACATTGCAA <<<<<<<<8<8<<6<<<<<<<<;<9<5<;<;;941 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:149:572:877 83 chr2 334 99 36M = 197 -173 GAGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA 6<94693<;<<<<;;<<<<<<<<<<;9<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:53:544:889 99 chr2 335 76 35M = 495 195 AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA <<<<<<<<;<<<<<<<<<<<<<<<<<;<<<<<;<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:226:370:91 99 chr2 335 99 35M = 482 182 AGGCTCAAAGAATGCCAGGAAGATACATTGCAAGA 8<<<;<8<8<;<<<8<<;7<7;8784<<,;864<& MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:119:651:88 163 chr2 337 99 35M = 527 225 GCTCAAAGAATGCCAGGAAGATACATTGCAAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:20:592:496 163 chr2 338 75 35M = 498 195 CTCAAAGAATGCCAGGAAGATACATTGCAAGACAG <<<<<<<<<<<<<<<<<<<<<<<<<==<<<<<<:< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:214:946:229 83 chr2 339 99 35M = 165 -209 ACAAAGAATGCCAGGAAGATACATTGCAAGACAGA )+<<<*<<77;8<;7<<8<4<;<88<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS188_7:5:163:982:695 99 chr2 339 77 35M = 499 195 TCAAAGAATGCCAGGAAGATACATTGCAAGACAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:14:1872:1521 163 chr2 339 62 35M = 500 196 TCAAAGAATGCCAGGAAGATACATTGCAAGTCAGA 7<<<<77<<<3<3<7.'<<<<<7<67<+.0%4*<4 MF:i:18 Aq:i:2 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS192_3:4:293:168:240 147 chr2 340 99 35M = 167 -208 CAAAGAATGCCAGGAAGATACATTGCAAGACAGAC +;;;;<8<<86<<<<<<<;;8;7;<;<8<8;<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:86:697:941 83 chr2 341 99 35M = 187 -189 AAAAAAATCCCGGAAGATACATTGCAAGACAGACT 1<<%<<<1:<58<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:4 UQ:i:67 H0:i:0 H1:i:0
--EAS54_71:4:14:88:306 99 chr2 341 99 34M = 521 215 AAAGAATGCCAGGAAGATACATTGCAAGACAGAC <<<<<<8<<<<<<;<<<3<<<8<<;<;;<15<:6 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:183:697:555 163 chr2 341 84 35M = 505 199 AAAGAATGCCAGGAAGATACATTGCCAGACAGACT =====================:===&==:;==5;; MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS56_57:3:41:739:907 163 chr2 344 99 35M = 520 211 GAATGCCAGGAAGATACATTGCAAGACAGACTTCA <<<<<<<<<<<<<<<<<<<<<<<<;<9<<<;;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:100:1147:124 83 chr2 345 99 35M = 150 -230 AATGCCAGGAAGATACATTGCAAGACAGACTTCAT <<<<96<<<<<<<<<<<<<<<<<<<<<<:<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:127:828:697 99 chr2 346 99 35M = 552 241 ATGCCAGGAAGATACATTGCAAGACAGACTTCATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:62:125:888 163 chr2 347 99 35M = 504 192 TGCCAGGAAGATACATTGCAAGACAGACTTCATCA <<<<<<<<<<<<<<<<<<<::<<<:7<::<:;<<: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:1:1598:843 163 chr2 347 99 40M = 500 193 TGCCAGGAAGATACATTGCAAGACAGACTTCATCAAGATA <<<<<<8<<<<<<<<<<<<<<<<<<<<<<<<<<8<4:8:: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:71:83:58 83 chr2 349 77 35M = 148 -236 CCAGGAAGATACATTGCAAGACAGACTTCATCAAG 8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:88:1454:418 163 chr2 349 99 35M = 522 208 CCAGGAAGATACATTGCAAGACAGACTTCATCAAG :<<:<<<<<<<<<<<::::<:<:<9<5<<<<<<8: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:36:649:554 163 chr2 350 99 35M = 523 208 CAGGAAGATACATTGCAAGACAGACTTCATCAAGA <<<<<4<<8<<<<<<8<6<<88<<<<<<<-;<;0; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:189:831:878 163 chr2 351 99 35M = 555 239 AGGAAGATACATTGCAAGACAGACTTCATCAAGAT :<<<2<<<<<<<<<<:8<8<<<<<<<<<<87489; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:14:1211:1332 83 chr2 351 99 35M = 178 -208 AGGAAGATACATTGCAAGACAGACTTCATCAAGAT 978961;;991;97;<;;<;<<;;;;;<;;<:8:< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:4:328:537:640 147 chr2 352 99 35M = 185 -202 GGAAGATACATTGCAAGACAGACTTCATCAAGATA ;:<<;<<<<<::<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:85:361:418 99 chr2 353 99 36M = 517 200 GAAGATACATTGCAAGACAGACTTCATCAAGATATG <<<<<<<<<<<<<;<<<<<<<<<<<<<<;4;<<<<3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:329:437:643 99 chr2 354 99 36M = 540 222 AAGATACATTGCAAGACAGACTTCATCAAGATATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<<<1 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:135:354:66 147 chr2 356 99 35M = 188 -203 GATACATTGCAAGACAGACTTCATCAAGATATGTA ;;;;7<<<<:<<<<;<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:9:648:712 147 chr2 358 99 35M = 182 -211 TACATTGCAAGACAGACTTCATCAAGATATGTAGT *;0;;;95<<<<7<<<;;<<<;;<<<<;<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1184:994 163 chr2 358 99 35M = 518 195 TACATTGCAAGACAGACTTCATCAAGATATGTAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<8< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:50:30:15 147 chr2 358 10 35M = 192 -201 TACATTGCAAGACAGTCGTCAGCAAGATATGTAGT 1-%-22&&)&11,&/&&176<&<<<222<,6,<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:26 H0:i:0 H1:i:0
--EAS51_66:4:322:350:374 163 chr2 360 99 35M = 546 221 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:41:745:603 163 chr2 360 99 35M = 536 211 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <<<<<<<<<<<<:<<<<<<<<<<<<<<<6<:8<<: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:138:186:459 163 chr2 360 97 35M = 518 193 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA <*<<7<<0<7<<+<-:<<&<:6:4:0-:<<2.:5< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:41:1308:619 83 chr2 360 99 35M = 184 -211 CATTGCAAGACAGACTTCATCAAGATATGTAGTCA 0<9476<<<<<0<<<2<&<0<.<<<<<<<<<.<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:125:884:276 163 chr2 362 99 35M = 541 214 TTGCAAGACAGACTTCATCAAGATATGTAGTCATC <<<<<<<<<<<8<<<<<<<<<<<<<<<<<<;;<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:156:21:69 83 chr2 362 99 35M = 163 -234 TTGCAAGACAGACTTCATCAAGATATGTAGTCATC <:3:<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:66:1381:181 163 chr2 362 99 40M = 544 222 TTGCAAGACAGACTTCATCAAGATATGTAGTCATCAGACT <<6<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<::4:7 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:11:1261:1200 163 chr2 362 99 35M = 558 231 TTGCAAGACAGACTTCATCAAGTTATGTAGTCATC <<<<<<<<<<<;<<<<<<<<;<<<;<:<<8<<:<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_99:5:191:885:623 163 chr2 363 99 35M = 551 223 TGCAAGACAGACTTCATCAAGATATGTAGTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:53:783:78 99 chr2 363 99 35M = 561 233 TGCAAGACAGACTTCATCAAGATATGTAGTCATCA <<<<<<<<<<<<<<<<<<<<<<<<<;<<;<7;<:; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:177:24:389 83 chr2 365 99 35M = 175 -225 CAAGACAGACTTCATCAAGATATGTAGTCATCAGA +<<;<9<<<9<<;<<7<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:58:684:520 99 chr2 367 99 35M = 538 206 AGACAGACTTCATCAAGATATGTAGTCATCAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:71:187:824 99 chr2 367 99 35M = 534 202 AGACAGACTTCATCAAGATATGTAGTCATCAGACT ;===;======3==;==========4=;=7;;3;6 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:324:238:736 83 chr2 367 99 35M = 180 -222 AGACAGACTTCATCAAGATATGTAGTCATCAGACT <<<9<<<70,<<4<<<<<7<4<7<<<<<0<<<<<7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:19:306:982 99 chr2 368 99 35M = 538 205 GACAGACTTCATCAAGATATGTAGTCATCAGACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:168:829:88 83 chr2 369 99 35M = 205 -199 ACAGACTTCATCAAGATATGTAGTCATCAGACTAT <,,;<838883;;;<<<<<;<8<8;<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:122:589:134 163 chr2 369 99 35M = 562 228 ACAGACTTCATCAAGATATGTAGTCATCAGACTAT <<:<<:<:<<<<<:<8<<<<<<<:<::<<<4:<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:303:970:243 163 chr2 370 99 35M = 564 229 CAGACTTCATCAAGATATGTAGTCATCAGACTATC <<<<<<<<<<<<<<<<<<<<;;<<<<<<<<<8<8< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:2:19:736:559 147 chr2 370 99 35M = 209 -196 AAGACTTCATCAAGATATGTAGTCATCAGACTATC )<7<2;;4<<4<<<<;<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS51_66:3:246:711:981 99 chr2 371 99 35M = 559 223 AGACTTCATCAAGATATGTAGTCATCAGACTATCT <<<<<<<<;<<<<:;<<;;<:<<<4<<:4;00<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:89:1164:573 99 chr2 371 99 35M = 560 224 AGACTTCATCAAGAGATGTAGTCATCAGACTATCT <:<<;<2<<<<<<<&:2<;<;<<<<;,+;:<<4:< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS220_1:8:18:1757:95 147 chr2 374 45 35M = 216 -193 CTTCATCAAGATATGTAGTCATCAGACTATCTAAA <<<6<&:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:284:597:682 99 chr2 375 99 35M = 557 217 TTCATCAAGATATGTAGTCATCAGACTATCTAAAG <<<<<<<9<<<<<;<<6<<<<<;<9<<<<<<1;;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:10:394:392 99 chr2 376 99 35M = 542 201 TCATCAAGATATGTAGTCATCAGACTATCTAAATT <<<<<<<<<<<<<<<<<<<:<<<<<<;<<;;:6&; MF:i:18 Aq:i:68 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_97:5:28:538:148 163 chr2 376 99 35M = 557 216 TCATCAAGATATGTAGTCATCAGACTATCTAAAGT <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<+771; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:60:590:1760 147 chr2 376 99 35M = 201 -210 TCATCAAGATATGTAGTCATCAGACTATCTAAAGT <8<-<<<<<<<82<<<4<<<<<<<<<<<<<8<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:73:1158:535 83 chr2 377 99 40M = 213 -204 AATAAAGATATGTAGTCATCAGACTATCTAAAGTCAACAT +;6+;<;<<<<<<<<<0<<;<<<;<<<8<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:2 UQ:i:20 H0:i:1 H1:i:0
--EAS188_7:3:182:104:921 99 chr2 378 99 35M = 575 232 ATCAAGATATGTAGTCATCAGACTATCTAAAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:160:173:889 83 chr2 379 99 35M = 215 -199 TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA ;)<</<8<<<<<<</<;<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:71:311:202 83 chr2 379 99 35M = 188 -226 TCAAGATATGTAGTCATCAGACTATCTAAAGTCAA ;6<;<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:315:201:673 163 chr2 381 45 36M = 542 197 AAGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<<<<:; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:228:915:631 163 chr2 381 66 35M = 547 201 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA =================;==========4====== MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:228:736:747 163 chr2 381 68 35M = 542 196 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA <<<<<<<<<;<<<<<<<;;<<;<<<<;::<;;7;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:263:689:572 99 chr2 381 68 35M = 553 207 AAGATATGTAGTCATCAGACTATCTAAAGTCAACA <<<<;<<<<<;<<<<<<&;;<<<;<<:<+;;7;;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:5:81:685:141 147 chr2 382 85 35M = 207 -210 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT ;+;(;)..=3.1=.7=;=8;==<4====;====== MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS114_32:1:208:971:600 163 chr2 382 99 35M = 559 212 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<8<<:<<<0;44<<:4<:< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:7:1864:1569 99 chr2 382 99 35M = 561 214 AGATATGTAGTCATCAGACTATCTAAAGTCAACAT <<<<<<<<<<<<<<<<<<<<<<<<<<:<<<8<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:224:592:744 147 chr2 383 99 35M = 188 -230 GATATGTAGTCATCAGACTATCTAAAGTCAACATG 6<6<<<<<<9+<6-<<<:<:<:<<<<<:<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:6:25:949:33 147 chr2 383 99 35M = 201 -217 GATATGTAGTCATCAGACTATCTAAAGTCAACATG -<4<666<<-7<5<<<<<(<<<<<<<<<<<<<<-< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS54_73:5:271:874:367 163 chr2 384 99 35M = 560 211 ATATGTAGTCATCAGACTATCTAAAGTCAACATTA <<<<<<<<<<<<<<4<;<;<:<;4<4<<99<7<+% MF:i:18 Aq:i:51 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS139_19:4:26:1312:1400 147 chr2 385 99 40M = 207 -218 TATGTAGTCATCAGACTATCTAAAGTCAACATGAAGGAAA ::77:<;:+6<+<<<;<<74<<<;<<;<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS51_66:6:310:747:415 83 chr2 387 99 35M = 217 -205 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG ;<<<;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--EAS56_57:6:4:223:776 83 chr2 387 93 35M = 203 -219 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGG <;9<;<0<<;<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--EAS114_28:3:32:492:907 99 chr2 387 95 36M = 571 220 TGTAGTCATCAGACTATCTAAAGTCAACATGAAGGA <<<<<<<<<<<<<<<<<<<;<;;<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_26:4:110:840:431 163 chr2 388 93 35M = 567 214 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA =====================5:======54=+3+ MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_45:6:86:693:234 83 chr2 388 82 35M = 202 -221 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA 83997;<;;;;98;;3*6<<;<:8;;;;;<;;<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:3 H1:i:13
--EAS139_11:8:96:1314:1448 83 chr2 388 93 35M = 213 -210 GTAGTCATCAGACTATCTAAAGTCAACATGAAGGA <<<<7<<:<<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:3 H1:i:8
--EAS114_30:6:41:461:436 83 chr2 389 74 35M = 200 -224 TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA ;<986<;6<<<<<<<;<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:13
--EAS221_3:8:55:932:613 163 chr2 389 77 35M = 568 214 TAGTCATCAGACTATCTAAAGTCAACATGAAGGAA <<<<<<<<<<<<<<<<<<<<<8<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:10
--EAS1_97:5:219:174:684 163 chr2 390 71 35M = 560 205 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<8<8<<<7<<;<<<<<2<;&;;;;9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS56_57:5:24:284:360 163 chr2 390 76 35M = 567 212 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<<<<<<<;<<<<<<<;<9;<;99;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS114_26:1:113:367:659 83 chr2 390 72 35M = 222 -203 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<5<0&9;<3<<<<<9<<<<4<;<9<9<<<<7<3< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:3 H1:i:17
--EAS114_32:5:109:199:592 163 chr2 390 72 35M = 576 221 AGTCATCAGACTATCTAAAGTCAACATGAAGGAAA <<<<<<<<<<<;:<;;<<:;6<<;:;:<<+;;;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS114_45:4:88:55:1187 147 chr2 391 66 35M = 220 -206 GTCATCAGACTATCTAAAGTCAACATGAAGGAAAA 7769,7;;;;;;;;;;;;;;9;;;;;;;;;;;;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:2 H1:i:7
--EAS56_59:2:60:677:921 147 chr2 393 96 35M = 250 -178 CATCAGACTATCTAAAGTCAACATGAAGGAAAAAA ========9==;======8==>============= MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:4 H1:i:13
--EAS114_39:3:88:84:1558 147 chr2 394 95 35M = 203 -226 ATCAGACTATCTAAAGTCAACATGAAGGAAAAAAA ;;<<;<<;<<5<<<<<<;<<:<<<;<<<<<<;<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:2 H1:i:3
--EAS56_59:2:201:768:529 83 chr2 396 99 35M = 225 -206 CAGACTATCTAAAGTCAACATGAAGGAAAAAAATT 3<:<9<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:13:100:876 83 chr2 397 73 36M = 223 -210 AGAATATATAAAGTCAACATGAAGGAAAAAAATTCT ;9<$<<<$<<<<<<<<75<<<<<<<9<9<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:6 H0:i:1 H1:i:1
--EAS139_11:4:26:137:1382 99 chr2 397 99 35M = 579 217 AGACTATCTAAAGTCAACATGAAGGAAAAAAATTC <<<<<<7<<<77<<<<<<</<<+<<<<<<7<+<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_67:3:197:261:624 99 chr2 398 99 35M = 587 224 GACTATCTAAAGTCAACATGAAGGAAAAAAATTCT <<<<<<<<<<<;<<<<<<<;<<;<<<<<<;<<<9< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS218_4:3:41:1281:1785 147 chr2 399 99 35M = 237 -197 ACTATCTAAAGTCAACATGAAGGAAAAAAATTCTA <6<<<6<<<<<<:<<6<:<<<<<<<<<<<<6<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_610:5:51:904:391 83 chr2 401 97 35M = 212 -224 TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA ;<96<<<<<<7<<7<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_63:7:137:139:248 163 chr2 401 97 35M = 569 203 TATCTAAAGTCAACATGAAGGAAAAAAATTCTAAA <<<<<<<<<9<<<<<<<<<<;<<<<<<<;;<;<;< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:3 H1:i:2
--B7_610:7:15:696:693 163 chr2 403 34 35M = 570 202 TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT 2:+:7<<3<<<<<6+36<<<<<<<6<<6&<<;<.7 MF:i:18 Aq:i:10 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS114_45:2:41:199:388 147 chr2 403 99 35M = 243 -195 TCTAAAGTCAACATGAAGGAAAAAAATTCTAAAAT 84898;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:163:611:211 83 chr2 405 99 35M = 234 -206 TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA <<<<9<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:114:19:769 163 chr2 405 90 35M = 572 202 TAAAGTCAACATGAAGGAAAAAAATTCTAAAATCA <<<<<*2;6;<<<4.;;<&;;<.<40)<);5-/7; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS51_64:7:92:493:891 147 chr2 408 99 35M = 240 -203 AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA <383<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:5:996:2000 163 chr2 408 99 35M = 575 202 AGTCAACATGAAGGAAAAAAATTCTAAAATCAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_93:1:179:629:513 83 chr2 409 99 35M = 220 -224 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA <;,<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:84:1505:1037 99 chr2 409 99 35M = 586 212 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA <<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<::) MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS221_1:6:96:491:1891 83 chr2 409 99 35M = 253 -191 GTCAACATGAAGGAAAAAAATTCTAAAATCAGCAA :;5<<7<;:<<;<<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:307:481:625 147 chr2 410 99 36M = 245 -201 TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA ;4<<4<;;<<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--B7_610:5:120:596:847 83 chr2 410 83 35M = 211 -234 TCAACATGAAGGAAAAAAATTCTAAAATCAGCAAG ;/<<:<;<<<<<<<<<<<<<;;<<<<<;<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:3:3:864:1888 99 chr2 411 99 35M = 579 203 CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA ;<<;;<<;;;<;;<<;<;<<;<<;8<<:<;79799 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:34:1614:558 99 chr2 411 99 35M = 569 193 CAACATGAAGGAAAAAAATTCTAAAATCAGCAAGA <<<<<<<<<<<7<<<<<8<<<<<<2<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:5:117:570:971 83 chr2 413 99 35M = 223 -225 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <,<9<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS112_34:8:45:800:733 163 chr2 413 99 35M = 607 229 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <<<</<<<<<<<<<<<<<<<2<9<<<<<5*5;599 MF:i:18 Aq:i:34 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS219_FC30151:7:87:1289:83 163 chr2 413 99 35M = 585 207 ACATGAAGGAAAAAAATTCTAAAATCAGCAAGAGA <<<<<<<<<<<<<<<<<<<<<;<<<<<;<<<<<<: MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:4:58:271:612 147 chr2 415 99 35M = 236 -214 ATGAAGGAAAAAAATTCTAAAATCAGCAAGAGCAA ;:2=<<;<<<<<<:67:<<:<<<<<<<<<<<<,<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:11 H0:i:0 H1:i:2
--EAS1_108:1:33:779:821 163 chr2 416 99 35M = 579 198 TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS112_34:6:75:615:555 147 chr2 416 99 35M = 255 -196 TGAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAA ;<<<;<<<<<<<<<:;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS188_7:6:11:994:584 147 chr2 417 97 35M = 226 -226 GAAGGAAAAAAATTCTAAAATCAGCAAGAGAAAAG <<<<;<<<<<<<;<:<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS114_26:7:218:858:445 147 chr2 421 99 35M = 239 -217 GAAAAAAATTCTAAAATCAGCAAGAGAAAAGCATA ;<<<<<<<8;:<<<<<<;<<:<<<<<<<<<<<<;< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_81:2:317:72:221 83 chr2 422 99 35M = 270 -187 AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC =========:======;==;=============== MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:70:766:2016 163 chr2 422 99 35M = 607 220 AAAAAAATTCTAAAATCAGCAAGAGAAAAGCATAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS56_53:4:45:707:147 83 chr2 424 99 35M = 216 -243 AAAAATTCTAAAATCAGCAAGAGAAAAGCATACAG <<<<<<;3<<<<<4;<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:16:1343:1621 147 chr2 426 99 35M = 248 -213 AAATTCTAAAATCAGCAAGAGAAAAGCATACAGTC ;<<9;7=====;;==<==================< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:184:912:258 99 chr2 428 99 35M = 582 189 ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:119:38:945 147 chr2 428 99 35M = 221 -242 ATTCTAAAATCAGCAAGAGAAAAGCATACAGTCAT =;;8=====:========<================ MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:95:235:746 163 chr2 430 99 35M = 598 203 TCTAAAATCAGCAAGAGAAAAGCATACAGACATCT <<<<;<<<<<<<<79<<<<<<<<<<<<<<*;;;<9 MF:i:18 Aq:i:72 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS1_99:2:188:782:483 83 chr2 431 99 35M = 277 -189 CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA 7<<<<<<4<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:39:348:594 163 chr2 431 99 35M = 600 204 CTAAAATCAGCAAGAGAAAAGCATACAGTCATCTA <<;<<<<<<<<<;<;;<<<<<<<<<<;<<<:<:<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:176:971:874 83 chr2 432 76 9M1D26M = 273 -195 TAAAATCAGAAGAGAAAAGCATACAGTCATCTATA <<<<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:3:14:697:541 147 chr2 432 99 35M = 259 -208 TAAAAGCAGCAAGAGAAAAGCATACAGTCATCTAT 8<<<<&6<;8<<<<<<<<<<<<;<<<<;<<<<<<8 MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--B7_610:7:177:469:800 147 chr2 433 99 35M = 259 -209 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA =<<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:131:518:588 163 chr2 433 99 35M = 607 209 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<1<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:8:6:237:885 147 chr2 433 99 35M = 269 -199 AAAATCAGCAAGAGAAAAGCATACAGTCATCTATA <<<<1:<;:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:134:126:465 147 chr2 434 99 35M = 245 -224 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA <<;:&<3)<<7<:<<<<.:<<<<<8<<<<<<<<<< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:104:402:732 163 chr2 434 99 35M = 610 211 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA =========================7=;===;=:= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:65:85:1547 83 chr2 434 99 35M = 257 -212 AAATCAGCAAGAGAAAAGCATACAGTCATCTATAA <<<<<<;:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:2:85:686:696 163 chr2 435 99 35M = 594 193 AATCAGCAAGAGAAAAGCATACAGTCATCTATAAA ==================<=====:==<=<;=:== MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:144:242:602 163 chr2 436 99 36M = 611 211 ATCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG ========================;=====<;;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:204:737:61 83 chr2 437 99 35M = 247 -225 TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG (7=72=;==2=====<===<<============== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:124:253:889 163 chr2 437 99 35M = 598 196 TCAGCAAGAGAAAAGCATACAGTCATCTATAAAGG <<<<<<6<<:<<<<<<<<<<<<<;;<<;<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:310:155:312 163 chr2 438 99 35M = 606 203 CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA ;<<<;<<<8<<<<<<<<<<<<;<<<<<8<<<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:78:692:671 99 chr2 438 99 35M = 610 207 CAGCAAGAGAAAAGCATACAGTCATCTATAAAGGA <<<<<<<<<<<<<;<<<<<<<:<<:<<<:8<<0;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:130:260:553 147 chr2 439 99 35M = 250 -224 AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA <*;<<7<);<<;9;<5<*<9<;<<;;<7<<<<<1< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:60:163:1612 163 chr2 439 99 35M = 617 213 AGCAAGAGAAAAGCATACAGTCATCTATAAAGGAA <<<<<<<<<21<<<<<<<<<3<--<+<<<+<<63< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:106:595:322 83 chr2 440 99 35M = 274 -201 GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA ;+<<<<<<<<<<<<<<<<<<;<<7<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:211:84:84 147 chr2 440 99 35M = 268 -207 GCAAGAGAAAAGCATACAGTCATCTATAAAGGAAA 6:<<:<<<<<<9<<<<<<<<<<<;<<<;;;<;<3; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:280:662:939 147 chr2 442 99 35M = 294 -183 AAGAGAAAAGCATACAGTCATCTATAAAGGAAATC <<;<;<<<<<:<<<;<<<;<<;<<<<<<<<<<<;< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:52:751:360 83 chr2 443 99 35M = 263 -215 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC <-<9<<<<<6<<<8<<;;<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:234:167:381 163 chr2 443 99 35M = 625 217 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC <<<<<<<<<<<<<<<<<<<<<<<<<;<<<;;7<;; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:37:156:134 83 chr2 443 99 35M = 261 -217 AGAGAAAAGCATACAGTCATCTATAAAGGAAATCC 99998<<<<:<<<<<<<;<<><<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:93:490:901 83 chr2 445 99 35M = 280 -200 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<;<<<;<<<;<<;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:96:489:453 99 chr2 445 99 35M = 625 215 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:46:13:880 147 chr2 445 99 35M = 290 -190 AGAAAAGCATACAGTCATCTATAAAGGAAATCCCA =&====8==========0================= MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:167:905:852 163 chr2 445 99 36M = 647 238 AGAAAAGCATACAGTCATCTATAAAGAAAATCCCAT <<<7<<<<<<<<<<<<<<:<:<<:::&.<:<66:3< MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS219_FC30151:3:13:674:1717 163 chr2 445 99 35M = 623 213 AGAAAAGCATGCAGTCATCTATAAAGGAAATCCCA <<<<<<<<<<%<<<<<<<<<<<<<<<<<<<;:;;; MF:i:18 Aq:i:45 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS51_62:7:196:511:896 83 chr2 446 99 35M = 283 -198 GAAAAGCATACAGTCATCTATAAAGGAAATCCCAT 8<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:154:118:488 163 chr2 447 99 35M = 624 212 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<<<<<<<<<<<<<<:7<<<<7<:;;:: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:44:153:969 83 chr2 447 95 35M = 245 -237 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<5<:7<72<51<7<*79<<<<<5<<<<<<<<<2< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:215:246:640 99 chr2 447 99 36M = 624 213 AAAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<9<;<<<<<<<<<<9;<<<<<<3;<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:94:1655:1921 147 chr2 447 85 35M = 258 -224 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<;:===<==;<==<;================; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:60:1037:1146 147 chr2 447 99 35M = 250 -232 AAAAGCATACAGTCATCTATAAAGGAAATCCCATC <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:1:23:536:229 99 chr2 448 99 35M = 614 201 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<:<8<:<<;<<<<<<7<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:130:865:838 163 chr2 448 99 35M = 649 236 AAAGCATACAGTCATCTATAAAGGAAATCCCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:<;3 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:239:1001:406 99 chr2 450 99 35M = 634 219 AGCATACAGTCATCTATAAAGGAAATCCCATCAGA <<<<<<7<<<<<<<<8<;<<<7<<<<36<<3<:33 MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:3:147:423:584 147 chr2 451 99 35M = 277 -209 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA 27<;<3<<<+<<;<<<;;-4<<<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:187:715:521 83 chr2 451 99 35M = 291 -195 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <7<:<9<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:172:196:746 99 chr2 451 99 35M = 620 204 GCATACAGTCATCTATAAAGGAAATCCCATCAGAA <<<<<<<<9<<<<9<<<<<<<<<;<<<<6<<<<;< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:267:821:860 83 chr2 451 99 34M = 296 -189 GCATACAGTCATCTATAAAGGAAATCCCATCAGA $&<<<.<:;6<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS56_61:7:7:682:201 83 chr2 452 99 35M = 288 -199 CATACAGTCATCTATAAAGGAAATCCCATCAGAAT 0:8;5<8<1:78<<<<<<<<<<<<:8<<2<<<<:< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:82:13:897 163 chr2 453 99 35M = 606 188 ATACAGTCATCTATAAAGGAAATCCCAGCAGAATA <<<<;<<<<<<;<;<;5<51;<1<<<<%<<<<,58 MF:i:18 Aq:i:41 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS56_53:6:180:695:621 99 chr2 453 99 35M = 637 219 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:158:909:321 83 chr2 453 99 35M = 271 -217 ATACAGTCATCTATAAAGGAAATCCCATCAGAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:237:497:165 99 chr2 454 99 35M = 619 200 TACAGTCATCTATAAAGGAAATCCCATCAGAATAA 8===<8===========37=<===7=;7=8===== MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:152:355:962 83 chr2 456 99 35M = 269 -222 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<.9.<;+;<;<<<<<<<<<<::<<:<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:4:255:549:422 83 chr2 456 99 35M = 295 -196 AAGTCATCTATAAAGGAAATCCCATCAGAATAACA &<;;+<;4;<<<<<<<<<<<;<;<<;<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:2
--EAS220_1:4:100:20:1199 163 chr2 456 99 35M = 614 193 CAGTCATCTATAAAGGAAATCCCATCAGAATAACA 7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:71:408:741 163 chr2 457 99 35M = 637 215 AGTCATCTATAAAGGAAATCCCATCAGAATAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:285:395:450 147 chr2 458 99 35M = 269 -224 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT 8)3<8+;<)<<<<<<<<97:7<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:4:854:140 99 chr2 458 72 35M = 638 215 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<6<<<:<6<<<:36:<<<<3<<8:.6<38::4< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:227:657:95 147 chr2 458 99 35M = 280 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT ;3;<);<<<<<<<<<<<<18<<<<<<<<<<<<<<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:57:324:546 83 chr2 458 99 36M = 281 -213 GTCATCTATAAAGGAAATCCCATCAGAATAACAATG ;;5<;,<<<;;<<<<<<<97<<<<<<<<<<9<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:26:274:1078 83 chr2 458 99 40M = 282 -216 GTCATCTATAAAGGAAATCCCATCAGAATAACAATGGGCT 9:*:64<<;<<<<<<<<<;8;<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:636:642 163 chr2 458 99 35M = 630 207 GTCATCTATAAAGGAAATCCCATCAGAATAACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:226:869:36 147 chr2 461 99 35M = 273 -223 ATATATAAAGGAAATCCCATCAGAATAACAATGGG <0/)</<<<:<<<<<)<<7<<<<<+55<<1<<<:< MF:i:18 Aq:i:59 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS192_3:4:312:915:751 99 chr2 461 99 35M = 621 195 ATCTATAAAGGAAATCCCATCAGAATAACAATGGG <2<<<<<<<8;<<<<<<<<:<<<<8<<<<<84,4: MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:96:899:106 99 chr2 462 99 35M = 636 209 TCTATAAAGGAAATCCCATCAGAATAACAATGGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:62:969:12 147 chr2 464 99 35M = 303 -196 TATAAAGGAAATCCCATCAGAATAACAATGGGCTT <<;<;<::<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:67:56:806 99 chr2 464 99 35M = 637 208 TATAAAGGAAATCCCATCAGAATAACAATGGGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<:7: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:37:611:267 99 chr2 464 99 35M = 610 181 TATAAAGGAAATCCCATAAGAATAACAATGGGCTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_93:7:319:280:57 147 chr2 467 99 35M = 306 -196 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:96:720:940 163 chr2 467 99 35M = 654 222 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<;<<<<<<<<<<;9<<8<<6<;:;<;;.;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:59:286:290 99 chr2 467 99 35M = 628 196 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<<;<<<;<<<<<<<<<<<<<;;;<<;7;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:236:841:20 163 chr2 467 99 35M = 652 220 AAAGGAAATCCCATCAGAATAACAATGGGCTTCTC <<<<<<<<<<<<<<<<<7<<<<:<<9<<<<;<:<9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:49:656:507 99 chr2 468 99 35M = 637 204 AAGGAAATCCCATCAGAATAACAATGGGCTTCTCA <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:78:1314:1275 147 chr2 469 99 35M = 277 -227 AGGAAATCCCATCAGAATAACAATGGGCTTCTCAG <<<<<<<<6:<<<<<<<<<<<<<<<<<<<<<<<1< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:6:181:392:500 147 chr2 470 99 35M = 299 -206 GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC /5<<;(88<<<;<;<<6<<<<<7<<<<<<<7<<<< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:133:8:379 163 chr2 470 99 35M = 653 218 GGAAATCCCATCAGAATAACAATGGGCTTCTCAGC <<<<<<<<<<<<<<<<<<<<<<<<8;<<8<<<:6< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:198:929:684 163 chr2 471 99 35M = 624 188 GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA <7<<<<;<<<<<<<<<<<<;<<<<<:<<<<::<:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:181:582:435 99 chr2 471 99 35M = 629 193 GAAATCCCATCAGAATAACAATGGGCTTCTCAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:214:784:690 99 chr2 472 99 35M = 657 220 AAATCCCATCAGAATAACAATGGGCTTCTCAGCGG <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<4<44 MF:i:18 Aq:i:30 NM:i:1 UQ:i:19 H0:i:1 H1:i:0
--EAS114_39:3:11:1238:1728 83 chr2 475 99 35M = 310 -200 TCCCATCAGAATAACAATGGGCTTCTCAGCGGAAA :677<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS112_34:4:12:273:89 163 chr2 477 99 35M = 631 189 CCATCAGAATAACAATGGGCTTCTCAGCGGAAACC ==========<====:=========+===4414;; MF:i:18 Aq:i:71 NM:i:1 UQ:i:28 H0:i:1 H1:i:0
--EAS56_63:2:119:161:322 147 chr2 479 99 35M = 297 -217 ATCAGAATAACAATGGGCTTCTCAGCAGAAACCTT <83<;<<;<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:2:111:142:21 83 chr2 479 99 35M = 304 -210 ATCAGAATAACAATGGGCTTCACAGCGGAAACCTT ;88<:<;;<6<;;<<<:<<<<;<<<<<<<<;<<<< MF:i:18 Aq:i:28 NM:i:2 UQ:i:53 H0:i:0 H1:i:0
--EAS1_99:1:34:649:318 83 chr2 481 65 35M = 328 -188 AAGAATAACAATGGGCTTCACAGCGGAACCCTTAC )<7<<3<<<<<<+<1<;<8&<<<<<<<<<<<<<<< MF:i:130 Aq:i:65 NM:i:3 UQ:i:59 H0:i:0 H1:i:0
--EAS114_30:6:214:565:337 147 chr2 481 99 35M = 326 -190 CAGAATAACAATGGGCTTCTCAGCAGAAACCTTAC ;;<;<1<9<<<8<<<<<;<<<<<<8<<<;<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:226:370:91 147 chr2 482 99 35M = 335 -182 AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA <':<6<;<<<;2<;<-7;;;<<<<<<<;;;<<7;< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS139_11:6:13:682:680 99 chr2 482 99 35M = 685 238 AGAATAACAATGGGCTTCTCAGCGGAAACCTTACA <<<<<<<<<<<<<:<<<<<<<<<<;<;<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_593:2:273:348:37 163 chr2 483 99 36M = 688 241 GAATAACAATGGGCTTCTCAGCAGAAACCTTACACG <<<<<<<9<49<<<;<<<<*<<19<15;<</5<;.5 MF:i:18 Aq:i:41 NM:i:1 UQ:i:13 H0:i:1 H1:i:0
--EAS139_11:8:76:205:587 83 chr2 483 99 35M = 306 -212 GAATAACAATGGGCTTCTCAGCGGAAACCTTACGA 8<<5<<<<<<<<<<<<<<<<<<<<<<<<<7<<</< MF:i:18 Aq:i:28 NM:i:2 UQ:i:41 H0:i:0 H1:i:0
--B7_591:2:27:280:592 147 chr2 484 99 36M = 310 -210 AATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC <<<<<<<<<<<8<<<<<<<<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_99:7:171:196:287 163 chr2 485 99 35M = 658 208 ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC <<<<<<<<<<<<<<<<<<<<<;6<<<<<<2:8<0: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:224:579:433 163 chr2 485 99 35M = 662 212 ATAACAATGGGCTTCTCAGCAGAAACCTTACAAGC <<<<<<<<<<<<<<<<<:<<<<<<<<<<<8<+8;: MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:22:490:2011 147 chr2 485 99 35M = 307 -213 ATAACAATGGGCTTCTCAGCGGAAACCTTACAAGC <7<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_65:6:46:173:214 83 chr2 487 99 35M = 308 -214 AACAATGGGCTTCTCAGCAGAAACCTTACAAGCCA <<2<<<<<<<<<<<5<<5<7<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:4 H1:i:6
--EAS1_103:4:164:79:134 99 chr2 488 99 35M = 656 203 ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_32:2:283:577:398 147 chr2 488 99 35M = 308 -215 ACAATGGGCTTCTCAGCGGAAACCTTACAAGCCAG ;8;;&<<<;<;67<;<;<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:29 NM:i:1 UQ:i:27 H0:i:0 H1:i:2
--EAS54_67:5:149:639:910 163 chr2 489 99 35M = 669 215 CAATGGGCTTCTCAGCAGAAACCTTACAAGCCAGA <<<<<<<<<<<<<<<<<<<<<<<<7<;;<<;<<;< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:250:628:423 83 chr2 489 99 36M = 295 -230 CAATGGGCTTCTCAGCGGAAACCTTACAAGCCAGAA +<<4;;9;;7.;7<;7<;<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:1:242:419:512 163 chr2 490 94 35M = 672 217 AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA <<8<<<<<<<<<<<<<<<<<<<<<<<<;<8<(<30 MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_45:1:95:1530:28 83 chr2 490 74 35M = 332 -193 AATGGGCTTCTCAGCAGAAACCTTACAAGCCAGAA 77741(9;;994;5;;4;;1;;;;;1;<;<<<<;< MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:42 H1:i:45
--EAS192_3:6:326:887:180 163 chr2 492 73 35M = 672 215 TGGGCTTCTCAGCAGAAACCTTACAAGCCAGAAGC ;<<<<<;<<<<<<<<<8<<<<<<<<<<<<0<;;<+ MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:3 H1:i:7
--EAS1_99:1:86:871:319 99 chr2 494 71 35M = 651 192 GGCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGA <<<<<:<<<:<:<<<<<<<<<<<<8<<:<1;<::) MF:i:18 Aq:i:0 NM:i:1 UQ:i:25 H0:i:0 H1:i:4
--EAS56_57:1:189:130:136 147 chr2 494 79 35M = 314 -215 GGCTTCTCAGCAGAAACCTTACAAGCCAGAAGAGA 823;23<7<57<7<<<<<;<<;<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:63 H1:i:85
--EAS51_64:7:140:752:822 99 chr2 495 76 35M = 667 207 GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT <<<<<<<<<<<<<<<<<7<<<<<<<<<<<<<;<:; MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:5
--EAS56_57:5:53:544:889 147 chr2 495 76 35M = 335 -195 GCTTCTCAGCGGAAACCTTACAAGCCAGAAGAGAT ,<;<<<;<<<<<<<<<:;;<<<<<;;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:2 H1:i:32
--EAS54_65:4:61:346:384 83 chr2 496 68 35M = 324 -207 CAACTAAGAAGAAACCTTACAAGCCAGAAGAGATT 7&$+&,<<+;;<;;<<6<<8<<<;<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:19 H0:i:1 H1:i:53
--EAS54_81:8:177:800:714 83 chr2 497 76 35M = 324 -208 TTCTCAGCAGAAACCTTACAAGCCAGAAGAGATTG =;3=+=<:=<========8================ MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:29 H1:i:85
--B7_597:6:20:592:496 83 chr2 498 75 35M = 338 -195 TCTCAGCGGAAACCTTACAAGCCAGAAGAGATTGG 97<7;<;<;<<<<;<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:5 H1:i:48
--B7_591:5:243:557:560 83 chr2 499 75 36M = 331 -204 CTAAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT 69&<;&<&<<;6.<<<+<<<;;<<<<<<<<;<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:9
--EAS188_7:5:163:982:695 147 chr2 499 77 35M = 339 -195 CTCAGCAGAAACCTTACAAGCCAGAAGAGATTGGA <:<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:7 H1:i:42
--EAS139_19:1:1:1598:843 83 chr2 500 99 40M = 347 -193 TCAGCGGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT 1)::6::<<;<98<<<<<<9<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:25 H0:i:1 H1:i:0
--EAS139_19:6:78:1029:512 163 chr2 500 99 40M = 656 196 TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT <0:;<<<<<<<<<:<<:;<<<;<7<<;<7;;;:6;::672 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:14:1872:1521 83 chr2 500 62 35M = 339 -196 TCATCAAAAACCTTACAAGCCAGAAGAGATTGGAT /1<%73&7<1<3577,<<<7/733<<<<<<<<1<< MF:i:18 Aq:i:2 NM:i:2 UQ:i:9 H0:i:1 H1:i:8
--EAS221_3:6:51:1486:1131 163 chr2 500 77 35M = 685 220 TCAGCAGAAACCTTACAAGCCAGAAGAGATTGGAT <<<<<<<<<;<<<<<<<<<1<5<<8<<<'<;<<;1 MF:i:18 Aq:i:3 NM:i:0 UQ:i:0 H0:i:22 H1:i:22
--EAS192_3:6:45:183:25 163 chr2 501 95 35M = 672 206 CAGCGGAAACCTTACAAGCCAGAAGAGATTGGATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<86;<;:; MF:i:18 Aq:i:23 NM:i:1 UQ:i:27 H0:i:0 H1:i:2
--B7_597:4:38:999:463 147 chr2 503 39 35M = 317 -221 GCGGAAACCTTACAAGCCAGAAGAGATTGGATCTA .*:&<<0<0!<<+<<<<<<<<<<<<<0<<<<<<<< MF:i:18 Aq:i:39 NM:i:2 UQ:i:25 H0:i:0 H1:i:1
--EAS114_45:1:30:1882:1210 163 chr2 503 82 35M = 665 197 GCAGAAACCTTACAAGCCAGAAGAGATTGGATCTA ;;::;;;;:;;;;;:;;;;;;9;;:7;;8:77777 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_108:6:222:579:961 163 chr2 504 99 35M = 679 210 CAGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<<<<<<<7<<:7;;;68 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:92:875:345 163 chr2 504 99 35M = 690 221 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_63:8:62:125:888 83 chr2 504 99 35M = 347 -192 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA ,;3<<<8;;3<,<<<8;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--EAS221_1:2:23:127:880 99 chr2 504 99 35M = 686 217 CGGAAACCTTACAAGCCAGAAGAGATTGGATCTAA <<<<<<<<<<<<<<<<<<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_66:8:43:972:506 163 chr2 505 99 35M = 686 216 AGAAACCTTACAAGCCAGAAGAGATTGGATCTAAT <;<<<<<<<<<<<<6;<;<<<<<<<<<<:;;<;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:183:697:555 83 chr2 505 84 35M = 341 -199 AGAAATCTTAGAAGCCAGAAGAGATTGGATCTAAT <<<;&,.;);&96<84<<81<<&<<<9<<8<8<<1 MF:i:18 Aq:i:37 NM:i:2 UQ:i:16 H0:i:0 H1:i:1
--EAS221_3:8:65:463:703 99 chr2 506 99 35M = 693 222 GAAACCTTACAAGCCAGAAGAGATTGGATCTAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:101:752:996 163 chr2 508 99 35M = 687 214 AACCTTACAAGCCAGAAGAGATTGGATCTAATTTT <<<<<<<<<<<<<<<;<<<<<9<<<<<<;<<;;;; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:267:953:459 99 chr2 509 99 35M = 667 193 ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT <<<<<<<<<9<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:33:1240:846 99 chr2 509 99 35M = 685 211 ACCTTACAAGCCAGAAGAGATTGGATCTAATTTTT <<<<<<<<<<<<7<<2<;<<;<<<;<<<:6:<<<: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:135:401:735 99 chr2 510 99 35M = 703 228 CCTTACAAGCCAGAAGAGATTGGATCTAATTTTTG <<<<<<<<<<<<<<<<<<<<<;<<<<<8<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:3:186:68 99 chr2 512 99 35M = 687 210 TTACAAGCCAGAAGAGATTGGATCTAATTTTTGTA <<<<<<<<<<<<;<<<<<<<<<<<<;;<<<<<&%8 MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_78:7:164:727:977 163 chr2 513 99 35M = 689 211 TACAAGCCAGAAGAGATTGGATCTAATTTTTCGAC <<<<<<<<<<<<<<<<<<<<<<<<<9<<<<;;79; MF:i:18 Aq:i:75 NM:i:1 UQ:i:26 H0:i:1 H1:i:0
--B7_589:1:110:543:934 163 chr2 514 99 35M = 700 221 ACAAGCCAGAAGAGATTGGATCTAATTTTTGGACT <<<<<<<<<<<<;<<<<<;;<<<;;<<<<<,,;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:329:339:408 147 chr2 515 99 36M = 325 -226 CAATCCAGAAGAGATTGGATCTAATTTTTGGACTTC 7<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS56_59:5:325:544:349 163 chr2 515 99 35M = 716 236 CAAGCCAGAAGAGATTGGATCTAATTTTTGGACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<6;;;<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:3:903:957 99 chr2 516 99 35M = 661 180 AAGCCAGAAGAGATTGGATCTAATTTTTGGACTTC <<<<<<<<<<<<<<<<;;<;<;<<<<<<66<;<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:85:361:418 147 chr2 517 99 36M = 353 -200 AGCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT ;;;5<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:138:186:459 83 chr2 518 97 35M = 360 -193 GCCAGAAGAGATTGGAGCTAATTTTTGGACTTCTT +/2/;<:<&7:7</<2&<<<&<<<<<<<<<8<<:3 MF:i:18 Aq:i:37 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_11:4:36:1184:994 83 chr2 518 99 35M = 358 -195 GCCAGAAGAGATTGGATCTAATTTTTGGACTTCTT <84<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:270:430:269 83 chr2 519 99 36M = 331 -224 CCAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA 28<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:295:882:282 163 chr2 520 99 35M = 691 206 CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA ========================<6<======8; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:3:41:739:907 83 chr2 520 99 35M = 344 -211 CAGAAGAGATTGGATCTAATTTTTGGACTTCTTAA ;<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:272:240:950 163 chr2 520 97 35M = 696 211 CAGCAGAGCTTGGATCTAATTTTTGGACTTCTTCA 6<<&:<<<&<::;&7<<<3<;<<;<:;:<8:<<(< MF:i:18 Aq:i:25 NM:i:3 UQ:i:17 H0:i:0 H1:i:0
--EAS54_65:7:155:629:357 83 chr2 521 99 35M = 333 -223 AGAAGAGATTGGATCTAATTTTTGGACTTCTTAAA <<<<<<<<;<<<<<<<<<<<<6<<<<<<<<<;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:14:88:306 147 chr2 521 99 35M = 341 -215 AGAAGAGATTAGATCTAATTTTTGGACTTCTTAAA <1;<;<;<4<&<<<:<<<:<<<<;<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_108:5:115:193:231 163 chr2 522 99 35M = 684 197 GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG <<<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<6<7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:88:1454:418 83 chr2 522 99 35M = 349 -208 GAAGAGATTGGATCTAATTTTTGGACTTCTTAAAG <<<<<<<<<<6<96<<<1911<<<1<<<<<<<<<1 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:36:649:554 83 chr2 523 99 35M = 350 -208 AAGAGATTGGATCTAATTTTTGGACTTCTTAAAGA <<<<<888;<<<;<<<;<;<8<<<<8<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:119:651:88 83 chr2 527 99 35M = 337 -225 GATTGGATCTAATTTTTGGACTTCTTAAAGAAAAA <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:57:826:977 163 chr2 528 99 35M = 693 200 ATTGGATCTAATTTTTGGACTTCTTAAAGAAAAAA <<<<<<<<<<<<<<<<+<<<<<<<<6<9:6<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:285:417:147 99 chr2 529 99 35M = 712 218 TTGGATCTAATTTTTGGACTTCTTAAAGAAAAAAA <<<<<<<<<<<<<<<;8<<<<<<<<<;6<:<;<<; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:160:130:351 99 chr2 530 99 35M = 697 202 TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA <<<<<<<<<<<<<<<;<<<<4<<<<<;<<<:<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:287:665:495 163 chr2 530 99 35M = 702 207 TGGATCTAATTTTTGGACTTCTTAAAGAAAAAAAA ==========================98====8=8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:71:187:824 147 chr2 534 99 35M = 367 -202 TCTAATTTTTGGACTTCTTAAAGAAAAAAAAACCT 0040;<7<<<<0<7<<<;<7*<<<<<7<<771<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:70:445:1289 99 chr2 535 99 35M = 702 202 CTAATTTTTGGACTTCTTAAAGAAAAAAAAACCTG <<<<<<<<<<2<<<<<<<<<<:<<<<<<<;;;;<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:7:41:745:603 83 chr2 536 99 35M = 360 -211 TAATTTTTGGACTTCTTAAAGAAAAAAAAACCTGT ;<<;;<;<8<<<<<<<<<<<;<<;<<<<<<<<<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:197:759:975 163 chr2 537 99 35M = 698 196 AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:140:253:322 99 chr2 537 99 35M = 689 187 AATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTC <<<<<<<<<<<<<;<<<<<<<<<<<<<<<;;;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:58:684:520 147 chr2 538 99 35M = 367 -206 ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA <85;;:<<<7<<7<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:19:306:982 147 chr2 538 99 35M = 368 -205 ATTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCA <<<<<<<<<9<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:273:562:954 99 chr2 539 99 35M = 722 218 TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;:;;;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:78:775:555 99 chr2 539 99 35M = 691 187 TTTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAA 6:<<<<:<<<<6:<<)::8<6<<:<<)<::63832 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:49:330:699 163 chr2 540 99 35M = 722 217 TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAA ==;=================;======5;;;==5= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:329:437:643 147 chr2 540 99 36M = 354 -222 TTTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC 885<8;;<;3,8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:125:884:276 83 chr2 541 99 35M = 362 -214 TTTGGACTTCTTAAAGAAAAAAAAACCTGTCAAAC ,;;3,<7<;7<<===;============;====== MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:4:315:201:673 83 chr2 542 45 36M = 381 -197 TTGGACTTATTAAAGAAAAAAAAACCTGTCAAACAC ;;;;<-;;&;;<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:3:10:394:392 147 chr2 542 99 35M = 376 -201 TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA 28-:;0-<0<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:1:228:736:747 83 chr2 542 68 35M = 381 -196 TTGGACTTCTTAAAGAAAAAAAAACCTGTCAAACA <07<<&<;+<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:267:394:437 163 chr2 544 99 35M = 735 226 GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACG <<<<<<<<<<;<;<<<<<;;<<<<<;<<:;8<;<8 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:66:1381:181 83 chr2 544 99 40M = 362 -222 GGACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT ;;;+;;&<7<<<+<<<<<<<;<;8<<<;<<<<8<<<;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:74:668:424 99 chr2 545 99 40M = 707 202 GACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;::;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:322:350:374 83 chr2 546 99 35M = 360 -221 ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA <+;8&84<<<:<<<<<<<<<<;<<<<<<<;<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:307:208:477 163 chr2 546 99 35M = 710 199 ACTTCTTAAAGAAAAAAAAACCTGTCAAACACGAA <<<<<<<;<<;<<<<<<<<<<<<<<<<;:<<<88; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:228:915:631 83 chr2 547 66 35M = 381 -201 ATTATTAAAGAAAAAAAAACCTGTCAAACACGAAT &-))-*===/=========9====4========== MF:i:18 Aq:i:0 NM:i:2 UQ:i:13 H0:i:1 H1:i:0
--EAS1_93:5:246:177:525 99 chr2 549 98 35M = 738 224 TCTTAAAGAAAAAAAAACCTGTCAAACACGAATGT <<<<<<<<<<<<<<<<<<<<<1<<<<<<;;;<8;; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:93:634:323 99 chr2 550 99 35M = 721 206 CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT <<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<,<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:8:165:441:708 163 chr2 550 99 35M = 737 222 CTTAAAGAAAAAAAAACCTGTCAAACACGAATGTT =<===============================99 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:5:191:885:623 83 chr2 551 99 35M = 363 -223 TTAAAGAAAAAAAAACCTGTCAAACACGAATGTTA 66<<<<<<<<<<<<<2<<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:127:828:697 147 chr2 552 99 35M = 346 -241 TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT ;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:115:249:673 163 chr2 552 99 35M = 743 226 TAAAGAAAAAAAAACCTGTCAAACACGAATGTTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<6< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:263:689:572 147 chr2 553 68 35M = 381 -207 AAAGAAAAAAAAACCTGTCAAACACGAATGTTATG <9<2<<<<<<<<<22;;02<<<9<<;9<9<<;<<3 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:99:1632:76 99 chr2 553 99 40M = 705 192 AAAGAAAAAAAACCCTGTCAAACACGAATGTTATGCCCTG <<<<<<<<<<<<*<<<<8<9<<<<<<<<<9;;;;<18:;: MF:i:18 Aq:i:47 NM:i:1 UQ:i:9 H0:i:0 H1:i:1
--EAS54_71:7:250:698:842 163 chr2 554 99 35M = 753 233 AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<24 MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:41:314:1173 99 chr2 554 99 35M = 718 199 AAGAAAAAAAAACCTGTCAAACACGAATGTTATGC <;<<<<<<<;;<<<<<-<<<;;;<;8<*;;<<<<' MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:189:831:878 83 chr2 555 99 35M = 351 -239 AGAAAAAAAAACCTGTCAAACACGAATGTTATGCC <9<<<<<<<<<<;9<:<<<<<6<<<<<<<;<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:216:47:302 99 chr2 557 99 35M = 729 207 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<<<<7<<<<<<<<<<<<+<<<<<//6;< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:28:538:148 83 chr2 557 99 35M = 376 -216 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<<<7;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:284:597:682 147 chr2 557 99 35M = 375 -217 AAAAAAAAACCTGTCAAACACGAATGTTATGCCCT <<<<<<<<9;;7<;:<<<:<;<<<<<<<<;<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:11:1261:1200 83 chr2 558 99 35M = 362 -231 AAAAAAAACCTGTCAAACACGAATGTTATGCCCTG <<<<<<<:<<6<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:246:711:981 147 chr2 559 99 35M = 371 -223 AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC ;;:;7<<:5:<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:1:208:971:600 83 chr2 559 99 35M = 382 -212 AAAAAAACCTGTCAAACACGAATGTTATGCCCTGC <<<<<<<3*+<4/<<<<7<<<<0<<:<8<<<<0<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:219:174:684 83 chr2 560 71 35M = 390 -205 AAAAAAACTGTCAAACACGAATGTTATGCCCTGCT <<<<:;+9<<<;<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS51_66:7:4:234:610 163 chr2 560 84 35M = 729 204 AAAAAACCTGTCAAACACGAATGTTATGCCCTCCT <<<<<<<<7;<<<;7<7;7;7<;-<-<&<<<0%06 MF:i:18 Aq:i:22 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_73:5:271:874:367 83 chr2 560 99 35M = 384 -211 AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT <<<<<<5;<<<:<<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:2:168:1878 99 chr2 560 37 35M = 743 218 AAAAAACCTGGCAAACACGAATGTTATGACATGTN ;<:;;<:<;<;<;;;;:;<;:::&9:&:68&6&*! MF:i:18 Aq:i:37 NM:i:5 UQ:i:61 H0:i:0 H1:i:1
--EAS221_1:6:89:1164:573 147 chr2 560 99 35M = 371 -224 AAAAAACCTGTCAAACACGAATGTTATGCCCTGCT 3<<<6<%7<<08<<4<3<<103<1<<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:53:783:78 147 chr2 561 99 35M = 363 -233 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <;;;;<<0<,<<<<<<<<<;<<<;<;<<<<;<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:570:902 163 chr2 561 99 35M = 730 204 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <<<<<<<<<<<;4<<:<<44<<<<<<<<<<<4<<+ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:7:1864:1569 147 chr2 561 99 35M = 382 -214 AAAAACCTGTCAAACACGAATGTTATGCCCTGCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:89:942:84 163 chr2 562 74 35M = 759 232 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:122:589:134 83 chr2 562 99 35M = 369 -228 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA ;<;4<<538<<;<<;<<<<';,:<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:77:1529:522 99 chr2 562 99 35M = 722 195 AAAACCTGTCAAACACGAATGTTATGCCCTGCTAA <<;<<<<<<<<<<<4<<4<;;:;2:7<<<2*<;;8 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:48:805:860 99 chr2 563 78 35M = 755 227 AAACCTGTCAAACACGAATGTTATGCCCTGCTAAA <<<<<<<;<<<<<<<41;<<8<<<<<<<8+<4,+; MF:i:18 Aq:i:13 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:144:492:61 99 chr2 564 99 35M = 728 199 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<<;<<<<<<<<<<<;<<<<<<7:<<<<::;9;;6 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:3:303:970:243 83 chr2 564 99 35M = 370 -229 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<0+<<<,<4<:<:<<<<<<<<<<<::<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:78:806:800 163 chr2 564 99 40M = 717 193 AACCTGTCAAACACGAATGTTATGCCCTGCTAAACTAAGC <<<<<<<<<<<<<<<<<<<4<<:<1<0<;<9;<:78:::: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:94:1440:2016 163 chr2 564 99 35M = 751 222 AACCTGTCAAACACGAATGTTATGCCCTGCTAAAC <<<<<<<<<<<<<<<<<<<;<<;;;<<:<8:::75 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:103:443:166 163 chr2 565 99 35M = 747 217 ACCTGTCAAACACGAATGTTATGCCCTGCTAAACT <<<<<<<<<<<<<<<<<<<<;<<<<<<<1<-;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:24:284:360 83 chr2 567 76 35M = 390 -212 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA :;<;:<<<;<<<<<<<<<<<<<<<<<;;<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:3:166:626:836 163 chr2 567 99 35M = 757 225 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA <<<<<<<<<<<<<<<<<<<<9<<<<<<<<;<;;;9 MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:110:840:431 83 chr2 567 93 35M = 388 -214 CTGTCAAACACGAATGTTATGCCCTGCTAAACTAA 77<;7<<<<<<<<<4<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:116:738:142 99 chr2 568 99 35M = 722 189 TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG <<<<<<<<<<<<<<<<<<<;<<<<;<<<<<<<:;2 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:55:932:613 83 chr2 568 77 35M = 389 -214 TGTCAAACACGAATGTTATGCCCTGCTAAACTAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:137:139:248 83 chr2 569 97 35M = 401 -203 GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC ;;;99<<<;<;;<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:34:1614:558 147 chr2 569 99 35M = 411 -193 GTCAAACACGAATGTTATGCCCTGCTAAACTAAGC <<9<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:15:696:693 83 chr2 570 10 35M = 403 -202 TCAAACACGAATGTTAATCCCTGCTAAACTAATCA )6<:7<.7<6.<0&&<&3:&7<<7<0<<<<<<<<< MF:i:18 Aq:i:10 NM:i:3 UQ:i:50 H0:i:0 H1:i:0
--EAS114_28:3:32:492:907 147 chr2 571 95 36M = 387 -220 CAAACACGAATGTTATGCCCTGCTAAACTAAGCATC 8<;<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:1:114:19:769 83 chr2 572 90 35M = 405 -202 AAACACGAATGTTATGCCCTGCTAAACTAAGCATC 5+;+3/6;<+;/8<8*/<7/59<97147<;;9<7< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:182:104:921 147 chr2 575 99 35M = 378 -232 CACGAATGTTATGCCCTGCTAAACTAAGCATCATA ;<;<<<<<<:<<<<<:<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:5:996:2000 83 chr2 575 99 35M = 408 -202 CACGAATGTTATGCCCTGCTAAACTAAGCATCATA <<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:109:199:592 83 chr2 576 72 35M = 390 -221 ACGAATATTATGCCCTGCTAAACTAAGCATCATAA ;9<9<:&:<<<<;;<;;<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS219_1:3:90:219:528 163 chr2 576 75 35M = 758 217 ACGAATGTTATGCCCTGCTAAACTAAGCATCATAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<9 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:94:294:387 163 chr2 578 99 35M = 736 193 GAATGTTATGCCCTGCTAAACTAAGCATCATAAAT <<<<<<<;<<<<<<<<<:<<<<<<<<<<<<;)7;; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:33:779:821 83 chr2 579 99 35M = 416 -198 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG <<730<<<<9<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:5:43:114:617 163 chr2 579 99 35M = 738 194 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG =============;=========;=========== MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:23:944:377 99 chr2 579 75 36M = 757 214 AATGTTATGCCCTGCTAAACTAAGCATCATAAATGA <<<<<<<<9<<<<;<<<<<<<<<;<7<<<<;8;<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:3:864:1888 147 chr2 579 99 35M = 411 -203 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG 888588;;;;;;;;;;;;;;;;;;;;8;;;;;;;; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:26:137:1382 147 chr2 579 99 35M = 397 -217 AATGTTATGCCCTGCTAAACTAAGCATCATAAATG <<-<8<<<<<<:<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:265:251:147 163 chr2 581 99 35M = 754 208 TGTTATGCCCTGCTAAACTAAGCATCATAAATGAA <<<<<<<<<<<<<<88<<<80:;<<<<<;:4;;:4 MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:5:184:912:258 147 chr2 582 99 35M = 428 -189 GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG <;;<<<<;:<<7<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:115:646:430 99 chr2 582 45 35M = 768 217 GTTATGCCCTGCTAAACTTAGCATCATAAATGAAG <7<<<<<<<<<<<<;<<<<<;<7<<<<;5;<;67< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:3:24:319:429 163 chr2 582 99 35M = 740 193 GTTATGCCCTGCTAAACTAAGCATCATAAATGAAG <<<<<<<<<<<<<<<<;<<<<<<<<1<<-6<<</< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:8:49:182:192 99 chr2 582 99 35M = 750 203 GTTATGCCCTGCTAAACTGAGCATCATAAATGAAG =====================;============< MF:i:18 Aq:i:49 NM:i:1 UQ:i:28 H0:i:0 H1:i:1
--EAS114_45:1:100:979:1863 99 chr2 583 85 35M = 757 209 TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG ;<;;;;;;;7;;;79;;77;9;;99;974;677-6 MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:53:458:581 73 chr2 583 77 35M = 583 0 TTATGCCCTGCTAAACTAAGCATCATAAATGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:53:458:581 133 chr2 583 0 * = 583 0 CTCAATTAATTGTTTTATAAAACCTGTGAGTTTTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<99<<<<< MF:i:192
--B7_589:6:108:958:42 163 chr2 584 81 35M = 755 206 TATGCCCTGCTAAACTAAGCATCATAAATGAAGGG <<<<<<<<<<<<<<<<<<<<1<<<<<<9<<;<5<: MF:i:18 Aq:i:9 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:89:457:591 99 chr2 585 69 35M = 770 216 ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG <<<<<<<<<<<4<<<<<<<<<<<<8<7/4<<<<4+ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:87:1289:83 83 chr2 585 99 35M = 413 -207 ATGCCCTGCTAAACTAAGCATCATAAATGAAGGGG <<<::<<<:<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:1:84:1505:1037 147 chr2 586 99 35M = 409 -212 TGCCCTGCTAAACTAAGCATCATAAATGAAGGGGA <<966<<7<<<<7<<<<9<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:197:261:624 147 chr2 587 99 35M = 398 -224 GCCCTGCTAAACTAAGCATCATAAATGAAGGGGAA 866;2:/;<<<;:<<<;<;;<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:118:41:489 163 chr2 588 76 35M = 779 226 CCCTGCTAAACTAAGCATCATAAATGAAGGGGAAA <<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<95: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:157:361:309 99 chr2 589 99 35M = 747 193 CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<;<;<;<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_39:6:71:644:1792 163 chr2 589 84 35M = 754 200 CCTGCTAAACTAAGCATCATAAATGAAGGGGAAAT <<<<<<<;<<<<<<<<<<;<<<<<<<<<;<;:<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_589:2:9:49:661 163 chr2 591 99 35M = 747 191 TGCTAAACTAAGCATCATAAATGAAGCGGAAATAA <<<<<<<<<<<<<<<<;<<<<<<;:<<;;;7<9;9 MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_71:2:85:686:696 83 chr2 594 99 34M = 435 -193 TAAACTAAGCATCATAAATGAAGTGGAAATAAAG :<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS188_7:1:177:522:118 69 chr2 594 0 * = 594 0 TCTCAATTAATTGTTTTATAAAACCTGTGAGTTTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<57<<<< MF:i:192
--EAS188_7:1:177:522:118 137 chr2 594 49 35M = 594 0 TAAACTAAGCATCATAAATGAAGGGGAAATAAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:103:870:105 99 chr2 595 44 35M = 778 214 AAACTAAGCATCATAAATGAAGGGGAAATAAAGTC <<<<<<<<<<<<<<<<<<<<<<<<8<<<<<;<<7; MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_62:8:52:967:804 73 chr2 596 76 35M = 596 0 AACTAAGCATCATAAATGAAGGGGAAATAAAGTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:8:52:967:804 133 chr2 596 0 * = 596 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT ===============<=======<<===<====== MF:i:192
--EAS1_108:6:95:235:746 83 chr2 598 99 35M = 430 -203 CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG ==&=;===7=3===8======;=;8===8=====; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:124:253:889 83 chr2 598 99 35M = 437 -196 CTAAGCATCATAAATGAAGGGGAAATAAAGTCAAG 8<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:6:174:650:125 99 chr2 600 76 35M = 770 201 AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:39:348:594 83 chr2 600 99 35M = 431 -204 AAGCATCATAAATGAAGGGGAAATAAAGTCAAGTC <<;;<;:<;<<<;<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:92:693:228 99 chr2 601 75 35M = 770 200 AGCATCATAAATGAAGGGGAAATAAAGTCAAGTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;9<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:285:349:797 163 chr2 604 76 35M = 773 200 ATCATAAATGAAGGGGAAATAAAGTCAAGTCTTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:3:82:13:897 83 chr2 606 99 35M = 453 -188 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT ,<2<;<<;<<<<;;;<<;<<<<<<<;;;;<<<<<< MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:310:155:312 83 chr2 606 99 35M = 438 -203 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT 2;<<;<<;<<;;/<<<<<<;<<<<8<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:45:178:1321 163 chr2 606 77 35M = 771 196 CATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:193:420:78 99 chr2 607 99 35M = 787 215 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:131:518:588 83 chr2 607 99 35M = 433 -209 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <.<<<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:45:800:733 83 chr2 607 99 35M = 413 -229 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <7<<7&<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:34 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:70:766:2016 83 chr2 607 99 35M = 422 -220 ATAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:2:1217:398 163 chr2 608 99 40M = 780 212 TAAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC <<<<<<<<<<<<<;<<<<<<<7<<<3<<<<;<<<<9:7:: MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:73:1458:1337 163 chr2 609 99 35M = 806 232 AAATGAAGGGGAAATAAAGTCAAGTCTTTCCTGAC <<<<<;;;<<<<<<<<<<<<<<<<<<<;<<7;;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:104:402:732 83 chr2 610 99 35M = 434 -211 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:37:611:267 147 chr2 610 99 35M = 464 -181 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:78:692:671 147 chr2 610 99 35M = 438 -207 AATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACA <<);<<;;<<<<<;<<<<<<<<<<<<<6<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:144:242:602 83 chr2 611 99 36M = 436 -211 ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:6:1243:981 69 chr2 611 0 * = 611 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT <<<<8<<8<<<<2<<<<<<<<8<55<<8*<<8<<< MF:i:192
--EAS219_FC30151:5:6:1243:981 137 chr2 611 68 35M = 611 0 ATGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAA <;<;;<<<;3;;3<<<;<<;<7%<<<.1<<<..<3 MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:291:404:199 163 chr2 612 76 36M = 777 197 TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:266:994:429 99 chr2 612 76 35M = 769 188 TGAAGGGGAAATAAAGTCAAGTCTTTCCTGACAAG =====================9=======4===:= MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:7:159:253:353 163 chr2 613 67 35M = 778 196 GAAGGGGAAATAAAGTCAAGTCTTTCCTGACAGGC <<<<<<<<<<<<<<<<<<<<<<<<<<<<0,%4(+, MF:i:18 Aq:i:67 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS1_108:5:175:149:296 163 chr2 614 99 35M = 811 232 AAGGGGAAATAAAGTCAAGCCTTTCCTGACAAGCA <<<<<<<<<<<<<<<<<<<49<<<<<<<<<<<<;4 MF:i:18 Aq:i:45 NM:i:1 UQ:i:19 H0:i:0 H1:i:1
--EAS56_65:1:23:536:229 147 chr2 614 99 35M = 448 -201 AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA <<99<<<<<;<<<;2<<<<<<;<<<9<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:100:20:1199 83 chr2 614 99 35M = 456 -193 AAGGGGAAATAAAGTCAAGTCTTTCCTGACAAGCA :<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:181:713:140 99 chr2 615 84 35M = 793 213 AGGGGAAATAAAGTCAAGTATTTCCTGACAAGCAA <7<<<<<<<<<<<<7<7<6+<<<5;<;<2<;;+;; MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS139_19:6:82:1051:921 163 chr2 616 99 40M = 800 224 GGGGAAATAAAGTCAAGGCTTTCCTGACAAGCAAATGCTA <<<<<9<799<<<<7::/<<<9<7:9:;2:7552+9''66 MF:i:18 Aq:i:41 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS192_3:3:309:187:267 163 chr2 616 99 35M = 786 205 GGGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAA <<<<<<<<<<<<<<<<<<<<<<<;<;<;<;68;;8 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:115:649:259 99 chr2 617 99 36M = 782 201 GGGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;<<9 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:261:267:597 163 chr2 617 86 35M = 787 205 GGGTAATAAAGTCAAGTCTTTCCTGACAAGCAAAT <<<<<<<<<;<<<<<7<<<<<<<<<:7<7<;44:; MF:i:18 Aq:i:41 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:4:123:1001:580 163 chr2 617 43 35M = 771 185 GGGAANTAAAGTCAAGTCTTTCCTGACAAGCAAAT =====!=====================1.8131*= MF:i:18 Aq:i:43 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--EAS139_11:7:60:163:1612 83 chr2 617 99 35M = 439 -213 GGGAACTAAAGTCAAGTCTTTCCTGACAAGCAAAT -<<<<)<<<<<<<<<<<<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:59 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS54_65:4:325:795:213 163 chr2 618 99 35M = 790 207 GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<;<<<<;;<<<<<<<<<<<<;:<</;/;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:165:665:220 163 chr2 618 76 35M = 779 196 GGAAATAAAGTCAAGTCTTTCCTGACAAGCAAATG <<<<<<<<<<<<<<<<<<<<<;<;;<<<;;<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:22:206:150 163 chr2 619 99 35M = 792 208 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC ==========================::=5&;<2< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:237:497:165 147 chr2 619 99 35M = 454 -200 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC 9=:=======2=27======<>&<=,==4>4=>>= MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:82:1540:77 163 chr2 619 99 35M = 786 202 GAAATAAAGTCAAGTCTTTCCTGACAAGCAAATGC <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<:8 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:172:196:746 147 chr2 620 99 35M = 451 -204 AAATAAAGTCAAGTCTTTCCTGACAAGCAAATGCT <<<;><<+<<<<:<<<<2<;<<<;<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:97:892:419 163 chr2 621 99 35M = 800 214 AATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:312:915:751 147 chr2 621 99 35M = 461 -195 AATAAAGTCAAGTCTTTCCTGACAAGCAAAAGCTA <:-<<<99:::);:7<4;8<<<<<<<;<2<+8<;< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS1_93:4:325:352:67 163 chr2 622 99 35M = 794 207 ATAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAA ==================<========<=<;-=== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:83:731:540 99 chr2 623 99 35M = 804 216 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<;<<<<<<<<<<<<<:<7<*;&;<;;9 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:74:329:459 163 chr2 623 99 35M = 795 207 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9;599 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:13:674:1717 83 chr2 623 99 35M = 445 -213 TAAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:141:415:738 69 chr2 624 0 * = 624 0 TTACCTAGTTGCTCTGTAGTCTCAATTAATTGTTT <<<<<<<<<<<<<<<<<<<<<<<;<<<<<;<8<<< MF:i:192
--EAS1_105:1:141:415:738 137 chr2 624 76 35M = 624 0 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<<<<<<<<<<<<<<<<<<<<:<<;<<;<<<<6: MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:154:118:488 83 chr2 624 99 35M = 447 -212 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<<;58<<95:<<;<;<<<;<<<;;<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:198:929:684 83 chr2 624 99 35M = 471 -188 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGA <<;<<<<<:<<<<<<<<<<<<<<<<<;<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:215:246:640 147 chr2 624 99 36M = 447 -213 AAAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<<,<<<96<<:<:<9<6<97<<<<<9<<<<9<<9< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:234:167:381 83 chr2 625 99 35M = 443 -217 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT <<;<;<<<<;<<<<7<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:96:489:453 147 chr2 625 99 35M = 445 -215 AAGTCAAGTCTTTCCTGACAAGCAAATGCTAAGAT ;<;;;<<<<5:<<:<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:79:879:15 99 chr2 626 99 35M = 790 199 AGTCAAGTCTTTCCTGACAAGCAAATGCTAAGATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<2<;<<1< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:2:59:286:290 147 chr2 628 99 35M = 467 -196 TCAAGTCTTTCCTGACAAGCAAATGCTAAGATAAT 77<<<<7<<<97<<,7<<<;<<<;<9<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:5:263:511:936 99 chr2 629 99 35M = 801 207 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<<<<<<<<<<;<<<<<;<<:<:<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:181:582:435 147 chr2 629 99 35M = 471 -193 CAAGTCTTTCCTGACAAGCAAATGCTAAGATAATT <<<<<<<<;<<<<<;<<4<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:636:642 83 chr2 630 99 35M = 458 -207 AAGTCTTTCCTGACAAGCAAATGCTAAGATAATTC <<<<<<<;<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:12:273:89 83 chr2 631 99 35M = 477 -189 AGTCTTTCCTGACAAGCAAATGCTAAGATAATTCA <:737<288<<<7<<<<<<<<<:9<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:239:1001:406 147 chr2 634 99 35M = 450 -219 CTTTCCTGACAAGCAAATGCTAAGATAATTCATCA 0':.71;;:9==9=;====;=;============= MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:7:96:899:106 147 chr2 636 99 35M = 462 -209 TTCCTGACAAGCAAATGCTAAGATAATTCATCATC ;;;;<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:6:67:56:806 147 chr2 637 99 35M = 464 -208 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA 844:8;7<88;8<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:71:408:741 83 chr2 637 99 35M = 457 -215 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA ;7;<;<0<<<<<<<<:;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:6:180:695:621 147 chr2 637 99 35M = 453 -219 TACTGAAAAGCAAATGCTAAGATAATTCATCATCA ;&377<&<<;7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS114_30:6:49:656:507 147 chr2 637 99 35M = 468 -204 TCCTGACAAGCAAATGCTAAGATAATTCATCATCA %44;;<:<<;<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:3:4:854:140 147 chr2 638 72 35M = 458 -215 CCTGACAAGCAAATGCTAAGATAATTCATCATCAC :9':<;<<<;<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:85:1521:58 99 chr2 639 99 40M = 813 214 CTGACAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<9<<<<<<<<<<<<<7<<<<<<<<<<<<;;:7: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:57:1064:925 137 chr2 640 76 35M * 0 0 TGACAAGCAAATGCTAAGATAATTCATCATCACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:32 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:323:196:855 163 chr2 642 99 35M = 809 202 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<7<<<<<<:<<<<<<<<<<<<<<<<<;7: MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:117:33:262 163 chr2 642 99 35M = 814 207 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:59:742:549 99 chr2 642 99 35M = 816 209 ACAAGCAAATGCTAAGATAATTCATCATCACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:55:562:403 163 chr2 643 99 36M = 825 218 CAAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<;<<;<<<<<<<;<;: MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:97:743:602 163 chr2 644 99 35M = 821 211 AAGCAAATGCTAAGATAATTCATCATCACTAAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<: MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:167:905:852 83 chr2 647 99 36M = 445 -238 CAAATGCTAAGATAATTCATCATCACTAAACCAGTC +<<<9;7;<<+<<<<<39<;9<;9<<7<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:130:865:838 83 chr2 649 99 35M = 448 -236 AATGCTAAGATAATTCATCATCACTAAACCAGTCC ;<:84<<<4<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:60:1420:660 163 chr2 649 99 35M = 808 194 AATGCTAAGATAATTCATCATCACTAAACCAGTCC <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<8<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:180:89:582 99 chr2 650 99 36M = 809 195 ATGCTAAGATAATTCATCATCACTAAACCAGTCCTA <<<<<<<<<7<<<<<<<<<7<<<:<<<:<<::77:< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:86:871:319 147 chr2 651 71 35M = 494 -192 TGCTAAGATAATTCATCATCACTAAACCAGTCCTA 7;+1;<:<<<<<<<<;<<;<<9<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:236:841:20 83 chr2 652 99 35M = 467 -220 GCTAAGATAATTCATCATCACTAAACCAGTCCTAT 7;<<<;<<<<;;<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:133:8:379 83 chr2 653 99 35M = 470 -218 ATAAGATAATTCATCATCACTAAACCAGTCCTATA &=========='==7==0=2====28===00==== MF:i:18 Aq:i:70 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_105:8:96:720:940 83 chr2 654 99 35M = 467 -222 TAAGATAATTCATCATCACTAAACCAGTCCTATAA *<<<<;<<<9<<;,<;0<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:71:994:576 99 chr2 655 99 35M = 805 185 AAGATAATTCATCATCACTAAACCAGTCCTATAAG <<<<<<<<<<<<<<<<<<<<<<<;<<5<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:164:79:134 147 chr2 656 99 35M = 488 -203 AGATAATTCATCATCACTAAACCAGTCCTATAAGA <;<;<<<;<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:78:1029:512 83 chr2 656 99 40M = 500 -196 AGATAATTCATCATCACTAAACCAGTCCTATAAGAAATGC ;;;;;<;;<<<.<<6;<<;<;8<<<<::<<<<<<<<;<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:1:214:784:690 147 chr2 657 99 35M = 472 -220 GATAATTCATCATCACTAAACCAGTCCTATAAGAA -<7<<7<:<<2<<<<;<<<<<;<<<<3<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS220_1:4:6:1178:1105 99 chr2 657 93 35M = 830 208 GATAATTCATCATCACTAAACCAGTCCTATAAGAA <<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:171:196:287 83 chr2 658 99 35M = 485 -208 ATAATTCATCATCACTAAACCAGTCCTATAAGAAA <;;;98;<;&<;;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:220:801:282 99 chr2 660 99 36M = 837 213 AATTCATCATCACTAAACCAGTCCTATAAGAAATGC <<<<<<<<<<<<<<<<<<<<<;<+<;<<<<<::<<: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS221_1:2:73:955:728 163 chr2 660 44 35M = 823 198 AATTCATCATCACTAAACCAGTCCTATAAGAAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_105:1:3:903:957 147 chr2 661 99 35M = 516 -180 ATTCATCATCACTAAACCAGTCCTATAAGAAATGC <%12<&<<<;<:<<<<<<<<<7<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_65:2:224:579:433 83 chr2 662 99 35M = 485 -212 TTCATCATCACTAAACCAGTCCTATAAGAAATGCT '<08/8<+<</<<:<<<<<8<<9<38<<<<<<<<; MF:i:18 Aq:i:31 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:209:824:866 163 chr2 665 73 35M = 828 198 ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:30:1882:1210 83 chr2 665 82 35M = 503 -197 ATCATCACTAAACCAGTCCTATAAGAAATGCTCAA 776778;5;;;;8;;7:8;;;;;;;<<<;;;;;<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:181:476:394 163 chr2 666 99 35M = 847 216 TCATCACTAAACCAGTCCTATAAGAAATGCTCAAA <<<<<<<<<<<<<<<<<<<<<<<<<;<<:<<<:;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:267:953:459 147 chr2 667 99 35M = 509 -193 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA %<07<94========<<================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:7:140:752:822 147 chr2 667 76 35M = 495 -207 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA ;<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:322:391:742 99 chr2 667 99 35M = 847 215 CATCACTAAACCAGTCCTATAAGAAATGCTCAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:149:639:910 83 chr2 669 99 35M = 489 -215 TCACTAAACCAGTCCTATAAGAAATGCTCAAAAGA <;49;<<;;<<<<8;<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:42 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:242:419:512 83 chr2 672 94 35M = 490 -217 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT *:<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:45:183:25 83 chr2 672 95 35M = 501 -206 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT ;1<<;<<<;;;;<<<<<+<<<<<<<<<9<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:326:887:180 83 chr2 672 73 35M = 492 -215 CTAAACCAGTCCTATAAGAAATGCTCAAAAGAATT 8:<<:<5<<<;7<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:145:635:390 163 chr2 673 99 35M = 860 222 TAAACCAGTCCTATAAGAAATGCTCAAAAGAATTG <<<<<<<<<<<<<<<<<<:<<<<<<<8<<<::;;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:31:628:1820 163 chr2 675 98 35M = 828 188 AACCAGTCCTATAAGAAATGCTCAAAAGAATTGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:7:117:452:744 163 chr2 676 99 35M = 850 209 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<;<<<;<<<<<<<<<<:<<<<<<<;; MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:297:949:26 163 chr2 676 99 35M = 842 201 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:17:437:1378 163 chr2 676 99 35M = 847 206 ACCAGTCCTATAAGAAATGCTCAAAAGAATTGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:222:579:961 83 chr2 679 99 35M = 504 -210 AGTCCTATAAGAAATGCTCAAAAGAATTGTAAAAG =58====;==8=======;================ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:98:995:929 163 chr2 680 99 35M = 844 199 GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT <;<;<8<;<<;1;<<<<<;<;;;08;<;<1&0+8< MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:76:1765:700 163 chr2 680 99 35M = 866 221 GTCCTATAAGAAATGCTCAAAAGAATTGTAAAAGT ;;6;;;;;;;;;6;;;;6;;;;;;;;;;;;88878 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:68:306:409 99 chr2 682 99 40M = 856 214 CCTATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;:;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:115:193:231 83 chr2 684 99 35M = 522 -197 TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA =========7===========<============= MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:57:1675:720 99 chr2 684 99 35M = 841 192 TATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:13:682:680 147 chr2 685 99 35M = 482 -238 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<:<5<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:6:51:1486:1131 83 chr2 685 77 35M = 500 -220 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<,<6<<<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:3 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:33:1240:846 147 chr2 685 99 35M = 509 -211 ATAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAA <<<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:8:43:972:506 83 chr2 686 99 35M = 505 -216 TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT ;<<<<<<<+;<;<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:23:127:880 147 chr2 686 99 35M = 504 -217 TAAGAAATGCTCAAAAGAATTGTAAAAGTCAAAAT <<<<<<<<<%<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:101:752:996 83 chr2 687 99 35M = 508 -214 AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<<<<<<<7<7<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:6:3:186:68 147 chr2 687 99 35M = 512 -210 AAGAAATGCTCAAAAGAATTGTAAAAGTCAAAATT <<;<<<<<&:,<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:273:348:37 83 chr2 688 99 36M = 483 -241 AGAAATGCGCAAAAGAATTGTAAAAGTCAAAATTAA 9;7;;0<++1<<<;<7<+;;1<<<;<17<<<<<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS51_78:7:164:727:977 83 chr2 689 99 35M = 513 -211 GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA ;<;<;<:<:<<<<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:6:140:253:322 147 chr2 689 99 35M = 537 -187 GAAATGCTCAAAAGAATTGTAAAAGTCAAAATTAA =;===;54:====================>>===> MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:146:374:692 99 chr2 690 99 35M = 874 219 AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA <<<<<<<<<<<<<<<</<<<<<<<<<<<<<<<<<: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:1:92:875:345 83 chr2 690 99 35M = 504 -221 AAATGCTCAAAAGAATTGTAAAAGTCAAAATTAAA <<<;<.;7<<<<<<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:45:601:439 163 chr2 691 99 35M = 864 208 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<<<;<<<<<<<<<<<<<<<<4<<<<9<<<<<<;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:5:295:882:282 83 chr2 691 99 35M = 520 -206 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<:<8<-<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:78:775:555 147 chr2 691 99 35M = 539 -187 AATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAG <<-<%4/<<<<<<<<<<<<<<<<<5<<<0<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:255:796:239 99 chr2 692 99 35M = 869 212 ATGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGT <<<<<<<<6<<<<<<<<<<<<<<<<;6<<<:<:<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:57:826:977 83 chr2 693 99 35M = 528 -200 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT 875:6<<<<<<<<<<<<<<<;<<<<<<;8<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:187:996:432 99 chr2 693 99 36M = 860 203 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:8:65:463:703 147 chr2 693 99 35M = 506 -222 TGCTCAAAAGAATTGTAAAAGTCAAAATTAAAGTT <<3<9<<<<<<<8<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:288:384:444 163 chr2 696 99 35M = 855 194 TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:5:272:240:950 83 chr2 696 97 35M = 520 -211 TCAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAA 37<<<<<<<<<<<<<<<<<<<<<<;;<;<<<<<<; MF:i:18 Aq:i:25 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:160:130:351 147 chr2 697 99 35M = 530 -202 CAAAAGAATTGTAAAAGTCAAAATTAAAGTTCAAT 4<;;<;<<<-<<<<<<<<<<;;<<<<;<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:189:530:40 163 chr2 698 99 36M = 883 221 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATAC <<<<<<<<<<;<<<<<:<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:168:247:414 99 chr2 698 99 35M = 876 213 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA <<<<<<<<<<<<<<<<*<<<<<<<<<;:6<<<<<; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:6:197:759:975 83 chr2 698 99 35M = 537 -196 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:29:411:1208 99 chr2 698 99 40M = 882 224 AAAAGAATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC <<<<;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:110:543:934 83 chr2 700 99 35M = 514 -221 AAGAATTGTAAAAGTCAAAATTAAAGTTCAATACT <<<<<5<<;<<<<<<;<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:3:287:665:495 83 chr2 702 99 35M = 530 -207 GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA ===,9=;;====7=====5===;==1========= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:70:445:1289 147 chr2 702 99 35M = 535 -202 GAATTGTAAAAGTCAAAATTAAAGTTCAATACTCA <<<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:172:827:592 163 chr2 703 99 35M = 899 231 AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC =;=======;==;===:==========;==9<<.3 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:135:401:735 147 chr2 703 99 35M = 510 -228 AATTGTAAAAGTCAAAATTAAAGTTCAATACTCAC <<::7<<<<<<::<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:39:208:644 99 chr2 704 99 35M = 859 190 ATTGTAAAAGTCAAAATTAAAGTTCAATACTCACC <;<<<<<;;:<<;;<<<<<<;;;;;;.<;<79997 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:99:1632:76 147 chr2 705 99 40M = 553 -192 TTGTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATA 4641::<<4<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:52:1144:509 99 chr2 706 99 35M = 867 196 TGTAAAAGTCAAAATTAAAGTTCAATACTCACCAT <<<<<<<<<<<<<<<<<<<;<<<<<<<;<;<<;<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:116:157:612 99 chr2 707 99 35M = 889 217 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:36:481:1079 163 chr2 707 99 40M = 881 214 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::8 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:74:668:424 147 chr2 707 99 40M = 545 -202 GTAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAA :::::<<96<<<<<;<<<;<<5<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:122:398:994 163 chr2 708 99 35M = 871 198 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA <:<9<<<<<<4<<<;9<<<<<98<;<<<:;<;<;7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1231:1381 99 chr2 708 99 35M = 891 218 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:57:366:844 163 chr2 708 99 40M = 877 209 TAAAAGTCAAAATTAAAGTTCAATACTCACCATCATAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::7: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:307:208:477 83 chr2 710 99 35M = 546 -199 AAAGTCAAAATTAAAGTTCAATACTCACCATCATA <<<<<.<<<<<<<<<<<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:3:285:417:147 147 chr2 712 99 35M = 529 -218 AGTCAAAATTAAAGTTCAATACTCACCATCATAAA <..)<<<<;<<<<7<;-<<;<<<<<;8<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:325:544:349 83 chr2 716 99 35M = 515 -236 AAAATTAAAGTTCAATACTCACCATCATAAATACA <<<<57<<<7<;6<<<<;<7<7;<<7<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:33:357:858 163 chr2 716 99 35M = 870 189 AAAATTAAAGTTCAATACTCACCATCATAAATACA <<<<<<<<<<<<<<<<:<<<<<<:<<<<;<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:78:806:800 83 chr2 717 99 40M = 564 -193 AAATTAAAGTTCAATACTCACCATCATAAATACACACAAA ::;9:<<<;<<:<<<<:<.<1:<<1<<<<<<;<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:41:314:1173 147 chr2 718 99 35M = 554 -199 AATTAAAGTTCAATACTCACCATCATAAATACACA <<2**<<82/<<<<<<<<<<9<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:82:963:128 163 chr2 719 99 35M = 905 221 ATTAAAGTTCAATACTCACCATCATAAATACACAC <<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;<<; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:240:719:799 99 chr2 720 99 35M = 900 215 TTAAAGTTCAATACTCACCATCATAAATACACACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:93:634:323 147 chr2 721 99 35M = 550 -206 TAAAGTTCAATACTCACCATCATAAATACACACAA <<<<;<;<<<<;;<<2<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:12:1335:1372 163 chr2 721 99 40M = 906 225 TAAAGTTCAATACTCACCATCATAAATACACACAAAAGTA <<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<99::.: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:116:738:142 147 chr2 722 99 35M = 568 -189 AAAGTTCAATACTCACCATCATAAATACACACAAA <:<7;+:<<:<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:2:49:330:699 83 chr2 722 99 35M = 540 -217 AAAGTTCAATACTCACCATCATAAATACACACAAA ===/=;========;=;================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:7:273:562:954 147 chr2 722 99 35M = 539 -218 AAAGTTCAATACTCACCATCATAAATACACACAAA ;<<+;95<<<;5;<<;:<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:6:77:1529:522 147 chr2 722 99 35M = 562 -195 AAAGTTCAATACTCACCATCATAAATACACACAAA <<<;7;,<<<<<<.<,6<<6<<<<<<<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1467:1447 163 chr2 722 99 35M = 898 211 AAAGTTCAATACTCACCATCATAAATACACACAAA <<<<<<<<<<<<<<<<<<<<<<7<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:251:819:772 99 chr2 726 99 36M = 881 191 TTCAATACTCACCATCATAAATACACACAAAAGTAC <3<<<9<9<3<</<<<<<<59<3<9<<</9/++*/' MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:144:492:61 147 chr2 728 99 35M = 564 -199 AAATACTCACCATCATAAATACACACAAAAGTACA +;;3;,:7<:;<<7<<<<<<<;;<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS54_73:7:200:65:291 99 chr2 728 99 35M = 930 237 CAATACTCACCATCATAAATACACACAAAAGTACA <<<<1<<<<<<<<<<<<<<<<<<<:<8<<<<:<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:130:609:467 99 chr2 728 99 35M = 877 184 CAATACTCACCATCATAAATACACACAAAAGTACA ==8=====;==8==;=4=;;8=====;6=177.== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:216:47:302 147 chr2 729 99 35M = 557 -207 AATACTCACCATCATAAATACACACAAAAGTACAA <<;<8<:<6<<<;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:4:234:610 83 chr2 729 84 35M = 560 -204 AAAAATCAACATCACAAATACACACAAAAGTACAA <:+:'+&<+'<+'2&<:<7<2<':2<:<<7<7<<< MF:i:18 Aq:i:22 NM:i:4 UQ:i:31 H0:i:0 H1:i:0
--EAS54_81:8:271:180:509 99 chr2 729 99 35M = 896 202 AATACTCACCATCATAAATACACACAAAAGTACAA =============================='==== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:41:530:663 163 chr2 730 99 35M = 908 213 ATACTCACCATCATAAATACACACAAAATTACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7;;;;<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:22 H0:i:1 H1:i:0
--EAS114_39:4:30:570:902 83 chr2 730 99 35M = 561 -204 ATACTCACCATCATAAATACGCACAAAAGTACAAA <:<6:6<&:<<6<<<<<<<<.<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:13 H0:i:0 H1:i:1
--EAS1_105:1:87:430:995 99 chr2 731 67 35M = 909 213 TACTCACCATCATAAATACACACAAAATTACAAAA <<;<<7;;;<;<<777;7(77;;1;7;%117;,7( MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS114_28:7:215:863:521 163 chr2 732 99 36M = 890 194 ACTCACCATCATAAATACACACAAAAGTACAAAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:267:394:437 83 chr2 735 99 35M = 544 -226 AAACATCATAAATACACACAAAAGTACAAAACTCA &<&,<8.<;<<<;<8<8<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS1_108:6:94:294:387 83 chr2 736 99 35M = 578 -193 ACCATCATAAATACACACAAAAGTACAAAACTCAC 779=53=9===;=:=;=========;========= MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:38:332:54 163 chr2 737 99 36M = 904 203 CCATCATAAATACACACAAAAGTACAAAACTCACAG <;<<<<<<<<<<<<<<<<<<<<<<<<<<<0;;;<;; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:8:165:441:708 83 chr2 737 99 35M = 550 -222 CCATCATAAATACACACAAAAGTACAAAACTCACA 6+<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:246:177:525 147 chr2 738 98 35M = 549 -224 CATCATAAATACACACAAAAGTAAAAAACTCACAG %<(4<2<<<<<:<;<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_26:5:43:114:617 83 chr2 738 99 35M = 579 -194 AATCATAAATACACACAAAAGTACAAAACTCACAG +=22=6=================9=========== MF:i:18 Aq:i:52 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS1_99:8:152:778:228 163 chr2 739 99 35M = 915 211 ATCATAAATACACACAAAAGTACAAAACTCACAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:3:24:319:429 83 chr2 740 99 35M = 582 -193 TAATAAATACACACAAAAGTACAAAACTCACAGGT 0%=3%=3====<=9=====89==93==9=6===== MF:i:18 Aq:i:56 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS51_66:5:210:674:911 99 chr2 740 99 35M = 904 199 TCATAAATACACACAAAAGTACAAAACTCACAGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:88:451:1773 99 chr2 742 99 35M = 902 195 ATAAATACACACAAAAGTACAAAACTCACAGGTTT ;;:::<:;:<<;:6::;:;;:::;;<;;;367177 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:2:168:1878 147 chr2 743 37 35M = 560 -218 TAAATACACACAAAAGTAGAAAACGCACCAGTTTT *3/6)9.;;;;;;;;5;;);;;3;(;;;+(;7.)3 MF:i:130 Aq:i:37 NM:i:4 UQ:i:32 H0:i:0 H1:i:0
--EAS188_7:5:115:249:673 83 chr2 743 99 35M = 552 -226 TAAATACACACAAAAGTACAAAACTCACAGGTTTT :<<<;<<<;<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:178:187:610 99 chr2 744 99 35M = 903 194 AAATACACACAAAAGTACAAAACTCACAGGTTTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:9:49:661 83 chr2 747 99 35M = 591 -191 TACACACAAAAGTACAAAACTCACAGGTTTTATAA <<6<5<<<<<<<<<<<<<<<<<<<7<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:157:361:309 147 chr2 747 99 35M = 589 -193 TACACACAAAAGTACAAAACTCACAGGTTTTATAA :<-<5<0<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:103:443:166 83 chr2 747 99 35M = 565 -217 TACACACAAAAGTACAAAACTCACAGGTTTTATAA 7<4<4<:<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:8:49:182:192 147 chr2 750 99 35M = 582 -203 ACACAAAAGTACAAAACTCACAGGTTTTATAAAAC <5<;<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:12:630:707 99 chr2 751 99 35M = 915 199 CACAAAAGTACAAAACTCACAGGTTTTATAAAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:7:94:1440:2016 83 chr2 751 99 35M = 564 -222 CACAAAAGTACAAAACTCACAGGTTTTATAAAACA :<8<<<<9<<9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:206:741:810 163 chr2 753 99 35M = 929 210 CAAAAGTACAAAACTCACAGGTTTTATAAAACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:-;<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:250:698:842 83 chr2 753 99 34M = 554 -233 AAAAAGTACAAAACTCACAGGTTTTATAAAACAA )<<<<<<<-<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--EAS54_81:6:265:251:147 83 chr2 754 99 35M = 581 -208 AAAAGTACAAAACTCACAGGTTTTATAAAACAATT <<<<::<8<<<;<;8<8<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:71:644:1792 83 chr2 754 84 35M = 589 -200 AAAAGTACAAAACTCACAGGTTTTATAAAACAATT <<<<;<<<<<<:;/<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:6:108:958:42 83 chr2 755 81 35M = 584 -206 AAAGTACAAAACTCACAGGTTTTATAAAACAATTA <<<;;</<<<<;<<<<<<<<<<<<<<<<<<<<<<+ MF:i:18 Aq:i:9 NM:i:1 UQ:i:27 H0:i:0 H1:i:3
--B7_597:8:48:805:860 147 chr2 755 78 35M = 563 -227 AAAGTACAAAACTCACAGGTTTTATAAAACAATTA <<<;3<;7<<97<7<<<<7<4<<<<<<<<<<;8<+ MF:i:18 Aq:i:13 NM:i:1 UQ:i:27 H0:i:0 H1:i:3
--B7_591:3:179:496:161 163 chr2 756 99 36M = 919 199 AAGTACAAAACTCACAGGTTTTATAAAACAATTAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+ MF:i:18 Aq:i:49 NM:i:2 UQ:i:53 H0:i:1 H1:i:0
--EAS56_59:3:166:626:836 83 chr2 757 99 35M = 567 -225 AGTACAAAACTCACAGGTTTTATAAAACAATTAAT <;;7<<<<<<;<7;<<<<<<<<<<<<7<<<<<<<+ MF:i:18 Aq:i:28 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS114_28:5:23:944:377 147 chr2 757 75 36M = 579 -214 AGTACAAAACTCACAGGTTTTATAAAACAATTAATT <;7;8<<<<:<;<:<<<<<<<<<<<<<;<<<<<<<; MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_45:1:100:979:1863 147 chr2 757 85 35M = 583 -209 ATTACAAAACTCACAGGTTTTATAAAACAATTAAT 6&,*3;6;66;9(572692;;;79;4)9;96;59+ MF:i:18 Aq:i:23 NM:i:3 UQ:i:51 H0:i:0 H1:i:0
--EAS219_1:3:90:219:528 83 chr2 758 75 35M = 576 -217 GTACAAAACTCACAGGTTTTATAAAACAATTAATT ;:<5<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:5:89:942:84 83 chr2 759 74 35M = 562 -232 TACAAAACTCACAGGTTTTATAAAACAATTAATTG ===================>=>>>==>>===>==> MF:i:130 Aq:i:74 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:6:159:493:275 99 chr2 760 72 35M = 939 214 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA =====3============================= MF:i:130 Aq:i:72 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_11:1:81:1019:558 163 chr2 760 77 35M = 926 201 ACAAAACTCACAGGTTTTATAAAACAATTAATTGA <<<<<<<<<<<6<<<<<<<<<<<<<<<<<<<<<7< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS51_62:7:162:195:761 163 chr2 767 30 18M4I13M = 922 190 TCACAGGTTTTATAAAACAATTAATTGAGACTACA <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;; MF:i:130 Aq:i:30 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_597:3:115:646:430 147 chr2 768 45 17M4I14M = 582 -217 CACAGGTTTTATAAAACAATTAATTGAGACTACAG 5;5<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:45 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:6:243:209:110 163 chr2 768 48 17M4I14M = 920 187 CACAGGTTTTATAAAACAATTAATTGAGACTACAG <<<<<;<;<<<;<<<<<<<<<<<;<:;<<:;;+85 MF:i:130 Aq:i:48 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_108:2:266:994:429 147 chr2 769 76 16M4I15M = 612 -188 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA </<<<<<<<<<<<<<;<<<<<<<;<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:5:32:461:154 99 chr2 769 71 16M4I15M = 945 211 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA <<<<<<<<<<<<<<<:<<<<<<<<<<<<<<<+<;; MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:6:7:492:1088 99 chr2 769 57 16M4I15M = 926 192 ACAGGTTTTATAAAACAATTAATTGAGACTACAGA <<<<<<<<<<<<<<<<<<<<<<<<7<:<<<<<<6; MF:i:130 Aq:i:57 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_95:6:174:650:125 147 chr2 770 76 15M4I16M = 600 -201 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG ===;=============================== MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_59:6:89:457:591 147 chr2 770 69 15M4I16M = 585 -216 CAGGTTTTATAAAACAATTAATTGAGACTACATAG 797<<9<<<<<<<3<7<<<<<<<<<<)<<<<<07< MF:i:130 Aq:i:69 NM:i:1 UQ:i:15 H0:i:0 H1:i:0
--EAS114_39:2:38:670:564 99 chr2 770 73 15M4I16M = 930 195 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG <<<<<<<<<<<<<<<<<<<<<<<;<:<<<<;<5<; MF:i:130 Aq:i:73 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS188_7:4:92:693:228 147 chr2 770 75 14M4I17M = 601 -200 AAGGTTTTATAAAAAAATTAATTGAGACTACAGAG 6=77=<<=======&==================== MF:i:130 Aq:i:75 NM:i:1 UQ:i:28 H0:i:0 H1:i:0
--EAS218_1:4:61:1369:440 163 chr2 770 47 15M4I16M = 964 229 CAGGTTTTATAAAACAATTAATTGAGACTACAGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<8 MF:i:130 Aq:i:47 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_26:4:123:1001:580 83 chr2 771 43 14M4I17M = 617 -185 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC <.00..3<6<<<<<<<3;<<08<<<<<6<<<<<<< MF:i:130 Aq:i:43 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_39:4:10:1312:1558 163 chr2 771 76 14M4I17M = 928 192 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC 5<<<<<<<<<<<<<<<<<<<<<<<;;<<<<<;8;< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS220_1:8:45:178:1321 83 chr2 771 77 14M4I17M = 606 -196 AGGTTTTATAAAACAATTAATTGAGACTACAGAGC <<<<<<<<<<<<<<<<<:<<:<<<<<<<<<<<<<< MF:i:130 Aq:i:77 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_59:5:125:137:58 163 chr2 772 76 13M4I18M = 932 195 GGTTTTATAAAACAATTAATTGAGACTACAGAGCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<9;< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS192_3:3:285:349:797 83 chr2 773 76 12M4I19M = 604 -200 GTTTTAAAAAACCAATAATTGAGACTACAGAGCAA ;;<<<7.:<<<..<.<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:1 UQ:i:13 H0:i:0 H1:i:0
--EAS114_45:5:56:1757:1319 163 chr2 775 67 10M4I21M = 957 217 TTTATAAAACAATTAATTGAGACTACAGAGCAACT ;;;;9;;;;;;;;;;;;;4;9;98;;;;;9388&7 MF:i:130 Aq:i:67 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--B7_591:3:291:404:199 83 chr2 777 76 8M4I24M = 612 -197 TATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<7<<9<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS54_65:7:159:253:353 83 chr2 778 67 7M4I24M = 613 -196 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <8<<<<:<<;;<<<<<<<<<<<;<<<<<<<<<<<< MF:i:130 Aq:i:67 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_57:1:122:38:103 163 chr2 778 79 7M4I24M = 972 229 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<<<<<<<<<<;<<<<<<<<3<<<<9<8;< MF:i:130 Aq:i:79 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS188_4:5:103:870:105 147 chr2 778 44 7M4I24M = 595 -214 ATAAAACAATTAATTGAGACTACAGAGCAACTAGG <<<<<<<<<<<<<=<:<;<<<<<<<<<<*<<<<<< MF:i:130 Aq:i:44 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_105:8:24:718:322 163 chr2 779 23 35M = 953 209 ACAATTAATTGAGACTACAGACCAATTATGTAAAA 5/7<3+<;<1<<1<95<.&&.&&.<&)5)1)17<% MF:i:130 Aq:i:23 NM:i:3 UQ:i:18 H0:i:0 H1:i:0
--EAS51_64:6:118:41:489 83 chr2 779 76 35M = 588 -226 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <+<<;<<<38<<<<5<<3<<<<3<<8<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS56_61:3:165:665:220 83 chr2 779 76 35M = 618 -196 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS114_30:6:238:803:383 99 chr2 779 75 35M = 954 210 ACAATTAATTGAGACTACAGAGCAACTAGGTAAAA <<<<<<<<<<<<;<<<<<;<;<<;<<;<<<9<;<< MF:i:130 Aq:i:75 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS1_105:3:232:364:583 99 chr2 780 71 35M = 956 211 CAATTAATTGAGACTACAGAGCAACTAGGTAAAAA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:130 Aq:i:71 NM:i:0 UQ:i:0 H0:i:0 H1:i:0
--EAS139_19:2:2:1217:398 83 chr2 780 99 40M = 608 -212 CAATTAATTGAGACTACAGAGCAACTAGGTAAAAAATTAA +;;:9<<66<<<;+<<7<<<<;<<+;<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:3 UQ:i:73 H0:i:1 H1:i:0
--B7_593:2:81:435:410 99 chr2 782 99 36M = 966 220 ATTAATTGAGACTACAGAGCAACTAGGTAAAAAATT <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<;<<;; MF:i:18 Aq:i:29 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--B7_593:3:115:649:259 147 chr2 782 99 36M = 617 -201 ATTAATTGAGAATACAGAGCAACTAGGTAAAAAATT ;<;<<;<<<<;&<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:3 UQ:i:58 H0:i:0 H1:i:1
--EAS1_93:3:181:93:694 163 chr2 783 99 35M = 954 206 TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT ++<<<<<<;<<<<<<:;8<<;<<<5;<;<<<+<<< MF:i:18 Aq:i:28 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS114_30:1:188:863:790 163 chr2 783 98 35M = 969 221 TTAATTGAGACTACAGAGCAACTAGGTAAAAAATT ++<;<<;;;:<<<<:<:<<:1<<1<<<6:6;4;;4 MF:i:18 Aq:i:27 NM:i:2 UQ:i:54 H0:i:0 H1:i:0
--EAS1_93:2:313:711:530 163 chr2 784 99 35M = 968 219 TAATTGAGACTACAGAGCAACTAGGTAAAAAATTA +<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<: MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_589:7:154:26:712 99 chr2 786 99 35M = 959 208 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:185:87:475 163 chr2 786 99 36M = 949 199 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:69:1593:819 163 chr2 786 99 40M = 977 231 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAACATTAC <<<<<<<<<<<<<<;<<<<<;;<:<<<<<:<<<<<:777: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:309:187:267 83 chr2 786 99 35M = 616 -205 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <:0;<;<4<<7<<<<:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:82:1540:77 83 chr2 786 99 35M = 619 -202 ATTGAGACTACAGAGCAACTAGGTAAAAAATTAAC <48;<;</;<<<<<<:<<0<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:193:420:78 147 chr2 787 99 35M = 607 -215 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA 81<<;<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:261:267:597 83 chr2 787 86 35M = 617 -205 TTGAGAATAAAGAGCAACTAGGTAAAAAATTAACA *-1<9<+1<+<<<<:<<;9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:41 NM:i:2 UQ:i:20 H0:i:0 H1:i:1
--EAS56_59:4:262:928:237 99 chr2 787 99 35M = 971 219 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:262:53:888 163 chr2 787 99 35M = 965 213 TTGAGACTACAGAGCAACTAGGTAAAAAATTAACA <<<<<<<<;<<<<<<<<<<;<<;<;<;6<<;<;;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:138:211:582 99 chr2 788 99 35M = 957 204 TGAGACTACAGAGCAAATAGGTAAAAAATTAACAT <<;<<<<<<<<<<<<<&;<;<7<<;<<<<<<<5<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_597:7:113:408:211 99 chr2 789 99 35M = 952 198 GAGACTACAGAGCAACTAGGTAAAAAATTAACATT <<<<<<<<<<<<<<<:&<<<&:<<<<<<<<<<;:/ MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:79:879:15 147 chr2 790 99 35M = 626 -199 AGACTACAGAGCAACTAGGTAAAAAATTAACATTA <;;5;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:325:795:213 83 chr2 790 99 35M = 618 -207 AGACTACAGAGCAACTAGGTAAAAAATTAACATTA <<<0<<;<<<<;<<;:<<<<<<<<<<<;<<<<<9< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:4:22:206:150 83 chr2 792 99 35M = 619 -208 AAAAAAGAGCAACTAGGTAAAAAATTAACATTACA 8&)<)<<<<+<<+<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:3 UQ:i:21 H0:i:1 H1:i:0
--EAS56_59:5:181:713:140 147 chr2 793 84 35M = 615 -213 CTACAGAGCAACAAGGTAAAAAATTAACATTACAA 78<+<7<-7;;;&<5<7<<<<7<<<<<<<<<<<7< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:7:76:306:561 163 chr2 794 89 35M = 987 228 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC <<)<<<<<<8<<8<<<<<<<;;;<<1<<3;=7<<9 MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:4:325:352:67 83 chr2 794 99 35M = 622 -207 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC ;<8<<<;;<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:310:287:420 99 chr2 794 99 35M = 965 206 TACAGAGCAACTAGGTAAAAAATTAACATTACAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:5:74:329:459 83 chr2 795 99 35M = 623 -207 ACAGAGCAACTAGGTAAAAAATTAACATTACAACA </<;<8/<<9<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:57:1342:1166 99 chr2 796 99 35M = 964 203 CAGAGCAACTAGGTAAAAAATTAACATTACAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:542:428 163 chr2 797 99 35M = 965 203 AGAGCAACTAGGTAAAAAATTAACATTACAACAGG 7<4<<<6<<,<9)<<<<6<,<<7<<7<<<<<<<<1 MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:97:892:419 83 chr2 800 99 35M = 621 -214 GCAACTAGGTAAAAAATTAACATTACAACAGGAAC ;8<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:82:1051:921 83 chr2 800 99 40M = 616 -224 GCAAATAGGTAAAAAATTAACATTACAACAGGAACAAAAC 3-::-7<;+:9<;<<<5<;9,::53-;:3<<<<9<<3<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS1_95:5:263:511:936 147 chr2 801 99 35M = 629 -207 CAAATAGGTAAAAAATTAACATTACAACAGGAACA +<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS114_26:7:157:876:302 163 chr2 801 99 35M = 964 198 CAACTAGGTAAAAAATTAACATTACAACACGAACA 2<<;<<<22<<<<<<77<<<<22<7<<<<%-<<1< MF:i:18 Aq:i:66 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS54_65:2:127:288:655 163 chr2 803 99 35M = 999 231 ACTAGGTAAAAAATTAACATTACAACAGGAACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<<;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:83:731:540 147 chr2 804 99 35M = 623 -216 CTAGGTAAAAAATTAACATTACAACAGGAACAAAA ;7<:+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:82:843:1838 99 chr2 804 99 35M = 999 230 CTAGGTAAAAAATTAACATTACAACAGGAACAAAA ;<<;:;;<<<;;<<<<;;<<;;;;;<;;;;68887 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:71:994:576 147 chr2 805 99 35M = 655 -185 TAGGTAAAAAATTAACATTACAACAGGAACAAAAC <<9;;<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:24:415:944 99 chr2 805 99 35M = 974 204 TAGGTAAAAAATTAACATTACAACAGGAACAAAAC <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:3:73:1458:1337 83 chr2 806 99 35M = 609 -232 AGGTAAAAAATTAACATTACAACAGGAACAAAACC <</<<<<<<<6:<::<<<1<<:<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:142:353:398 163 chr2 807 99 35M = 977 205 GGTAAAAAATTAACATTACAACAGGAACAAAACCT =================================9= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:46:522:426 163 chr2 807 99 35M = 964 192 GGTAAAAAATTAACATTACAACAGGAACAAAACCT =======================:==;<===78== MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:59:871:351 163 chr2 808 99 35M = 963 190 GTAAAAAATTAACATTACAACAGGAACAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:6:235:505:553 163 chr2 808 99 35M = 987 214 GTAAAAAATTAACATTACAACAGGAACAAAACCTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;:;: MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:60:1420:660 83 chr2 808 99 35M = 649 -194 GTAAAAAATTAACATTACAACAGGAACAAAACCTC 99<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:180:89:582 147 chr2 809 99 36M = 650 -195 TAAAAAATTAACATTACAACAGGAACAAAACCTCAT ;<<<<<<4<<<:<<<<<<<<<6<<<<<<<<<<;<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:323:196:855 83 chr2 809 99 35M = 642 -202 TAAAAAATTAACATTACAACAGGAACAAAACCTCA &<<<<<<09<<7<7;<;<<0<<<<<;<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:295:547:216 163 chr2 809 99 35M = 970 196 TAAAAAATTAACATTACAACAGGAACAAAACCTCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:126:361:250 99 chr2 810 99 35M = 1002 227 AAAAAATTAACATTACAACAGGAACAAAACCTCAT <<<<<<;9<<<<<<<<<<<<<<;;;<<<;<664;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:266:133:789 99 chr2 810 99 35M = 988 213 AAAAAATTAACATTACAACAGGAACAAAACCTCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:175:149:296 83 chr2 811 99 35M = 614 -232 AAAAATTAACATTACAACAGGAACAAAACCTCATA =;==26==;==;================7====== MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:136:260:254 99 chr2 813 99 35M = 988 210 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<><<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:85:1521:58 147 chr2 813 99 40M = 639 -214 AAATTAACATTACAACAGGAACAAAACCTCATATATCAAT :::86<<:<<8<<<<;<<8<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:164:719:947 99 chr2 813 99 35M = 1005 227 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<<< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:50:257:341 163 chr2 813 99 35M = 971 193 AAATTAACATTACAACAGGAACAAAACCTCATATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7<6<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:5:117:33:262 83 chr2 814 99 35M = 642 -207 AATTAACATTACAACAGGAACAAAACCTCATATAT <<;;<<;<:8<7<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:8:90:706:1276 163 chr2 814 99 35M = 980 201 AATTAACATTACAACAGGAACAAAACCTCATATAT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:116:966:193 163 chr2 815 99 35M = 967 187 ATTAACATTACAACAGGAACAAAACCTCATATATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:59:742:549 147 chr2 816 99 35M = 642 -209 TTAACATTACAACAGGAACAAAACCTCATATATCA -<<<3<<<<6<<6<<<<<6<<<<6<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:74:213:877 99 chr2 816 99 35M = 996 215 TTAACATTACAACAGGAACAAAACCTCATATATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_610:3:85:219:371 163 chr2 817 99 35M = 967 185 TAACATTACAACAGGAACAAAACCTCATATATCAA <<<<<<<<<<<<<<<<<<<<<:<<<<<<<<<<;<; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:176:653:957 163 chr2 819 82 35M = 982 198 ACATTACAACAGGAACAAAACCTCATATATCAATA ????????????<<???@<<<<<@<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:64:526:339 163 chr2 819 96 35M = 1019 235 ACATTACAACAGGAACAAAACCTCATATATCAATA <<<<<<<<;<<<<<<<<<<7<:<<<<<<<<<8:<: MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:97:743:602 83 chr2 821 99 34M = 644 -211 ATTACAACAGGAACAAAACCTCATATATCAATAT <(&<:<<&<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:2 H1:i:6
--B7_610:2:75:887:149 163 chr2 823 99 35M = 1004 216 TACAACAGGAACAAAACCTCATATATCAATATTAA <<<<<<<<<<<<<<;<<<<<<<;<<<<<<<;<;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS221_1:2:73:955:728 83 chr2 823 44 35M = 660 -198 TACAACAGGAACAAAACCTCATATATCAATATTAA ;<-<<6<;<<<6<<<<;7<6<<<<<<<<<<<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:3 H1:i:18
--EAS1_108:2:102:543:160 163 chr2 825 99 35M = 977 187 CAACAGGAACAAAACCTCATATATCAATATTAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<6<:< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_28:2:55:562:403 83 chr2 825 99 36M = 643 -218 CAACAGGAACAAAACCTCATATATCAATATTAACTT +<<&<<<<<<<<<<+<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--B7_593:1:19:695:59 99 chr2 826 99 36M = 988 198 AACAGGAACAAAACCTCATATATCAATATTAACTTT <<<<<<<<<<<;<<<<<<<<<;<<;;<;<<7<<<<; MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS221_1:2:8:327:522 163 chr2 826 99 35M = 1001 210 AACAGGAACAAAACCTCATATATCAATATTAACTT <<<<<<<<<<:<<<<<<<<<<:<<<<<<<<<:<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS114_45:6:90:561:850 163 chr2 827 85 35M = 1004 212 ACAGGAACAAAACCTCATATATCAATATTAACTTT ;;;;;;;;;;;;;;;;;;;;;;;;9;9;6;77777 MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:2 H1:i:25
--EAS56_61:5:209:824:866 83 chr2 828 73 35M = 665 -198 CAGCAACAAAACCTCATATATCAATATTAACTTTG ;<:&<<:<<<<;<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:1 UQ:i:5 H0:i:1 H1:i:7
--EAS139_11:2:31:628:1820 83 chr2 828 98 35M = 675 -188 CAGGAACAAAACCTCATATATCAATATTAACTTTG <<<<<<:<<<<:6<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS220_1:4:6:1178:1105 147 chr2 830 93 35M = 657 -208 GGAACAAAACCTCATATATCAATATTAACTTTGAA <:<<9<<<<::7<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:11
--EAS114_28:4:305:707:258 99 chr2 831 58 36M = 992 197 GAACAAAACCTCATATATCAATATTAACTTTGAATA 9<<<<<<<<<<<<;<<-<<;;<;<<9<<;<<+99;7 MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:2 H1:i:9
--EAS54_67:3:114:736:433 163 chr2 832 63 35M = 998 201 AACAAAACCTCATATATCAATATTAACTTTGAATA ;<<9<8;<<<<8<8<;<<;;;0<<8;<;<<47;;; MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_591:7:157:447:758 99 chr2 833 99 36M = 994 197 ACAAAACCTCATATATCAATATTAACTTTGAATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_591:4:159:508:571 99 chr2 834 84 36M = 989 191 CAAAACCTCATATATCAATATTAACTTTGAATAAAA <<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_65:7:68:825:405 163 chr2 835 30 35M = 1015 215 AAAACCTCATATATCAATATTAACTTTGAATAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--B7_593:3:102:856:670 99 chr2 836 99 36M = 1025 225 AAACCTCATATATCAATATTAACTTTGAATAAAAAG <<<<<<<;<<<;<<;:<<<<<<<<<<:;;<<;<<<7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:260:827:289 163 chr2 836 99 35M = 999 198 AAACCTCATATATCAATATTAACTTTGAATAAAAA <<<<2<<<<;<<<<;<<<<<<:<<<&-<8<<88<3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS114_28:1:220:801:282 147 chr2 837 99 36M = 660 -213 AACCTCATATATCAATATTAACTTTGAATAAAAAGG ;7;87;===;==;====:===<==7=========== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:57:1675:720 147 chr2 841 99 35M = 684 -192 TCATATATCAATATTAACTTTGAATAAAAAGGGAT <,<<<<<<:<<<<<<<<:9<<<<<<<<;<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:297:949:26 83 chr2 842 99 35M = 676 -201 CATATATCAATATTAACTTTGAATAAAAAGGGATT 5<;<;<;:<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:1:76:34:691 89 chr2 843 58 35M * 0 0 ATATATCAATATTAACTTTGAATAAAAAGGGATTA <<<<<<16<<<<<916<<<499<966161919<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:5:98:995:929 83 chr2 844 99 35M = 680 -199 TATAACAATATTAACTTTGAATAAAAAGGGATTAA &<+<'7<<+<&<<<7+4<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:63 NM:i:1 UQ:i:6 H0:i:1 H1:i:0
--EAS139_19:3:58:923:1915 163 chr2 846 99 40M = 1007 201 TATCAATATTAACTTTGAATAAAAAGGGATTAAATTCCCC <<<<<<<<<<<<<<<<<<<<<<<<<;<;<<<<<<<::::: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:181:476:394 83 chr2 847 99 35M = 666 -216 AACAATATTAACTTTGAATAAAAAGGGATTAAATT <+;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS112_32:7:322:391:742 147 chr2 847 99 35M = 667 -215 ATCAATATTAACTTTGAATAAAAAGGGATTAAATT <63<<<<9<<<:<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:8:17:437:1378 83 chr2 847 99 35M = 676 -206 ATCAATATTAACTTTGAATAAAAAGGGATTAAATT <<7<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:155:375:623 163 chr2 849 99 35M = 1029 215 CAATATTAACTTTGAATAAAAAGGGATTAAATTCC 0<<<<<;<<<<<<<<<<<<<4<<8<<<<<<<<;<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:29:729:70 163 chr2 850 51 35M = 1009 194 ANTATTANCTTTGANNAAAAAGGGATTAAATTCCC :!<:<<8!::::5:!!:.77::33888633:8777 MF:i:130 Aq:i:51 NM:i:3 UQ:i:0 H0:i:0 H1:i:0
--EAS54_65:7:117:452:744 83 chr2 850 99 35M = 676 -209 AATATTAACTTTGAATAAAAAGGGATTAAATTCCC <;;<;<<<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:50 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:288:384:444 83 chr2 855 99 35M = 696 -194 TAACTTTGAATAAAAAGGGATTAAATTCCCCCACT ;=9;;<====<=;=/=9;<========<======= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:133:514:754 163 chr2 855 63 36M = 1036 217 TAAATTTGAATAAAAAGGGATTAAATTCCCCCACTT ***&,,,+(*,*********+*)*(***(**((*)( MF:i:18 Aq:i:19 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_19:5:68:306:409 147 chr2 856 99 40M = 682 -214 AACTTTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG ::2:7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:3:155:758:710 163 chr2 859 98 35M = 1048 224 TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG =======8================6=:7===:=:= MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:39:208:644 147 chr2 859 99 35M = 704 -190 TTTGAATAAAAAGGGATTAAATTCCCCCACTTAAG 78899;;;;4;;;;;;;;;;;;;;;;;;8;;8;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:16:438:245 89 chr2 860 65 35M * 0 0 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA 8*8<5'<77;;;;;7<7<<7-<;<<<;;<<<;;79 MF:i:32 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:145:635:390 83 chr2 860 99 35M = 673 -222 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGA +9;<<;<<<<<;;;<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:6:187:996:432 147 chr2 860 99 36M = 693 -203 TTGAATAAAAAGGGATTAAATTCCCCCACTTAAGAG ;<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:123:924:645 163 chr2 861 84 36M = 1045 220 TGAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA <<<<<<<<<<<<;<<<<<<;<<<<<<<6:<7<1<+< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:146:961:63 163 chr2 861 86 35M = 1041 215 TGAATAAAAAGGGCTTAAATTCCCCCACTTAAGGG <<+<<<<::+1<;&<<88<<<<;;.<0;;85(;(8 MF:i:18 Aq:i:37 NM:i:2 UQ:i:12 H0:i:0 H1:i:1
--EAS114_30:6:4:665:771 69 chr2 862 0 * = 862 0 GTGCTTTATCTGATATCAATGCCGATAAACTGCCT <<<<<<<<<<<<%<8<3:7:77<(7,:3(:&2:(0 MF:i:192
--EAS114_30:6:4:665:771 137 chr2 862 71 35M = 862 0 GAATAAAAAGGGATTAAATTCCCCCACTTAAGAGA <;<<;<18<;<8<<<<;<;;<<<<1<<<<6;;;;; MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:45:601:439 83 chr2 864 99 35M = 691 -208 ATAAAAAGGGATTAAATTCCCCCACTTAAGAGATA <8<<<<<<1<<<<<<<<)<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:126:966:514 163 chr2 865 99 35M = 1027 197 TAAAAAGGGATTAAATTCCCCCACTTAAGAGATAT <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:76:1765:700 83 chr2 866 99 35M = 680 -221 AAAAAGGGATTAAATTCCCCCACTTAAGAGATATA 77777;;;;7;7;<;;;;+;;<9<<<79;<1<<77 MF:i:18 Aq:i:63 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:155:807:19 99 chr2 867 99 35M = 1074 242 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<<<<<<<<<<<<<<9+<<<<<<9<<9;4<<<<: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:226:885:729 99 chr2 867 98 35M = 1037 205 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<;<<<<<<;<;<<<<<<<:;<<;4;%;<<;<<. MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:1:156:196 99 chr2 867 77 40M = 1042 215 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAGATTGG <<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<:;9:9 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:52:1144:509 147 chr2 867 99 35M = 706 -196 AAAAGGGATTAAATTCCCCCACTTAAGAGATATAG <<<<:<<<<<<<<<<;::;:<;<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:73:735:329 99 chr2 868 99 35M = 1035 202 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA ================;==;====;=;=======; MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:11:801:386 163 chr2 868 97 35M = 1061 228 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA <<<<<<<<<<8<<<<<:4<::<854:5<:::;4+4 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:150:94:843 99 chr2 868 75 35M = 1050 217 AAAGGGATTAAATTCCCCCACTTAAGAGATATAGA <<<<<<<<7<<<6<<<<<<<<<<<6<<62<<<<<2 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:255:796:239 147 chr2 869 99 35M = 692 -212 AAGGGATTAAATTCCCCCACTTAAGAGATAGAGAT <<3;;<7:<<<;(7<<7;<<;<<<<<<<<<7<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:22 H0:i:0 H1:i:1
--B7_589:5:147:405:738 163 chr2 870 99 35M = 1048 213 AGGGATTAAATTCCCCCACTTAAGAGATATAGATT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:33:357:858 83 chr2 870 99 35M = 716 -189 AGGGATTAAATTCCCCCACTTAAGAGATATAGATT <;<:<<<<<<<<<;<9<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:122:398:994 83 chr2 871 99 35M = 708 -198 GGGATTAAATTCCCCCACTTAAGAGATATAGATTG 95:<9<<<<:9<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_105:2:146:374:692 147 chr2 874 99 35M = 690 -219 ATTAAATTCCCCCACTTAAGAGATATAGATTGGCA <4:<<<1:<:<::<<<;<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:119:428:415 163 chr2 876 99 36M = 1037 197 TAAATTCCCCCACTTAAGAGATATAGATTGGCAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;<;;; MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:7:168:247:414 147 chr2 876 99 35M = 698 -213 TAAATTCCCCCACTTAAGAGATATAGATTGGCAGA ,;;;,146<6;6<<8<<<<1<8<<<<<<<<<<;1< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:130:609:467 147 chr2 877 99 35M = 728 -184 AAATTCCCCCACTTAAGAGATATAGATTGGCAGAA ===:2===;<====>==>=>=>=>>>==>>>=>>> MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:57:366:844 83 chr2 877 99 40M = 708 -209 AAATTCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT ;;;7:8&555<,;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:236:475:254 163 chr2 880 99 35M = 1051 206 TTCCCCCACTTAAGAGATATAGATTGGCAGAACAG <<<<<<<<<<<<<<<<<<<<<<<<<:::<:;</;/ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:251:819:772 147 chr2 881 99 36M = 726 -191 TCCCCCACTTAAGAGATATAGATTGGCAGAACAGAT 6+7++1<<%<<<<<<<+<+<9<<99<9<<<<<<9<< MF:i:18 Aq:i:59 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:36:481:1079 83 chr2 881 99 40M = 707 -214 TCCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAA :11+)*<4;<<<<<<<<<;;<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:29:411:1208 147 chr2 882 99 40M = 698 -224 CCCCCACTTAAGAGATATAGATTGGCAGAACAGATTTAAA 766+6<996<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:62:1076:540 99 chr2 882 99 35M = 1066 219 CCCCCACTTAAGAGATATAGATTGGCAGAACAGAT <<<<<<<<<<;<<<<<<<<<<<<<<<<;;<<;<7; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:189:530:40 83 chr2 883 99 36M = 698 -221 CCCCACTTAAGAGATATAGATTGGCAGAACAGATTT 883;<<<<<<<<<:<<<<<<<<3<;<<<<<<<<;<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:113:856:319 163 chr2 884 99 35M = 1067 216 CCCACTTAAGAGATATAGATTGGCAGAACAGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:55:296:1457 99 chr2 884 99 35M = 1061 212 CCCACTTAAGAGATATAGATTGGCAGAACAGATTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:15:881:1932 99 chr2 886 92 35M = 1061 210 CACTTAAGAGATATAGATTGGCAGAACAGATTTAA <<<<<<<<<<<<<<<;<<<<:<<<2<26<8<<;;. MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:116:157:612 147 chr2 889 99 35M = 707 -217 TTAAGAGATATAGATTGGCAGTACAGATTTAAAAA ;;<<<<<<<<<<<<<<<<;<</<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--EAS114_28:7:215:863:521 83 chr2 890 99 36M = 732 -194 TAAGAGATATAGATTGGCAGAACAGATTTAAAAACA ;<<<<<<<<<<<<<;<<;<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:254:572:431 163 chr2 891 97 35M = 1048 192 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<<<<<<<<<<<;<<<<<<<<<<<99;;;;; MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:273:424:207 163 chr2 891 99 35M = 1066 210 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <,<,<9<<9<<<<<<<<<<79<,599,<191<99+ MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:4:571:820 163 chr2 891 99 35M = 1071 215 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<<<<<<9<<;9<;;;<;6;:<<<3:;;;:6 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:36:1231:1381 147 chr2 891 99 35M = 708 -218 AAGAGATATAGATTGGCAGAACAGATTTAAAAACA <<<<<<;<<<<<<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:66:718:481 99 chr2 891 99 40M = 1072 221 AAGAGATATAGATTGGCAGAACAGATTTAAAAACATGAAC <<<<<<<<<<<<<<;<<<<<<<<;<<<<<<<;<<<:1:;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:22:632:176 163 chr2 894 99 36M = 1091 233 AGATATAGATTGGCAGAACAGATTTAAAAACATGAA <<<<<;<<<<<<;<<;<:<<<:<<:<<<;<<<;;;: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:271:180:509 147 chr2 896 99 35M = 729 -202 ATATAGATTGGCAGAACAGATTTAAAAACATGAAC <<<<<<<<<9<:<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:198:564:731 163 chr2 898 99 35M = 1089 226 ATAGATTGGCAGAACAGATTTAAAAACATGAACTA <<<<<;<<<<<<;<<:<<;9<<<<<<<<1;<<58< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:67:1467:1447 83 chr2 898 99 35M = 722 -211 ATAGATTGGCAGAACAGATTTAAAAACATGAACTA <<<<<::<<:<<<<:<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:172:827:592 83 chr2 899 99 35M = 703 -231 TAGATTGGCAGAACAGATTTAAAAACATGAACTAA 8<<<<;7;7<<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:240:719:799 147 chr2 900 99 35M = 720 -215 AGATTGGCAGAACAGATTTAAAAACATGAACTAAC <:<<<<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:24:1345:1627 73 chr2 900 78 35M = 900 0 AGATTGGCAGAACAGATTTAAAAACATGAACTAAC <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<8<3 MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:24:1345:1627 133 chr2 900 0 * = 900 0 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS139_19:1:58:726:1746 163 chr2 900 99 40M = 1061 201 AGATTGGCAGAACAGATTTAAAAACATGAACTAACTATAT <<<<<<<<<<<<<<<<<<<6<<<<8<<<<<<<<:8:8:88 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:88:451:1773 147 chr2 902 99 35M = 742 -195 ATTGGCAGAACAGATTTAAAAACATGAACTAACTA 973776;;;;;;;;;::;;;;;;;;;;;;;;3;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:178:187:610 147 chr2 903 99 35M = 744 -194 TTGGCAGAACAGATTTAAAAACATGAACTAACTAT 66:,:<7<<<<<<<1<<<<<<<<<<<<<<<2<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:6:38:332:54 83 chr2 904 99 36M = 737 -203 TGGCAGAACAGATTTAAAAACATGAACTAACTATAT 8;;&<;<<7<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:210:674:911 147 chr2 904 99 35M = 740 -199 TGGCAGAACAGATTTAAAAACATGAACTAACTATA 27;2<;<<5<<<<;;<<<<<;<<<<<<;<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:82:963:128 83 chr2 905 99 35M = 719 -221 GGCAGAACAGATTTAAAAACATGAACTAACTATAT 585<;<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:2:12:1335:1372 83 chr2 906 99 40M = 721 -225 GAAGAACAGATTTAAAAACATGAACTAACTATATGCTGTT :&;;;<*<<<9<<<<<<<<<<<<<<4<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS114_39:1:98:641:1040 163 chr2 907 99 35M = 1085 213 CAGAACAGATTTAAAAACATGAACTAACTATATGC <<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:8:41:530:663 83 chr2 908 99 35M = 730 -213 AGAACAGATTTAAAAACATGAACTAACTATATGCT =8=;*=5==;;=====:=====;===;======== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:87:430:995 147 chr2 909 67 35M = 731 -213 GAAAAGAGTTAAAAACATGAACTAACTATATGCTG 1<4%81<..1<<<<<0<<<<<0.<<9<<(<6<<6< MF:i:18 Aq:i:30 NM:i:2 UQ:i:17 H0:i:0 H1:i:1
--B7_595:3:85:964:950 163 chr2 910 99 35M = 1095 220 AACAGATTTAAAAACATGAACTAACTATATGCTGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;: MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:8:68:570:705 99 chr2 910 99 35M = 1100 225 AACAGATTTAAAAACATGAACTAACTATATGCTGT <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:198:503:669 99 chr2 912 99 35M = 1107 230 CAGATTTAAAAACATGAACTAACTATATGCTGTTT <<<<<<<<<<;8<<<<<;<<<<<<;<;<8<<8<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:273:545:1001 163 chr2 913 99 35M = 1088 210 AGATTTAAAAACATGAACTAACTATATGCTGTTTA <<<<<<<<<<<<<<<;;<<<<<<;<8;28<8;<<8 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:152:778:228 83 chr2 915 99 35M = 739 -211 ATTTAAAAACATGAACTAACTATATGCTGTTTACA <;;7=<<<<<<;<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:1:53:463:1132 163 chr2 915 99 40M = 1109 234 ATTTAAAAACATGAACTAACTATATGCTGTTTACANGAAA <<<<<<<<<<<<<<<<<<<<<;<<<8<<<<<<<8<!1488 MF:i:18 Aq:i:71 NM:i:1 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:12:630:707 147 chr2 915 99 35M = 751 -199 ATTTAAAAACATGAACTAACTATATGCTGTTTACA <:<<<<<<<;<<<<<9<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:179:119:876 163 chr2 917 60 35M = 1112 230 TTAAAAACATGAACTAACTATATGCTGTTTACCAG <<<<<<<7<<<<<<<8<<<6<<<<<<7<<<:0&<0 MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:1
--EAS1_97:6:308:667:658 99 chr2 918 10 35M = 1116 233 TAAAAACATGAACTAACTATATCCTTCTTACAATA 9<96<<<;<96<<9<51<<<<<1:9++<9*%4;*5 MF:i:18 Aq:i:10 NM:i:4 UQ:i:45 H0:i:0 H1:i:0
--EAS114_28:5:163:832:715 163 chr2 918 99 36M = 1085 203 TAAAAACATGAACTAACTATATGCTGTTTACAAGAA <<0;<9<<<<<<<<<<<<9<<<<<<<<<<<<;;;<6 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:3:179:496:161 83 chr2 919 99 36M = 756 -199 AAAAACATGAACTAACTATATGCTGTTTACAAGAAA <<<<<9<<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:8:13:325:483 163 chr2 919 99 35M = 1101 217 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_103:7:139:578:951 163 chr2 919 98 35M = 1095 211 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<;<<<<<<<<<<<<;<<<<<<<<<<0;; MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_108:8:19:929:765 99 chr2 919 98 35M = 1069 185 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;77< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:5:214:644:390 163 chr2 919 72 35M = 1082 198 AAAAACATGAACTAACTATATGCTGTTTACAAGAA <<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:6:243:209:110 83 chr2 920 48 35M = 768 -187 AAAACATGAACTAACTATATGCTGTTTACAAGAAA ;<;;;:<:<:;<<;;<;<;<;7<<;<<;;<;<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:247:900:123 99 chr2 920 99 35M = 1123 238 AAAACATGAACTAACTATATGCTGTTTACAAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;<; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_62:7:162:195:761 83 chr2 922 30 35M = 767 -190 AACATGAACTAACTATATGCTGTTTACAAGAAACT <<8<<:<<:<<<<<<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS1_103:2:184:980:396 163 chr2 923 99 35M = 1092 204 ACATGAACTAACTATATGCTGTTTACAAGAAACTC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:2:162:272:415 99 chr2 923 83 35M = 1112 224 ACATGAACTAACTATATGCTGTTTACAAGAAACTC <<<<<<<<<<<<<<<<<<<<<<;<<<<<9;<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:184:237:476 163 chr2 925 99 35M = 1101 211 ATGAACTAACTATATGCTGTTTACAAGAAACTCAT <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;<;;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:202:341:984 99 chr2 926 99 35M = 1094 203 TGAACTAACTATATGCTGTTTACAAGAAACTCATT =========================4;======== MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:107:738:484 99 chr2 926 75 35M = 1097 206 TGAACTAACTATATGCTGTTTACAAGAAACTCATT <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:7:492:1088 147 chr2 926 57 35M = 769 -192 TGAACTAACTATATGCTGTTTACAAGAAACTCATT 4;<<75<<::<:<<<-<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_11:1:81:1019:558 83 chr2 926 77 35M = 760 -201 TGAACTAACTATATGCTGTTTACAAGAAACTCATT <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:10:1312:1558 83 chr2 928 76 35M = 771 -192 AACTAACTATATGCTGTTTACAAGAAACTCATTAA <<:<<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:4:206:741:810 83 chr2 929 99 34M = 753 -210 ACTAACTATATGCTGTTTACAAGAAACTCATTAA <3<<;5<<<<<;:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:7:200:65:291 147 chr2 930 99 35M = 728 -237 CTAACTATATGCTGTTTACAAGAAACTCATTAATA ;9<;3<<9<7<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:38:670:564 147 chr2 930 73 35M = 770 -195 CTAACTATATGCTGTTTACAAGAAACTCATTAATA 3<<<3:<<<<<:;<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:57:1114:2032 99 chr2 931 99 35M = 1102 206 TAACTATATGCTGTTTACAAGAAACTCATTAATAA <7<<<<<<<<<<<<<<<<<777<<<7<<<<<3<<7 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:125:137:58 83 chr2 932 76 35M = 772 -195 AACTATATGCTGTTTACAAGAAACTCATTAATAAA <<9;<<<<<;<;<<<<;<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:1:38:250:647 163 chr2 933 71 35M = 1100 202 ACTATATGCTGTTTACAAGAAACTCATTAATAAAT <<<<<<<9<<9<<<<<<<6<<<<<<<<<<8<779% MF:i:18 Aq:i:0 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS192_3:6:116:464:261 99 chr2 934 99 35M = 1107 208 CTATATGCTGTTTACAAGAAACTCATTAATAAAGA <<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<;;8< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:168:69:249 163 chr2 936 99 35M = 1125 224 ATATGCTGTTTACAAGAAACTCATTAATAAAGACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:246:647:765 163 chr2 937 99 35M = 1119 217 TATGCTGTTTACAAGAAACTCATTAATAAAGACAT ;<<<<<<<<<;<&<<3+3<<<3<<9&</:/87</8 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:307:113:346 163 chr2 938 99 35M = 1123 220 ATGCTGTTTACAAGAAACTCATTAATAAAGACATG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<8 MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:6:159:493:275 147 chr2 939 72 35M = 760 -214 TGCTGTTTACAAGAAACTCATTAATAAAGACATGA 4949;<<<<<<<<<<<6<;<<<<;<<<<<*<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:257:288:731 99 chr2 939 99 34M = 1131 227 TGCTGTTTACAAGAAACTCATTAATAAAGACATG <<<<<<<<8<8<<;<;<<<;<<<5<;;88.8<6< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:231:815:626 163 chr2 940 99 35M = 1119 214 GCTGTTTACAAGAAACTCATTAATAAAGACATGAG <;<<<<9<<<<<<<<<<<<<<<<<;<<;5<<<;:; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:93:77:1338 163 chr2 940 10 35M = 1098 193 GCTGCTTACAAGAAGCGCATTAATAAAGACATGAG <<<<*<2<<<:<4<&<6<8<4<::<8<<<<82;;7 MF:i:18 Aq:i:0 NM:i:3 UQ:i:35 H0:i:0 H1:i:0
--EAS114_45:2:54:1886:719 99 chr2 941 99 35M = 1125 219 CTGTTTACAAGAAACTCATTAATAAAGACATGAGT ;;;9;;<;;;9;;;;;:;<9;:;;;;9;;;99799 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:94:273:165 99 chr2 945 99 35M = 1128 218 TTACAAGAAACTCATTAATAAAGACATGAGTTCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;:7 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:5:32:461:154 147 chr2 945 71 35M = 769 -211 TTACAAGAAACTCATTAATAAAGACATGAGTTCAG ;;</<<<<<;:<.<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:303:131:673 163 chr2 947 99 36M = 1112 201 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:10:106:737 163 chr2 947 99 35M = 1106 194 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT <<<;<1<;<<<<<<9<<<<;;<<<<<99<<94008 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:214:950:32 163 chr2 947 99 35M = 1132 220 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT >>=>>>>==>=>>>==>=>=:=====;=:=6:::6 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:10:686:1024 163 chr2 947 99 35M = 1103 191 ACAAGAAACTCATTAATAAAGACATGAGTTCAGGT <:<<<<:<<<<<<<<<<:<:<<<<<<<<<<<5<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:53:61:31 163 chr2 949 99 35M = 1122 208 AAGAAACTCATTAATAAAGACATGAGTTCAGATAA <<<7;<7<<<;7<;;<7<7<7<;5<73<<</%;/; MF:i:18 Aq:i:66 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS114_28:6:185:87:475 83 chr2 949 99 36M = 786 -199 AAGAAACTCATTAATAAAGACATGAGTTCAGGTAAA <<4<<<+<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:235:899:847 99 chr2 950 99 35M = 1112 197 AGAAACTCATTAATAAAGACATGAGTTCAGGTAAA <<3<;<<<<<<<<<;;<<<<<<<+<<<+6<8<3/< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:193:661:771 163 chr2 952 99 35M = 1129 212 AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG <<<<<<<<<;<<<;;;<<<<<;<<<=;<:;5:9:: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:113:408:211 147 chr2 952 99 35M = 789 -198 AAACTCATTAATAAAGACATGAGTTCAGGTAAAGG <:;:;:<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:8:24:718:322 83 chr2 953 23 35M = 779 -209 AACTCATTAATAATGTCATGAGTTCAGGTAAAGGG 5:+:0;**&+<00&<&<<<5<28<<;;<83<<<<< MF:i:18 Aq:i:23 NM:i:2 UQ:i:10 H0:i:0 H1:i:0
--EAS56_61:5:263:314:696 163 chr2 953 99 35M = 1117 199 AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG <<<<<<<<<<<<<<;<<<<<<<<<<<<:<<;<775 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:93:312:331 163 chr2 953 99 35M = 1145 227 AACTCATTAATAAAGACATGAGTTCAGGTAAAGGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:3:181:93:694 83 chr2 954 99 35M = 783 -206 ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG <4;8<<+<<:<<<<<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:238:803:383 147 chr2 954 75 35M = 779 -210 ACTCATTAATAAAGACATGAGTTCAGGTAAAGGGG ;;<;;<<<<<<<<<<<<<<<<;:<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:44:77:1255 163 chr2 955 99 35M = 1113 193 CTCATTAATAAAGACATGAGTTCAGGTAAAGGGGT ;;;;;;;8;;;7;8;;;;;;;;;;886;;;76777 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:232:364:583 147 chr2 956 71 35M = 780 -211 TCATTAATAAAGACATGAGTTCAGGTAAAGGGGTG ;%;7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:256:354:173 163 chr2 957 99 36M = 1121 200 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3<<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:4:138:211:582 147 chr2 957 99 35M = 788 -204 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG :<8;<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:61:631:567 99 chr2 957 99 35M = 1131 209 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:56:1757:1319 83 chr2 957 67 35M = 775 -217 CATTAATAAAGACATGAGTTCAGGTAAAGGGGTGG &7778<<<<<8<;<<:::;<:<4<<:<:;8<8<;< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:7:154:26:712 147 chr2 959 99 35M = 786 -208 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:10:975:766 163 chr2 959 99 35M = 1166 242 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGAAA <<<<<<<<;<<<<;<:<<;<6;;<<<:6-:+1+;; MF:i:18 Aq:i:64 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_73:5:220:733:736 99 chr2 959 99 35M = 1143 219 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<5<<;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:46:1566:668 163 chr2 959 99 35M = 1148 224 TTAATAAAGACATGAGTTCAGGTAAAGGGGTGGAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:7:59:871:351 83 chr2 963 99 35M = 808 -190 TAAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAG ;<<<<<:<;<<<4;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:46:522:426 83 chr2 964 99 35M = 807 -192 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA <<<<<:<<<<<<1/<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:157:876:302 83 chr2 964 99 35M = 801 -198 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA ===:=8=;==:892=,28==88==28====8=;;8 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:61:1369:440 83 chr2 964 47 35M = 770 -229 AAAGACATGATTTCAGGTAAAGGGGTGGAAAAAGA <<<<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--EAS221_1:6:57:1342:1166 147 chr2 964 99 35M = 796 -203 AAAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGA <<<<<;<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:310:287:420 147 chr2 965 99 35M = 794 -206 AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT <<<<;<;<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:262:53:888 83 chr2 965 99 35M = 787 -213 AAGACATGAGTTCAGGTAAAGGGGTGGAAAAAGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:3:542:428 83 chr2 965 99 35M = 797 -203 AAGACATGAGTTCAGGTACAGGGGTGGAAAAAGAT <<876</3<8874:<8:<)<5<<<;<<<<7<<<:< MF:i:18 Aq:i:41 NM:i:1 UQ:i:8 H0:i:0 H1:i:1
--B7_593:2:81:435:410 147 chr2 966 99 36M = 782 -220 AGACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT ;<;;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:29 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:3:85:219:371 83 chr2 967 99 35M = 817 -185 GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT <<7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:116:966:193 83 chr2 967 99 35M = 815 -187 GACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGT =================================== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:432:228 163 chr2 967 99 35M = 1145 213 GACATGAGTTCAGGGAAAGGGGTGGAAAAAGATGT <<<<<<<<<<<<<<8<<<<<<<<<<<<:<<<<<;; MF:i:18 Aq:i:47 NM:i:1 UQ:i:23 H0:i:0 H1:i:1
--B7_610:1:12:88:200 163 chr2 968 99 35M = 1133 200 ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT <<<<<<<<<<<;<<<<<<<;<<<:<<<<<<9<<5< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:2:313:711:530 83 chr2 968 99 35M = 784 -219 ACATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTT <7;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:74:866:49 163 chr2 969 99 35M = 1143 209 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC ====================9==91==<=6==;:= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:7:248:17:435 99 chr2 969 99 35M = 1139 205 CATGAGTTCAGGAAAAGGGGTGGAAAAAGATGTTC <<<<8<<<888<+<<<<<;<:<<<<8<<<<<;3<3 MF:i:18 Aq:i:43 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--EAS114_30:1:188:863:790 83 chr2 969 98 35M = 783 -221 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTC ;<7<<<55<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:75:1503:1399 163 chr2 969 99 40M = 1130 201 CATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC <<<<<<<<<<<<<<<<<<9<<<;<<<<<<;<<<<:::711 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:56:155:49 99 chr2 970 99 35M = 1145 210 ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT <<<<<<<<<<<<<<<<<<<<<<;<<;<<<;<9<9; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_4:5:295:547:216 83 chr2 970 99 35M = 809 -196 ATGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:4:262:928:237 147 chr2 971 99 35M = 787 -219 TGAGTTCAGGTAAAGGTGTGGAAAAAGATGTTCTA ;<<<<<;<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS219_1:1:50:257:341 83 chr2 971 99 35M = 813 -193 TGAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:1:122:38:103 83 chr2 972 79 35M = 778 -229 GAGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTAC ===;3<===:=======<================= MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:82:670:302 99 chr2 973 99 35M = 1146 208 AGTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:8:24:415:944 147 chr2 974 99 35M = 805 -204 GTTCAGGTAAAGGGGTGGAAAAAGATGTTCTACGC <;;<<<<:<<<<<<<;<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:7:108:440:208 99 chr2 975 99 35M = 1142 202 TTCAGGTAAAGGGGAGGAAAAAGATGTTCTACGCA <<<;<<<<<<<<<</<<<<;<<<;<<;<;<64/:+ MF:i:18 Aq:i:43 NM:i:1 UQ:i:14 H0:i:0 H1:i:1
--B7_595:3:229:543:583 99 chr2 976 99 35M = 1139 198 TCAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAA <<<<<<<<<<8<8<9<<<<8<<588<<<<*<2:2* MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:142:353:398 83 chr2 977 99 35M = 807 -205 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA =================================== MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:102:543:160 83 chr2 977 99 35M = 825 -187 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA 9==9=====;=====================<=== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:191:40:536 163 chr2 977 66 35M = 1167 225 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA <<<<<<<<8<<;<<8<<;<;;<<8<<<<<</<74/ MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:272:328:400 163 chr2 977 99 35M = 1151 209 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAA <<<<<<<<;<<<<<<<<<<<<<<<<<<<<<7<;:7 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:69:1593:819 83 chr2 977 99 40M = 786 -231 CAGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA );::7<<<<:;<<<<<<<<<<<<<<<9<<9<3<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:3:133:707:886 99 chr2 978 99 35M = 1146 203 AGGTAAAGGGGTGGAAAAAGATGTTCTACGCAAAC <<<<7;<<<<<<<<<;<<<<<<<<<<<<<5<;66< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:4:92:411:955 99 chr2 979 99 36M = 1149 206 GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_61:8:60:358:494 99 chr2 979 44 35M = 1179 235 GGTAAAGGGGTGGAAAAAGATGTTCTACGCAAACA <<<<<<<<<<<<<<<<<<<<<<<<<<:<:<<;;4; MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_597:7:41:34:211 163 chr2 980 99 35M = 1164 219 GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<3:;5; MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:40:1291:1045 99 chr2 980 99 35M = 1167 222 GTAAAGGGGTGGAAAAAGATGTTCTACGCAACAAG <<<<<<<<<5<<5<<<<7<<<<<<<<<5<9<&%73 MF:i:18 Aq:i:39 NM:i:2 UQ:i:9 H0:i:1 H1:i:0
--EAS218_1:8:90:706:1276 83 chr2 980 99 35M = 814 -201 GTAAAGGGGTGGAAAAAGATGTTCTACGCAAACAG <;<<<<<<<;<<<<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_32:4:5:396:292 163 chr2 981 99 35M = 1155 209 TAAAGGGGTGGAAAAAGATGTTCTACGCAAACAGA <<<<<<<<<<<<<<;;<<<<:<<<<;;<;;3/&+8 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:2:176:653:957 83 chr2 982 82 35M = 819 -198 AAAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA ===::=============<==<====<======== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS54_71:6:264:705:89 99 chr2 983 99 34M = 1155 207 AAGGGGTGGAAAAAGATGTTCTACGCAAACAGAA <<<<<<<<<<;8<<<<<<<<<<<<<<<&<<,;;( MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:66:757:918 163 chr2 985 99 35M = 1143 193 GGGGTGGAAAAAGATGTTCTACGCAAACAGAAACC =================================== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:7:114:506:971 163 chr2 986 99 35M = 1150 199 GGGTGGAAAAAGATGTTCTACGCAAACAGAAACCA =================================== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:220:809:850 99 chr2 986 60 35M = 1187 236 GGGGGGAAAAAGATGTGCTACACAAAAAGATTCCA <<;7;<<0::8<-6:<0624-*<&-93-,8+(&08 MF:i:130 Aq:i:60 NM:i:4 UQ:i:64 H0:i:0 H1:i:0
--B7_589:7:76:306:561 83 chr2 987 89 35M = 794 -228 GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA 9<7<<9<<<<<<7<<71<71*7<<<<<<<<<<1<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS192_3:6:235:505:553 83 chr2 987 99 35M = 808 -214 GGTGGAAAAAGATGTTCTACGCAAACAGAAACCAA ;8518<<<<<;<;<<<;<<;<.<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:19:695:59 147 chr2 988 99 36M = 826 -198 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAAT ;+;8<<<<<<<<<<<5<<+<:<<;<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:5:136:260:254 147 chr2 988 99 35M = 813 -210 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA ;:;;<<<<<<<<<<<<<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:5:266:133:789 147 chr2 988 99 35M = 810 -213 GTGGAAAAAGATGTTCTACGCAAACAGAAACCAAA 9;;<<<<<<<<<<<<5<<;<5<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_591:4:159:508:571 147 chr2 989 84 36M = 834 -191 TGGAAAAAGATGTTCTACGCAAACAGAAACCAAATG 9<6<<<<<<<<<<<;<<;<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:166:84:766 163 chr2 990 99 35M = 1167 212 GGAAAAAGATGTTCTACGCAAACAGAAACCAAATG <<<<<<<<;<<<<<<<<;<<<<<<;<<<7<;::93 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_61:6:283:963:234 99 chr2 992 99 35M = 1157 200 AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG <<<<<<<<<<<<<<<;<<<<<<<<<<<;<<;<<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:4:184:659:377 99 chr2 992 99 35M = 1173 216 AAAAAGATGTTCTACGCAAACAGAAACCAAATGAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:305:707:258 147 chr2 992 58 36M = 831 -197 AAAAAGATGTTCTACGCAAGCAGAAACCAAATGAGA 3<<7<,;<<<<0<66<6+<%<<<.<<<<<<<<<9<< MF:i:18 Aq:i:17 NM:i:1 UQ:i:4 H0:i:0 H1:i:1
--EAS219_1:7:20:1444:328 99 chr2 993 99 35M = 1149 191 AAAAGATGTTCTACGCAAACAGAAACCAAATGAGA <<<<;<<<<<<<<;<<<<<<<<;<<<<<;<;;8:7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:157:447:758 147 chr2 994 99 36M = 833 -197 AAAGATGTTCTACGCAAACAGAAACCAAATGAGAGA <<<;<<5<</<<6<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:37:763:1437 163 chr2 994 99 35M = 1191 232 AAAGATGTTCTACGCAAACAGAAACCAAATGAGAG ;;;;;6;;;;;;;;;:;6;5;5;;;;;76;767/7 MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:94:1273:1462 163 chr2 995 99 35M = 1166 206 AAGATGTTCTACGCAAACAGAAACCAAATGAGAGA <<<<<<<<<<<<:<<<<<<<<:<<<<:6:7;744; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:7:74:213:877 147 chr2 996 99 35M = 816 -215 AGATGTTCTACGCAAACAGAAACCAAATGAGAGAA <<<<<<<&<<-<-<<<7<<<<<77<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:168:61:867 163 chr2 997 99 35M = 1188 226 GATGTTCTACGCAAACAGAAACCAAATGAGAGAAG ====7====================7======6== MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:307:252:632 163 chr2 998 99 35M = 1142 179 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:;;<;; MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:37:604:389 99 chr2 998 99 35M = 1188 225 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<3<<<<<4<<<<<9<2;949<;35:95 MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:147:687:428 99 chr2 998 99 35M = 1159 196 ATGTTCTACGCAAACAGAAACCAAATGAGAGAAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:3:114:736:433 83 chr2 998 63 35M = 832 -201 ATGTTCTACGCAAACAGAAACCAAGTGAGAGAAGG <9<9+9;<6<9<<;9<<<<<;<<<99<<<<<<<<< MF:i:18 Aq:i:18 NM:i:1 UQ:i:24 H0:i:0 H1:i:1
--B7_597:8:35:118:589 163 chr2 999 99 35M = 1188 224 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA <<<<<<<<<<<<<<<<<<<<<<<<<<;<:<<<<<9 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:127:288:655 83 chr2 999 99 35M = 803 -231 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA <<:<3<<:<.<<<;<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:260:827:289 83 chr2 999 99 35M = 836 -198 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA 6;99+<<<<<<<<<<<<<<6<<<<<7<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:82:843:1838 147 chr2 999 99 35M = 804 -230 TGTTCTACGCAAACAGAAACCAAATGAGAGAAGGA 888829;;;;;;;;;;;;;;:;;;;;;;;;;;;;; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:64:350:174 163 chr2 1000 99 35M = 1166 201 GTTCTACGCAAACAGAAACCAAATGAGAGAAGGAG <<<<<<<<<<<<<<<<<<<<<:<<<<<6<<<<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:2:8:327:522 83 chr2 1001 99 35M = 826 -210 TTCTACGCAAACAGAAACCAAATGAGAGAAGGAGT ;;4;<-<-<<<7<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:7:126:361:250 147 chr2 1002 99 35M = 810 -227 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA 72:;7</<<<:<-7<<:<<<<<<<:<6<+:<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:571:366 163 chr2 1002 99 35M = 1194 227 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA <<<<<<<<<<<<<<<<<<<<<<<<<7<:<<99;;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:202:275:776 163 chr2 1002 99 36M = 1196 230 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTAG <<<<<<<<<<<<<<<<<<<<<;<<9<;;<<<;<;<; MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:194:998:663 163 chr2 1002 99 35M = 1165 198 TCTACGCAAACAGAAACCAAATGAGAGAAGGAGTA <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<<<8< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:30:599:589 99 chr2 1003 99 36M = 1188 221 CTACGCAAACAGAAACCAAATGAGAGAAGGAGCAGC <<<<<<<<<<<<<<<<<<<<<<<<<<;;<<;<&<<; MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS112_34:4:92:412:435 99 chr2 1003 89 35M = 1184 216 CTACGCAAACAGAAACCAANTGAGAGAAGGAGTAG <<<<<<<4<<<<<<<<<66!<<<<<<6<<77<<97 MF:i:18 Aq:i:43 NM:i:1 UQ:i:0 H0:i:0 H1:i:1
--B7_610:2:75:887:149 83 chr2 1004 99 35M = 823 -216 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC :<:<0<<<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:2:1422:1820 163 chr2 1004 99 35M = 1164 195 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC ;7;;;;;;;;:;;;;;;;;;;;;;;;;;;;77777 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:90:561:850 83 chr2 1004 85 35M = 827 -212 TACGCAAACAGAAACCAAATGAGAGAAGGAGTAGC 78376<;;9<;<<;:9<<<6;<;<;;8;;<;/;;; MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:4:164:719:947 147 chr2 1005 99 35M = 813 -227 ACGCAAACAGAAACCAAATGAGAGAAGGAGTAGCT ===,=========6====)================ MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:5:154:952:558 99 chr2 1007 99 35M = 1173 201 GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<:< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:58:923:1915 83 chr2 1007 99 40M = 846 -201 GCAAACAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA :+;;;8<<<<<<,<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:253:175:31 99 chr2 1008 72 35M = 1187 214 CAAACAGAAACCAAATGAGAGAAGGAGTAGCTATA <<<<<<<<<<<<<<<<<<<<<<:<<<<<<<:<;;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:2:29:729:70 83 chr2 1009 51 35M = 850 -194 AAACAGAAACCAAATGAGAGAAGGAGTAGCTATAC <<<:<<<<<<7<<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:174:157:573 163 chr2 1012 99 35M = 1191 214 CAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:197:399:319 163 chr2 1012 99 35M = 1189 212 TAGAAACCAAATGAGAGAAGGAGTAGCTATACTTA +<<<<<<<<<<<<<<<<<;<<<<<<<<<<<;;<<; MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_65:7:68:825:405 83 chr2 1015 30 35M = 835 -215 AAACCAAATGAGAGAAGGAGTAGCTATACTTATAT <<<;<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:13:701:55 99 chr2 1015 99 36M = 1187 208 AAACCAAATGAGAGAAGGAGTAGCTATACTTATATC <<<<<<<<<9<<<9<<<<<<6<<<<<<<6<<6<<6+ MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:128:555:941 153 chr2 1016 10 36M * 0 0 AACCAAAAGAGAGAAGGAGTAGTTATACACATATCA 55--555560355$55555555.57757$7555577 MF:i:32 Aq:i:10 NM:i:4 UQ:i:58 H0:i:0 H1:i:0
--EAS219_FC30151:1:53:140:421 163 chr2 1016 99 35M = 1185 204 AACCAAATGAGAGAAGGAGTAGCTATACTTATATC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:1:64:526:339 83 chr2 1019 96 35M = 819 -235 CAAATGAGAGAAGGAGTATCTATACTTATATCAGA 3<<<7<<;<<<<<<<<<<<;<<<<;<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS192_3:3:194:378:230 163 chr2 1022 99 35M = 1198 211 ATGAGAGAAGGAGTAGCTATACTTATATCAGATAA <<<<<<<<<<<<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:45:239:851 163 chr2 1023 61 35M = 1211 223 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA <<88;<208<9<;6<<<6269;94<&401-662&2 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:39:956:676 163 chr2 1023 99 35M = 1191 203 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA ;;;;;;;;;;;;9;;;;;;;;;;;;;;;9957777 MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:15:1763:1143 99 chr2 1023 99 35M = 1193 205 TGAGAGAAGGAGTAGCTATACTTATATCAGATAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:309:109:987 163 chr2 1024 99 35M = 1194 205 GAGAGAAGGAGTAGCTATACTTATATCAGATAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<9<<<;<;;; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_593:3:102:856:670 147 chr2 1025 99 36M = 836 -225 AGAGAAGGAGTAGCTATACTTATATCAGATAAAGCA ;;<<<<:<<<:<<4<<<<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_610:6:107:252:533 163 chr2 1025 60 35M = 1173 183 AGAGAAGGAGTAGCTATACTTATATCAGATAAAGC <<<<<<<<<<<<<<<<<<<<<<<<<<<;<<;<<;9 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:3 H1:i:3
--EAS56_65:4:126:966:514 83 chr2 1027 99 35M = 865 -197 AGAAGAAGTAGCTATACTTATATCAGATAAAGCAC <4<<<%<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:1 H1:i:1
--EAS114_26:1:171:527:247 163 chr2 1027 67 35M = 1194 202 AGAAGGAGTAGCTAGACTTATATCAGATAAAGCAC =4==4===8==99=&=8+9=19+.2.6'=99+999 MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:3
--EAS1_105:1:234:185:359 163 chr2 1029 46 35M = 1183 189 AAGGAGTAGCTATACTTATATCAGATAAAGCACAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;9--: MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:11
--EAS51_66:3:155:375:623 83 chr2 1029 99 35M = 849 -215 AAGGAGTAGCTATACTTATATCAGATAAAGCACAC ;;;;<<:<<<<;<<;<<<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:5:4:939:2021 163 chr2 1031 99 40M = 1197 206 GGAGTAGCTATACTTATATCAGATAAAGCACACTTTAAAT <<<<<<<<<<<<<<<<<<<<<97<<<;<<;<7;<<:48:: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:2
--EAS220_1:2:50:513:882 163 chr2 1031 99 35M = 1192 196 GGAGTAGCTATACTTATATCAGATAAAGCACACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:2 H1:i:14
--EAS1_103:5:188:20:592 163 chr2 1032 95 35M = 1202 205 GAGTAGCTATACTTATATCAGATAAAGCACACTTT <<<<<<<<<<<<<<<<<<<<;;<<<<:<<<;<;;< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:3 H1:i:16
--EAS114_45:3:35:896:1588 163 chr2 1032 91 35M = 1205 208 GAGTAGCTATACTTATATCAGATAAAGCACACTTT ;;;;;;;;;;;;;;;;;;;;8;;;;;8;;;88989 MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:3 H1:i:18
--EAS1_108:6:73:735:329 147 chr2 1035 99 35M = 868 -202 TAGCTATACTTATATCAGATAAAGCACACTTTAAA ;;;9;<<7<<<<<<<<<<<<<<<<<<<2<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:7:133:514:754 83 chr2 1036 63 36M = 855 -217 AGCTATACTTATATCAGATAAAGCACACTTTAAATC ;;4;<;<;<<<<<<<<;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS218_1:4:62:561:531 163 chr2 1036 99 35M = 1203 202 AGCTATACTTATATCAGATAAAGCACACTTTAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_593:6:119:428:415 83 chr2 1037 99 36M = 876 -197 GCTATACTTATATCAGATAAAGCACACTTTAAATCA 84<<<<;;<<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_30:2:226:885:729 147 chr2 1037 98 35M = 867 -205 GCTGAACTTACATCAGATAAAGCACACTTTAAATC /*220%.(;<%<3.<<<4<<<<86;<8<<8<<<<< MF:i:18 Aq:i:30 NM:i:3 UQ:i:36 H0:i:0 H1:i:1
--EAS1_108:1:189:863:213 163 chr2 1039 99 35M = 1202 198 TATACTTATATCAGATAAAGCACACTTTAAATCAA <<<<<<<<<<<<<<<<<<<<;<<<;<<<<;7<9;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_597:4:146:961:63 83 chr2 1041 86 35M = 861 -215 TACTTATATCAGATAAAGCACACTTTAAATCAACA 7;;<<<<<;<<<7<<<<<<<<;;<<;<;<<;<<<7 MF:i:18 Aq:i:37 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:68:996:104 99 chr2 1041 70 35M = 1214 208 TACTTATATCAGATAAAGCACACTTTAAATCAACA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:47:1791:444 163 chr2 1041 74 35M = 1213 207 TACTTATATCAGATAAAGCACACTTTAAATCAACA ;3;;;;;;;;;;;;;;;;;;;;;;;;;;;877977 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:4:1:156:196 147 chr2 1042 77 40M = 867 -215 ACTTATATCAGATAAAGCACACTTTAAATCAACAACAGTA :::::<<<<<<<<<<<<<4<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:70:1349:1788 163 chr2 1043 99 35M = 1203 195 ATTATATCAGATAAAGCACACTTTAAATCAACAAC &<8<<<85:580;<:0-><;>588>9<>7:<0<9; MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:2:30:644:942 99 chr2 1045 83 35M = 1229 219 TATATCAGATAAAGCACACTTTAAATCAACAACAG <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<9;<9< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_591:2:123:924:645 83 chr2 1045 84 36M = 861 -220 TATATCAGATAAAGCACACTTTAAATCAACAACAGT ;<<<<*<<<<<<</7<2<8<<<<<<<4<<<<<<<<< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--B7_589:5:147:405:738 83 chr2 1048 99 35M = 870 -213 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA <9/<:<<<<<<<<7</<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_61:3:155:758:710 83 chr2 1048 98 35M = 859 -224 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA =46=4=5===:========:=7=7======11=== MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_73:7:254:572:431 83 chr2 1048 97 35M = 891 -192 ATCAGATAAAGCACACTTTAAATCAACAACAGTAA <63<;<;<<<:7<:<7;<:<<<<:<<<<7<<<<:< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_57:7:33:954:724 163 chr2 1049 97 35M = 1210 196 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA ;<<<<<<<<<<<<<8<<<<:<;;<<;;<;<<;;;; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_63:6:102:816:260 99 chr2 1049 99 35M = 1225 211 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA <<<<<<<<<;<<<<<<<<<<<<<<<<<<<<;;;;; MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:5:197:914:256 99 chr2 1049 97 35M = 1204 190 TCAGATAAAGCACACTTTAAATCAACAACAGTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<8;::: MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_65:4:150:94:843 147 chr2 1050 0 35M = 868 -217 CAGATACATCCCACTTTAAATCAACCACAGTAAAA 4<9<41*747*7<:9<:7:::<72;+<;::<7<<< MF:i:18 Aq:i:0 NM:i:4 UQ:i:47 H0:i:0 H1:i:0
--EAS1_108:5:321:712:224 163 chr2 1051 58 35M = 1220 204 AGATAAAGCACACTTTAAATCAACAACAGAAAAAT <<<<<<<<2<<<<<<<<<<<<<<<:<<<<(<<:<, MF:i:18 Aq:i:28 NM:i:1 UQ:i:7 H0:i:1 H1:i:2
--EAS114_32:3:236:475:254 83 chr2 1051 99 35M = 880 -206 AGATAAAGCACACTTTAAATCAACAACAGTAAAAT <:<<<<<;9<7<;<<<<<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:72:1288:1211 99 chr2 1052 84 35M = 1235 218 GATAAAGCACACTTTAAATCAACAACAGTAAAATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_65:2:264:157:150 99 chr2 1054 30 35M = 1238 219 TAAAGCACACTTTAAATCAACAACAGTAAAATAAA <<<<<<9<9<<<<.9;<<9&<97<;9933309605 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_95:7:310:800:761 163 chr2 1055 99 35M = 1249 229 AAAGCACACTTTAAATCAACAACAGTAAAATAAAA ===========================+======= MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:88:465:1877 99 chr2 1055 99 35M = 1212 192 AAAGCACACTTTAAATCAACAACAGTAAAATAAAA <<<<<<<<<<;<<<<<<<<<<<<<<<<7<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:66:891:294 163 chr2 1057 99 35M = 1233 211 AGCACACTTTAAATCAACAACAGTAAAATAAAACA <<<<<<<<<<<<<<<<<<<<<<<9<<<<<<;<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:3:100:735:530 163 chr2 1058 99 35M = 1257 234 GCACACTTTAAATCAACAACAGTAAAATAAAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:68:440:424 99 chr2 1060 99 35M = 1237 212 ACACTTTAAATCAACAACAGTAAAATAAAACAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS220_1:8:66:1046:167 99 chr2 1060 99 35M = 1241 216 ACACTTTAAATCAACAACAGTAAAATAAAACAAAG <<<<<:<<<<<<<<<<<<<9<;77<9<7<<;<9;- MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_81:6:11:801:386 83 chr2 1061 97 35M = 868 -228 CACTATAAATCAACAACAGTAAAATAAAACAAAGG 5<2:$6<<<38<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:3 H0:i:1 H1:i:1
--EAS114_28:2:141:7:963 163 chr2 1061 85 36M = 1240 215 CACTTTAAATCAACAACAGTAAAATAAAACAAAGGA <<<<<<<<<<<<;<:<<<<<<1<<&<;<;<<;,<;5 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:2:55:296:1457 147 chr2 1061 99 35M = 884 -212 CACTTTAAATCAACAACAGTAAAATAAAACAAAGG -<%63<<<<<1<<<<<5<<<<<<<<<<<<<<<7<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:1:58:726:1746 83 chr2 1061 99 40M = 900 -201 CAATTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTC &:&::;<<<76<<:<<6<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS221_1:8:15:881:1932 147 chr2 1061 92 35M = 886 -210 CACTTTAAATCAACAACAGTAAAATAAAACAAAGG )<4<<<<<<<4<<4<<4<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_95:5:284:212:932 99 chr2 1063 10 35M = 1257 229 CTTTAAATCAACAACAATAAAAAAAAACAAAGGAG <<9<<<<<<<<<<<<<&&<<<<5<<<<8<<<1:<: MF:i:18 Aq:i:0 NM:i:2 UQ:i:25 H0:i:0 H1:i:0
--EAS139_19:4:18:1335:1514 99 chr2 1063 99 40M = 1235 212 CTTTAAATCAACAACAGTAAAATAAAACAAAGGAGGTCAT <<<;<<<<<<<<<<<<<<<;<:<<;<<<<<<;<;<;;;9; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:273:424:207 83 chr2 1066 99 35M = 891 -210 TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:62:1076:540 147 chr2 1066 99 35M = 882 -219 TAAATCAACAACAGTAAAATAAAACAAAGGAGGTC 6<<;:+=====5=:6===================2 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:113:856:319 83 chr2 1067 99 33M = 884 -216 AAATCAACAACAGTAAAATAAAACAAAGGAGGT <<<77<<:<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:8:19:929:765 147 chr2 1069 98 35M = 919 -185 ATCAACAACAGTAAAATAAAACAAAGGAGGTCATC <3+<<;<<;<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:88:54:900 163 chr2 1069 68 35M = 1257 223 ATCAACAACAGAAAAATAAAACAAAGGAGGTCATC .....&.....,....................... MF:i:18 Aq:i:19 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS56_63:7:109:22:383 163 chr2 1071 99 35M = 1244 208 CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;:<<;<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:8:4:571:820 83 chr2 1071 99 35M = 891 -215 CAACAACAGTAAAATAAAACAAAGGAGGTCATCAT &<<7<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:255:441:47 99 chr2 1072 99 35M = 1237 200 AACAACAGTAAAATAAAACAAAGGAGGTCATCATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<6<;:<;< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:3:66:718:481 147 chr2 1072 99 40M = 891 -221 AACAACAGTAAAATAAAACAAAGGAGGTCATCATACAATG ::5::1<;;<<<<<<1<<<<<<<<<<<<7<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:155:807:19 147 chr2 1074 99 35M = 867 -242 CAACAGTAAAATAAAACAAAGGAGGTCATCATACA :==4=5:====:============:========== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:43:1229:1855 163 chr2 1074 99 35M = 1244 205 CAACAGTAAAATAAAACAAAGGAGGTCATCATACA <<<<<<<<<<<<<<<<<<<<<<<<<4<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:125:875:553 99 chr2 1075 99 36M = 1233 194 AACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;<; MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:118:775:467 163 chr2 1075 99 35M = 1245 205 AACAGTAAAATAAAACAAAGGAGGTCATCATACAA <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:301:161:195 99 chr2 1076 75 35M = 1239 198 ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<;<<<<<<:<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:54:695:952 99 chr2 1076 99 35M = 1264 223 ACAGTAAAATAAAACAAAGGAGGTCATCATACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:77:589:741 163 chr2 1078 99 35M = 1263 220 AGTAAAATAAAACAAAGGAGGTCATCATACAATGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:200:263:280 163 chr2 1078 99 35M = 1236 193 AGTAAAATAAAACAAAGGAGGTCATCATACAATGA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<;8<;1 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:64:199:1288 99 chr2 1079 77 35M = 1240 196 GTAAAATAAAACAAAGGAGGTCATCATACAATGAT <<<<<<<<<<<<<<;<<<<<<<<<<<<<<;<<<;< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:27:228:31 99 chr2 1082 99 35M = 1264 217 AAATAAAACAAAGGAGGTCATCATACAATGATAAA <<<<<<<<<<<<<<<<<;9<:;<<<<<<75<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:214:644:390 83 chr2 1082 72 35M = 919 -198 AAATAAAACAAAGGAGGTCATGATACAATGATAAA <<<;<<<<<<<<<<<<<<<<<&<<<<<<<<<<<<< MF:i:18 Aq:i:27 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS114_45:2:79:554:354 99 chr2 1082 63 35M = 1242 195 AAATAAAACAAAGGAGGTCATCATACAATGATAAA 17;<;;+<<;;;;93;;:;3;;;;1;;;;<77744 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:303:542:924 163 chr2 1083 76 35M = 1242 194 AATAAAACAAAGGAGGTCATCATACAATGATAAAA <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:8:26:242:35 99 chr2 1084 99 35M = 1251 202 ATAAAACAAAGGAGGTCATCATACAATGATAAAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:5:163:832:715 83 chr2 1085 99 36M = 918 -203 TAAAACAAAGGAGGTCATCATACAATGATAAAAAGA ;<<<<9<<<<<<<<;;<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:1:98:641:1040 83 chr2 1085 99 35M = 907 -213 TAAAACAAAGGAGGTCATCATACAATGATAAAAAG 4<<<<7<<<<<<<<<:<<;<;<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:32:562:1695 99 chr2 1085 76 35M = 1258 208 TAAAACAAAGGAGGTCATCATACAATGATAAAAAG <<<<<<<<<<<<<<8<<<<<:<<<<<<<:<8<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:6:758:988 163 chr2 1087 99 35M = 1253 201 AAACAAAGGAGGTCATCATACAATGATAAAAAGAT 3+;0;0;;;0;;;;;;5;;;9;;;;90;;;57560 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:5:273:545:1001 83 chr2 1088 99 35M = 913 -210 AACAAAGGAGGTCATCATACAATGATAAAAAGATC <7(<<72;<2;27<;:<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:74:656:272 163 chr2 1088 99 35M = 1245 192 AACAAAGGAGGTCATCATACAATGATAAAAAGATC <<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:198:564:731 83 chr2 1089 99 35M = 898 -226 ACAAAGGAGGTCATCATACAATGATAAAAAGATCA <6<;<<<<<<:7<<;<<<8<<+<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:6:23:885:274 99 chr2 1089 99 35M = 1289 235 ACAAAGGAGGTCATCATACAATGATAAAAAGATCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4<;;< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:22:632:176 83 chr2 1091 99 36M = 894 -233 AAAGGAGGTCATCATACAATGATAAAAAGATCAATT <9<<<<<<<-;<;<<7;6;<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:184:980:396 83 chr2 1092 99 35M = 923 -204 AAGGAGGTCATCATACAATGATAAAAAGATCAATT <<;;<77;;<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:110:984:98 99 chr2 1092 99 36M = 1270 214 AAGGAGGTCATCATACAATGATAAAAAGATCAATTC 98<<<<<<2<<<<<<;;<;;<<<5;5;<<;;<<<<+ MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:1:202:341:984 147 chr2 1094 99 35M = 926 -203 GGAGGTCATCATACAATGATAAAAAGATCAATTCA <<<(<8&<92<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:219:40:833 163 chr2 1094 99 35M = 1278 219 GGAGGTCATCATACAATGATAAAAAGATCAATTCA <<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:23:1126:1886 99 chr2 1094 99 35M = 1268 209 GGAGGTCATCATACAATGATAAAAAGATCAATTCA 7<<<7<<<<<<<<7<<<<<<<<<<<<<;8<;<<5< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:85:964:950 83 chr2 1095 99 35M = 910 -220 GAGGTCATCATACAATGATAAAAAGATCAATTCAG <<8::<<;;<<<;<<6<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:139:578:951 83 chr2 1095 98 35M = 919 -211 GAGGTCATCATACAATGATAAAAAGATCAATTCAG ;<0;:&<:9<<<7<<<<<<<<<<<<<<;<<<<<<< MF:i:18 Aq:i:26 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:107:738:484 147 chr2 1097 75 35M = 926 -206 GGTCATCATACAATGATAAAAAGATCAATTCAGCA .8/<<<7<8<<<<<<<<<<<<<<<<9<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:4:93:77:1338 83 chr2 1098 10 35M = 940 -193 GTCATCATACAATGAAAAAAAGATCAATTCAGCAA <<7<7<<<<<1<7<<&97;;<1<;1<<7<;7<<;< MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_610:8:68:570:705 147 chr2 1100 99 35M = 910 -225 CATCATACAATGATAAAAAGATCAATTCAGCAAGA 4<;4<;;:<<<<<<<<;<<<<<<<<<<<<<<<<;< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS51_62:1:38:250:647 83 chr2 1100 71 35M = 933 -202 AATAATAAAATGATAAAAAGATCAATTCAGCAAGA +<&+<1<,<<7<<7<<<<<<<1,<<<<7<<2<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:34 H0:i:0 H1:i:3
--EAS1_93:8:13:325:483 83 chr2 1101 99 35M = 919 -217 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA ;:;<;=:========;==========;======== MF:i:18 Aq:i:27 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:128:584:952 163 chr2 1101 99 35M = 1277 211 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA <<<<<<<<<<<<<<+<;<<<<<<;<<<;<<<+<66 MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:4:184:237:476 83 chr2 1101 99 35M = 925 -211 ATCATACAATGATAAAAAGATCAATTCAGCAAGAA <;2<;<4<<;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--EAS51_64:6:300:622:86 163 chr2 1102 99 35M = 1264 197 TCATACAATGATAAAAAGATCAATTCAGCAAGAAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:57:1114:2032 147 chr2 1102 99 35M = 931 -206 TATTACAATGATAAAAAGATCAATTCAGCAAGAAG ;+!5<4<<<<<<<<<<<<<;<&<;7<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:10 H0:i:1 H1:i:6
--B7_593:3:310:193:629 163 chr2 1103 99 36M = 1267 200 CATACAATGATAAAAAGATCAATTCAGCAAGAAGAT <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:6:529:366 99 chr2 1103 99 35M = 1291 223 CATACAATGATAAAAAGATCAATTCAGCAAGAAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:10:686:1024 83 chr2 1103 99 35M = 947 -191 CATACAATGATAAAAAGATCAATTCAGCAAGAAGA &<<<3<<<<<<<<<<<<<<7<<<<<<<<<<7<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS114_45:7:14:978:1296 163 chr2 1104 90 35M = 1249 180 ATACAATGATAAAAAGATCAATTCAGCAAGAAGAT ;6;;;;;;;;;;;:;;;;;;;6;;;;;;;;77777 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS56_57:2:237:855:581 99 chr2 1105 87 35M = 1271 201 TACAATGATAAAAAGATCAATTCAGCAAGAAGATA <;4<7<<<;47<<74<:*<<2:<<7.799:2<<9: MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--EAS139_19:7:85:262:751 163 chr2 1105 99 40M = 1305 240 TACAATGATAAAAAGATCAATTCAGCAAGAAGATATAACC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:::92 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:10:106:737 83 chr2 1106 99 35M = 947 -194 ACAATGATAAAAAGATCAATTCAGCAAGAAGATAT <-<<;<<<<<<<<<<<;<<<<;<<;<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--B7_610:6:143:620:158 163 chr2 1107 99 35M = 1283 211 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA <<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_67:6:198:503:669 147 chr2 1107 99 35M = 912 -230 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA 5<<:<<;<<<<<<<;;<<9<<<<<<<<;<<<<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS192_3:6:116:464:261 147 chr2 1107 99 35M = 934 -208 CAATGATAAAAAGATCAATTCAGCAAGAAGATATA ;<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_73:5:263:557:988 99 chr2 1108 84 35M = 1289 216 AATGATAAAAAGATCAATTCAGCAAGAAGATATAA <<<<<<<<<<<<<<<<<<<<<;;<<<<<<<<;<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:8
--EAS139_19:1:53:463:1132 83 chr2 1109 99 40M = 915 -234 ATGATAAAAAGATCAATTCAGCAAGAAGATATAACCATCC ;::;:<<<<<<<<:<<;<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:1528:799 99 chr2 1109 96 35M = 1306 232 ATGATAAAAAGATCAATTCAGCAAGAAGATATAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:7
--EAS54_81:7:324:472:791 99 chr2 1110 89 35M = 1274 199 TGATAAAAAGATCAATTCAGCAAGAAGATATAACC <<<<<<<<:<<<<<<<<<<<<<<:<<<<<<<<<:3 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--EAS54_61:8:4:173:814 163 chr2 1111 99 35M = 1289 213 GATAAAAAGATCAATTCAGCAAGAAGATATAACCA =====================<==========;== MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_593:3:303:131:673 83 chr2 1112 99 36M = 947 -201 ATAAAAAGATCAATTCAGCAAGAAGATATAACCATC <;<<<<<<<<:<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:235:899:847 147 chr2 1112 99 35M = 950 -197 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT <7<<<<<<<<:<<<<:<</<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS1_105:8:179:119:876 83 chr2 1112 60 35M = 917 -230 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT <<<<<<<7<<<<<<;;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_59:2:162:272:415 147 chr2 1112 83 35M = 923 -224 ATAAAAAGATCAATTCAGCAAGAAGATATAACCAT =7=======;5==<<6==1==<============= MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_45:6:44:77:1255 83 chr2 1113 99 35M = 955 -193 TAAAAAGATCAATTCAGCAAGAAGATATAACCATC 79998;;;9:;<696<;.<;;<<;<;<;<;;;<8; MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:162:257:203 163 chr2 1114 99 35M = 1301 222 AAAAAGATCAATTCAGCAAGAAGATATAACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:55:464:146 99 chr2 1114 99 35M = 1295 216 AAAAAGATCAATTCAGCAAGAAGATATAACCATCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:6:308:667:658 147 chr2 1116 34 35M = 918 -233 AAAGATCACTTCAGCAATAAGATATAACCATCCTA <9;;;45;&<;&.<5683;84+<;<;+8<;<<8;< MF:i:18 Aq:i:10 NM:i:2 UQ:i:23 H0:i:0 H1:i:0
--EAS56_57:4:98:862:154 163 chr2 1116 99 35M = 1290 209 AAAGATCAATTCAGCAAGAAGATATAACCATCCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<9<:99<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_61:5:263:314:696 83 chr2 1117 99 35M = 953 -199 AAGATCAATTCAGCAAGAAGATATAACCATCCTAC <<;<;:<<<<7<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:83:1456:1854 163 chr2 1117 99 35M = 1275 193 AAGATCAATTCAGCAAGAAGATATAACCATCCTAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:4:231:815:626 83 chr2 1119 99 35M = 940 -214 GATCAATACAGCAAGAAGATATAACCATCCTACTA '<4%<<<22<<,<<;<<4;<<<<<<<<<<<<<<7< MF:i:18 Aq:i:41 NM:i:1 UQ:i:17 H0:i:0 H1:i:1
--EAS114_32:4:246:647:765 83 chr2 1119 99 35M = 937 -217 GATCAATTCAGCAAGAAGATATAACCATCCTACTA 9<+,<<&,39<,<;<<<<<<<&<<<<;0<<3;<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:256:354:173 83 chr2 1121 99 36M = 957 -200 TCAATTCAGCAAGAAGATATAACCATCCTACTAAAT -9<<:9<<;6<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:53:61:31 83 chr2 1122 99 35M = 949 -208 CAATTCAGCAAGAAGATATAACCATCCTACTAAAT 5;;<95<<5<<<<<<<<<<:5;<<<<<<<<<<<<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:308:509:948 99 chr2 1123 99 36M = 1298 211 AATTCAGCAAGAAGATATAACCATCCTACTAAATAC <9<<<<<<<;<7<<;<<<<<<<;<<<<7<<;2;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:2:247:900:123 147 chr2 1123 99 35M = 920 -238 AATTCAGCAAGAAGATATAACCATCCTACTAAATA ;;;;.<<4<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:3:307:113:346 83 chr2 1123 99 35M = 938 -220 AATTCAGCAAGAAGATATAACCATCCTACTAAATA <<<<9<<1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:1:168:69:249 83 chr2 1125 99 35M = 936 -224 TTCAGCAAGAAGATATAACCATCCTACTAAATACA ;0;<;;<<<<<<<<<<<<<;<<<8<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:54:1886:719 147 chr2 1125 99 35M = 941 -219 TTCAGCAAGAAGATATAACCATCCTACTAAATACA 883777;;:;;;;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:94:273:165 147 chr2 1128 99 35M = 945 -218 AGAAAGAAGATATAACCATCCTACTAAATACATAT ;3&;;:<<:<-<-<<8:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS1_95:7:155:530:532 163 chr2 1128 99 35M = 1319 226 AGCAAGAAGATATAACCATCCTACTAAATACATAT =================================== MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:61:1885:163 163 chr2 1128 99 40M = 1281 193 AGCAAGAAGATATAACCATCCTACTAAATACATATGCACC <<<<<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<9::::4 MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:193:661:771 83 chr2 1129 99 35M = 952 -212 GCAAGAAGATATAACCATCCTACTAAATACATATG :&<<<<<<<<<<<<<;<<<;<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:6:75:1503:1399 83 chr2 1130 99 40M = 969 -201 CAAGAAGATATAACCATCCTACTAAATACATATGCACCTA &;;8;<<<;<<<<,6<<70<<7<<<<<<9<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:2:42:28:552 163 chr2 1131 99 35M = 1294 198 AAGAAGATATAACCATCCTACTAAATACATATGCA <<<<<<<<<<<<<<<<<<<<<<<<;<;<3<:;9;8 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:61:631:567 147 chr2 1131 99 35M = 957 -209 AAGAAGATATAACCATCCTACTAAATACATATGCA <<7<<<<<<<<</<<;<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:3:257:288:731 147 chr2 1131 99 35M = 939 -227 AAGAAGATATAACCATCCTACTAAATACATATGCA <<:<<7<<<<<;<5<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:2:214:950:32 83 chr2 1132 99 35M = 947 -220 AGAAGATATAACCATCCTACTAAATACATATGCAC =&==4======:;==6<==:=============== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:1:12:88:200 83 chr2 1133 99 35M = 968 -200 GAAGATATAACCATCCTACTAAATACATATGCACC 9<<;<<<;<;6;<;:<<<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:256:444:399 163 chr2 1133 99 35M = 1289 191 GAAGATATAACCATCCTACTAAATACATATGCACC <<<<<<<<<<<<<<<<<<<<<<<<<;;<<<-;<<8 MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:174:753:617 99 chr2 1136 75 35M = 1299 198 GATATAACCATCCTACTAAATACATATGCACCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:115:226:443 99 chr2 1137 99 35M = 1314 212 ATATAACCATCCTACTAAATACATATGCACCTAAC <<<<<<<<<<<<<<<<;<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:26:1867:162 163 chr2 1137 70 35M = 1299 197 ATATAACCATCCTACTAAATACATATGCACCTAAC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78698 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:3:308:66:538 99 chr2 1138 99 35M = 1321 218 TATAACCATCCTACTAAATACATATGCACCTAACA <<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:3:229:543:583 147 chr2 1139 99 35M = 976 -198 ATAACCATCCTACTAAATACATATGCACCTAACAC </<;+5<855;<6<<<<;<<<<<<9<<<<<<<<<< MF:i:18 Aq:i:65 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:17:595:863 163 chr2 1139 89 35M = 1289 185 ATAACCATCCTACTAAATACACATGCACCTAACTC :<4:<<1:<<<9<+<+1<%<7&&9-71<17)7</4 MF:i:18 Aq:i:33 NM:i:2 UQ:i:19 H0:i:0 H1:i:1
--EAS51_62:7:248:17:435 147 chr2 1139 99 35M = 969 -205 ATAACCATCCTACTAAATACATATGCACCTAACAC <1<<88++<:<<:;<;<<<:<<<;<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:6:35:186:412 99 chr2 1139 99 35M = 1306 202 ATAACCATCCTACTAAATACATATGCACCTAACAC <<<<<<<<4<<<<<:<<<<<<:<<<<<<<<<;;<: MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:2:307:252:632 83 chr2 1142 99 35M = 998 -179 ACCATCCTGCTAAATACATATGCACCTAACACAAG <77<;,5<,9<<<<<<;<<<<<7<;<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:11 H0:i:0 H1:i:1
--EAS1_108:7:108:440:208 147 chr2 1142 99 35M = 975 -202 CCCATCCTACTAAATACATATGCACCTAACACAAG +35:486<<4<<<<<<<<<<<-<<<<<7<<)<<<- MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--EAS1_95:7:74:866:49 83 chr2 1143 99 35M = 969 -209 CCAACCTACTAAATACATATGCACCTAACACAAGA :8<&<<<<7<<<<:<<<<<<8<5<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS54_61:2:66:757:918 83 chr2 1143 99 35M = 985 -193 CCATCCTACTAAATACATATGCACCTAACACAAGA <9<45;<<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:220:733:736 147 chr2 1143 99 35M = 959 -219 CCATCCTACTAAATACATATGCACCTAACACAAGA :;<77;<<9<<<<<9;<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:175:289:351 99 chr2 1144 99 35M = 1319 210 CATCCTACTAAATACATATGCACCTAACACAAGAC <<<<<<<<<<;<<<<<<<<;<<<<<<<<<<<9<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:2:56:155:49 147 chr2 1145 99 35M = 970 -210 ATCCTACTAAATACATATGCACCTAACACAAGACT ;:5;;<5<<<<<<<<<<<<<<<<<<<<<<<<<<<= MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:299:336:613 99 chr2 1145 99 35M = 1293 183 ATCCTACTAAATACATATGCACCTAACACAAGACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:4:30:432:228 83 chr2 1145 99 35M = 967 -213 ATCCTACTAAATACATATGCACCTAACACAAGACT <76<<<:<<<<<<<;<:<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:5:93:312:331 83 chr2 1145 99 35M = 953 -227 ATCCTACTAAATACATATGCACCTAACACAAGACT <;;:;<6<<<<;<:<<<<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:3:133:707:886 147 chr2 1146 99 35M = 978 -203 ACCTAATAAATACATATGCACCTAACACAAGACTA %5-2;&6<<<<<;<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:9 H0:i:1 H1:i:0
--EAS51_62:3:50:312:219 163 chr2 1146 99 35M = 1288 177 TCCTACTAAATACATATGCACCTAACACAAGACTA <<<<<<<<<<<;<<<<<;<;<<<;<<<<<<;;;;; MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:82:670:302 147 chr2 1146 99 35M = 973 -208 TCCTACTAAATACATATGCACCTAACACAAGACTA %448<7<<<<<<7<<<<<&<<7<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:47:591:698 99 chr2 1146 99 35M = 1313 202 TCCTACTAAATACATATGCACCTAACACAAGACTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:8:122:430:882 99 chr2 1147 99 35M = 1338 226 CCTACTAAATACATATGCACCTAACACAAGACTAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:4:46:1566:668 83 chr2 1148 99 35M = 959 -224 CTACTAAATACATATGCACCTAACACAAGACTACC 5<<:<<<<<<<<<<<<:<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:4:92:411:955 147 chr2 1149 99 36M = 979 -206 TACTAAATACATATGCACCTAACACAAGACTACCCA 2<+<<<<9<<<<<<<;+<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:96:419:327 99 chr2 1149 99 35M = 1331 217 TACTAAATACATATGCACCTAACACAAGACTACCC <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<;;9<9 MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:20:1444:328 147 chr2 1149 99 35M = 993 -191 TACTAAATACATATGCACCTAACACAAGACTACCC 9<3<<==;=<===;=<=====<<===========< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:198:59:675 163 chr2 1150 99 35M = 1315 200 ACTAAATACATATGCACCTAACACAAGACTATCCT <.<<<<<<;<<<<<<<<<<<**<;<;2<;6;&*2& MF:i:18 Aq:i:45 NM:i:2 UQ:i:10 H0:i:1 H1:i:0
--EAS54_61:7:114:506:971 83 chr2 1150 99 35M = 986 -199 ACTAAATACATATGCACCTAACACAAGACTACCCA ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:94:356:809 163 chr2 1151 99 35M = 1334 218 CTAAATACATATGCACCTAACACAAGACTACCCAG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<:; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:155:541:234 163 chr2 1151 99 35M = 1319 203 CTAAATACATATGCACCTAACACAAGACTACCCAG <<7<<<<<<<<<<<<<<<4<<<<<<<<<<<;;;08 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:272:328:400 83 chr2 1151 99 35M = 977 -209 CTAAATACATATGCACCTAACACAAGACTACCCAG 4;<<<<<7<;<<<-<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:283:186:707 163 chr2 1154 99 36M = 1321 203 AATACATATGCACCTAACACAAGACTACCCAGATTC <<<<<<<<<<<<<<<<<<<<<<;<<<<<;<;<<<<8 MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:4:86:660:932 99 chr2 1154 99 35M = 1338 219 AATACATATGCACCTAACACAAGACTACCCAGATT ================================9:= MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:6:264:705:89 147 chr2 1155 99 35M = 983 -207 AAACATATGCACCTAACACAAGACTACCCAGATTC <(<2<&<)<<<7<8<<<<<<<<<<.<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS114_32:4:5:396:292 83 chr2 1155 99 35M = 981 -209 ATACATATGCACCTAACACAAGACTACCCAGATTC <:<6<7<:<:;;;<<<;<7<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:178:342:866 163 chr2 1155 72 35M = 1311 191 ATACATATGCACCTAACACAAGACTACCCAGATTC ;<<<<<;<<<8<<;<;<3<8/<<<<6<<</<8;<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:155:809:543 163 chr2 1156 99 35M = 1352 231 TACATATGCACCTAACACAAGACTACCCAGATTCA <<<<<<<<<<<<<<<<7<;<<<<<<<<<<<1<;<; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:119:880:781 99 chr2 1157 99 35M = 1312 190 ACATATGCACCTAACACAAGACTACCCAGATTCAT <<<<<<<<<<<<<<<<<<<<<<<<+<<<<7<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:6:283:963:234 147 chr2 1157 99 35M = 992 -200 ACATATGCACCTAACACAAGACTACCCAGATTCAT <5<;<;97;;:;<<7<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:28:745:352 99 chr2 1159 99 35M = 1329 205 ATATGCACCTAACACAAGACTACCCAGATTCATAA <<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:147:687:428 147 chr2 1159 99 35M = 998 -196 ATATGCACCTAACACAAGACTACCCAGATTCATAA ;1<''48;4)<<:<<<<;<<6;<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_53:3:101:809:776 99 chr2 1160 99 35M = 1326 201 TATGCACCTAACACAAGACTACCCAGATTCATAAA <<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:35:538:1882 163 chr2 1160 98 35M = 1337 212 TATGCACCTAACACAAGACTACCCAGATTCATAAA ;);43.50;3;93;;4;3;;;9-7.;*;;966*75 MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:7:41:34:211 83 chr2 1164 99 35M = 980 -219 CACCTAACACAAGACTACCCAGATTCATAAAACAA 7</::<<7<<<<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:1:2:1422:1820 83 chr2 1164 99 35M = 1004 -195 CACCTAACACAAGACTACCCAGATTCATAAAACAA *4617;;4;1;;79;/7&,4;9;;;7<;;<<<;<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:194:998:663 83 chr2 1165 99 35M = 1002 -198 ACCTAACACAAGACTACCCAGATTCATAAAACAAA ;</<<<7<<<<;<<8<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:8:10:975:766 83 chr2 1166 99 35M = 959 -242 AATAACACAAGACTACCCAGATTCATAAAACAAAT ++4<<+<+<<<<8<<22;<<<<<2<<<<<<<<<<< MF:i:18 Aq:i:64 NM:i:2 UQ:i:24 H0:i:1 H1:i:0
--EAS114_39:6:94:1273:1462 83 chr2 1166 99 35M = 995 -206 CCTAACACAAGACTACCCAGATTCATAAAACAAAT 8.<<<;<:<<<<;<<;;;<<<;<;<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:8:64:350:174 83 chr2 1166 99 35M = 1000 -201 CCTAACACAAGACTACCCAGATTCATAAAACAAAT 709<<;<;<<<<<<<;7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:166:84:766 83 chr2 1167 99 35M = 990 -212 ATAACACAAGACTACCCAGATTCATAAAACAAATA %8<=+<-<<<</<<<<8<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS1_108:2:85:580:481 163 chr2 1167 99 35M = 1359 227 CTAACACAAGACTACCCAGATTCATAAAACAAATA <<<<<<<<<<<<<:<<<<<<<<<<<<;<<<<6:<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:4:191:40:536 83 chr2 1167 66 35M = 977 -225 ATAAAAAAAGACTACCCAGATTCATAAAACAAATA +1<<,<&<<:<.;<7/7<<<<;.<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:27 H0:i:1 H1:i:0
--EAS218_1:2:40:1291:1045 147 chr2 1167 99 35M = 980 -222 CTAACACAAGACTACCCAGATTCATAAAACAAATA *<<<9<<<<<<:0<9<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:39 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:221:881:916 99 chr2 1168 96 35M = 1327 194 TAACACAAGACTACCCAGATTCATAAAACAAATAC <<;<<8<<;<<<<<<<;<<<<28<:<8<:;<;;;< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:35:392:2042 163 chr2 1168 99 35M = 1332 199 TAACACAAGACTACCCAGATTCATAAAACNAATAC ======;==========<<=======7=;!<7;;; MF:i:18 Aq:i:72 NM:i:1 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:192:714:341 163 chr2 1170 99 35M = 1346 211 ACACAAGACTACCCAGATTCATAAAACAAATACTA <<9<<<<<<<<<<<8<<<<<;<<;8<<<88;;;;9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:189:876:833 163 chr2 1173 99 36M = 1349 212 CAAGACTACCCAGATTCATAAAACAAATACTACTAG <<<<<<<<<<<8<8<<<<<;<;;<<;<<<<<;<<<6 MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:299:743:762 163 chr2 1173 99 36M = 1345 208 CAAGACTACCCAGATTCATAAAACAAATACTACTAG <<<;<<<<<<<<<:;<<<.<:<<<<<<<<<<;;;;; MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:107:252:533 83 chr2 1173 60 35M = 1025 -183 CAAGACTACCCAGATTCATAAAACAAATACTACTA 3<<<<+<<96<<<<<<;<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:2 H1:i:1
--EAS1_97:5:154:952:558 147 chr2 1173 99 35M = 1007 -201 AAAGACTACCCAGATTCATAAAACAAATACTACTA %<<9;;<<;;;<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS56_63:4:184:659:377 147 chr2 1173 99 35M = 992 -216 CAAAACTACCCAGATTCATAAAACAAATACTACTA 1;<+<;<6;66<<;<<<<;;<<<8<<<<8<<;<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--B7_595:6:137:811:130 163 chr2 1175 99 35M = 1351 211 AGACTACCCAGATTCATAAAACAAATACTACTAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9;;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:124:367:72 163 chr2 1175 99 35M = 1377 237 AGACTACCCAGATTCATAAAACAAATACTACTAGA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;; MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:8:60:358:494 147 chr2 1179 44 35M = 979 -235 TACCCAGATTCATAAAACAAATACTACTAGACCTA 7<77;<<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:14 NM:i:0 UQ:i:0 H0:i:6 H1:i:36
--EAS114_30:7:319:11:255 163 chr2 1179 92 35M = 1337 193 TACCCAGATTCATAAAACAAATACTACTAGACCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<: MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:10
--B7_610:7:26:749:174 99 chr2 1183 78 35M = 1357 209 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <<<<<<<<<<<<<<<<<<<<<<;<9<8<<<9<;94 MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:6 H1:i:31
--EAS1_103:7:112:578:782 99 chr2 1183 89 35M = 1366 218 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<7<<< MF:i:18 Aq:i:20 NM:i:0 UQ:i:0 H0:i:5 H1:i:25
--EAS1_105:1:234:185:359 83 chr2 1183 46 35M = 1029 -189 CAGATTCATAAAACAAATACTACTAGACCTAAGAG <<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:9
--EAS112_34:4:92:412:435 147 chr2 1184 89 35M = 1003 -216 AGATTCATAAAACAAATACTACTAGACCTAAGAGG <;<52:=,====:=========<============ MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:24:105:1046 99 chr2 1184 99 35M = 1377 228 AGATTCATAAAACAAATACTACTAGACCTAAGAGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:4 H1:i:2
--EAS1_97:2:128:629:484 163 chr2 1185 96 35M = 1359 209 GATTCATAAAACAAATACTACTAGACCTAAGAGGG <<49<<<<<9<<<<99<<<<<<<<<<<<+<-)7)) MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:4 H1:i:45
--EAS219_FC30151:1:53:140:421 83 chr2 1185 99 35M = 1016 -204 GATTCATAAAACAAATACTACTAGACCTAAGAGGG <<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:99:557:427 163 chr2 1186 99 35M = 1342 191 ATTCATAAAACAAATACTACTAGACCTAAGAGGGA <<<<<<<<<<<<<<<<<<<<<<:<<<<+;<7:8:; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:3:253:175:31 147 chr2 1187 72 35M = 1008 -214 TTCATAAAACAAATACTACTAGACCTAAGAGGGAT ;+;<;<<<<<<<<9<<9<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:4:13:701:55 147 chr2 1187 99 36M = 1015 -208 TTCATAAAACAAATACTACTAGACCTAAGAGGGATG 0:+<7<;9<;<<<<<<<3<<<<<;;<<<:<<3<<<< MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:220:809:850 147 chr2 1187 60 35M = 986 -236 TTCATAAAACAAATACTACTAGACCTAAGAGGGAT 9+5<;*<<<2:0<<8:<*00<<<:<*<<<<<<<<& MF:i:18 Aq:i:60 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:5:30:599:589 147 chr2 1188 99 36M = 1003 -221 TCATAAAACAAATACTACTAGACCTAAGAGGGATGA 90<;<<<<<<<<+<<<;;<;<;<<<<<<<<6<<8<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:35:118:589 83 chr2 1188 99 35M = 999 -224 TCATAAAACAAATACTACTAGACCTAAGAGGGATG 67<<<<<;<<<<<<<:7<<<<:<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:37:604:389 147 chr2 1188 99 35M = 998 -225 TCATAAAACAAATACTACTAGACCTAAGAGGGATG 00;:;========9========<9========<== MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_61:2:168:61:867 83 chr2 1188 99 35M = 997 -226 TCATAAAACAAATACTACTAGACCTAAGAGGGATG ;7<<<<<<<<<<<<<7<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:7:197:399:319 83 chr2 1189 99 35M = 1012 -212 CAAAAAACAAATACTACTAGACCTAAGAGGGATGA &<+==<<5<<<8<89;;<<<<<<8<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS114_32:5:267:170:250 163 chr2 1189 99 35M = 1377 223 CATAAAACAAATACTACTAGACCTAAGAGGGATGA <<<<<<<<<<<<<<<<<;<<<;<<<<<<<<<<<<; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:4:174:157:573 83 chr2 1191 99 35M = 1012 -214 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 8<<<<4<<<<<<<<;<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:39:956:676 83 chr2 1191 99 35M = 1023 -203 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 899985;;<;:9;;:9<;:9:5;<;;;<;<;<<<< MF:i:18 Aq:i:44 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:37:763:1437 83 chr2 1191 99 35M = 994 -232 TAAAACAAATACTACTAGACCTAAGAGGGATGAGA 79979;<;<;;;<;;;;;;6:;<:;<:8;<<<<;< MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:50:513:882 83 chr2 1192 99 35M = 1031 -196 AAAACAAATACTACTAGACCTAAGAGGGATGAGAA <<<<:<<<<<:<<:<<<<::<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:2:15:1763:1143 147 chr2 1193 99 35M = 1023 -205 AAACAAATACTACTAGACCTAAGAGGGATGAGAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:46 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:4:189:571:366 83 chr2 1194 99 35M = 1002 -227 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<;<<<<<:<<<;<<<;;;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:3:166:532:438 99 chr2 1194 99 35M = 1386 227 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<<<<<<<<<<<<<<;<<;<<;<<<<;<;:;;<;< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:309:109:987 83 chr2 1194 99 35M = 1024 -205 AACAAATACTACTAGACCTAAGAGGGATGAGAAAT <<<<<<:<<;<<<<<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:1:171:527:247 83 chr2 1194 67 35M = 1027 -202 AACAAATGCTACTAGACCTAAGAGGGATGAGAAAT <547*9)&&7+;+<<7<<<;<<<;3<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--B7_589:8:139:727:808 163 chr2 1195 99 35M = 1363 203 ACAAATACTACTAGACCTAAGAGGGATGAGAAATT <<<<<<<<<<<<<:<;<<<<<<<<9;<;9<6;<<9 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:202:275:776 83 chr2 1196 99 36M = 1002 -230 CAAATACTACTAGACCTAAGAGGGATGAGAAATTAC ;<<<<;;<<<<<<<;<<<<<<<;<<<<<<<<<<;<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:12:484:836 163 chr2 1197 99 35M = 1372 210 AAATACTACTAGACCTAAGAGGGATGAGAAATTAC <<<<<<<<<<<<<<<<<7<:<<<<<<9<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:21:553:57 99 chr2 1197 99 35M = 1358 196 AAATACTACTAGACCTAAGAGGGATGAGAAATTAC <<<<<<<<<<<;;<<<;<<;<<;<<<;;9<;<;<9 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:4:939:2021 83 chr2 1197 99 40M = 1031 -206 AAATACTACTAGACCTAAGAGGGATGAGAAATTACCTAAT ;;;;:8;<5:<<<7/<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:194:378:230 83 chr2 1198 99 35M = 1022 -211 AATACTACTAGACCTAAGAGGGATGAGAAATTACC <<;<8<<:<<<<:<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:49 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:68:242:834 163 chr2 1200 99 36M = 1386 222 TACTACTAGACCTAAGAGGGATGAGAAATTACCTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:2:22:471:500 163 chr2 1200 99 35M = 1365 200 TACTACTAGACCTAAGAGGGATGAGAAATTACCTA =======<=<====:<2===9==;=;9;;=;;;;5 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:139:989:144 163 chr2 1201 99 35M = 1387 221 ACTACTAGACCTAAGAGGGATGAGAAATTACCTAA <<<<<<<<<<<<6<<<<<<<<<;<<<<<<<;;<;; MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:5:188:20:592 83 chr2 1202 95 35M = 1032 -205 CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT 2<<7;<<<<,;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:189:863:213 83 chr2 1202 99 35M = 1039 -198 CTACTAGACCTAAGAGGGATGAGAAATTACCTAAT 7:<7<<<<44;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_1:4:62:561:531 83 chr2 1203 99 35M = 1036 -202 TACTAGACCTAAGAGGGATGAGAAATTACCTAATT <<7<<<<:<8<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:8:70:1349:1788 83 chr2 1203 99 35M = 1043 -195 TACTAGACCTAAGAGGGATGAGAAATTACCTAATT <7;<<8<74;;<1<<71<;7<;;<;<7<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:5:197:914:256 147 chr2 1204 97 35M = 1049 -190 ACTAGACCTAAGAGGGATGAGAAATTACCTAATTG <5;<8<5/;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:35:896:1588 83 chr2 1205 91 35M = 1032 -208 CTAGACCTAAGAGGGATGAGAAATTACCTAATTGG 77999:.:<<;<;;;<<;<;<<<<<;<;;<<<<;; MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:43:47:279 163 chr2 1206 99 35M = 1405 234 TAGACCTAAGAGGGATGAGAAGTTACCTAATTGGT <<<<<<<<<<<<<;:<-<<<<<<<<<<<<:;;+7; MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:2:211:954:174 99 chr2 1207 99 35M = 1393 221 AGACCTAAGAGGGATGAGAAATTACCTAATTGGTA ===============================777= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:2:5:1219:137 99 chr2 1209 99 35M = 1384 210 ACCTAAGAGGGATGAGAAATTACATAATTGGTACA <<<<<<<<<<<<<<<<<<<<<<<(<<<<<<:9<;= MF:i:18 Aq:i:45 NM:i:1 UQ:i:7 H0:i:0 H1:i:1
--EAS56_57:7:33:954:724 83 chr2 1210 97 35M = 1049 -196 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA ;<;<;<<-7;<<;<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:24 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:176:402:458 163 chr2 1210 99 36M = 1376 202 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<;;<; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:4:81:687:1379 163 chr2 1210 99 35M = 1366 191 CCTAAGAGGGATGAGAAATTACCTAATTGGTACAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:1:45:239:851 83 chr2 1211 61 35M = 1023 -223 CTAAGAGGGATGAGAAATTACCTAATTGGTACAAT *2*0<<<<<<<<<<<<<<<<9<<3<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_65:5:312:985:871 163 chr2 1212 99 35M = 1369 192 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<9<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:38:557:1441 163 chr2 1212 99 35M = 1381 204 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<<<<<<<<<<<<<<<<<<<<<:<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:3:88:465:1877 147 chr2 1212 99 35M = 1055 -192 TAAGAGGGATGAGAAATTACCTAATTGGTACAATG <<<<<<<:<<<<<<<<:<<<<<<<<<<<<7;<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:7:149:123:265 163 chr2 1213 99 35M = 1395 217 AAGAGGGATGAGAAATTACCTAATTGGTACAATGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<9 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:6:47:1791:444 83 chr2 1213 74 35M = 1041 -207 AAGAGGGATGAGAAATTACCTAATTGGTACAATGT 978879;:;;<:;;<<;:<9<<<<;6;;;;<<<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--EAS51_62:3:68:996:104 147 chr2 1214 70 35M = 1041 -208 AGAGGGATGAGAAATTACCTAATTGGTACAATGTA <1<8<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:21 NM:i:0 UQ:i:0 H0:i:1 H1:i:4
--B7_593:2:68:140:542 99 chr2 1217 95 36M = 1398 217 GGGATGAGAAATTACCTAATTGGTACAATGTACAAT <<<8;<<;<<<<<;<<;<<<<<8;<-<8<82;;;-8 MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:6
--EAS188_7:7:67:719:786 163 chr2 1218 43 35M = 1383 200 GGATGAGAAATTACCTAATTGGTACACTGTACAAT ;;<<<<<<&<<:13&<1<<<:<<<)/&/))<'6-< MF:i:18 Aq:i:13 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS1_108:5:321:712:224 83 chr2 1220 58 35M = 1051 -204 ATGAGAAATTACCTAATTGGTACAATGTACAATAT =;===7;===7=========;=:;=========;= MF:i:18 Aq:i:28 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_26:4:100:238:596 163 chr2 1220 56 35M = 1403 218 ATGAGAAATTACCTAATTGGTACAATGTACAATAT ======9=====;=======5===;====/=;=== MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:13
--EAS51_62:7:312:236:655 163 chr2 1222 99 35M = 1412 225 GAGAAATTACCTAATTGGTACAATGTACAATATTC <<<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:5
--EAS56_63:6:102:816:260 147 chr2 1225 99 35M = 1049 -211 AAATTACCTAATTGGTACAATGTACAATATTCTGA <<<<<<::<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:23 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:34:144:868 163 chr2 1226 76 35M = 1412 221 AATTACCTAATTGGTACAATGTACAATATTCTGAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<4;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:215:516:299 99 chr2 1226 99 35M = 1406 215 AATTACCTAATTGGTACAATGTACAATATTCTGAT <<<<<<;<<<<;;;;<;;<<<<;<<9<;<<1;7/; MF:i:18 Aq:i:64 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:81:12:1231 163 chr2 1228 99 35M = 1391 198 TTACCTAATTGGTACAATGTACAATATTCTGATGA <<<<7<<<<<<<<<<<<<<<<<<<<<<<<<<4<<6 MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:2:30:644:942 147 chr2 1229 83 35M = 1045 -219 TACCTAATTGGTACAATGTACAATATTCTGATGAT 85%+;<<9;<9<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:22 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:41:519:609 163 chr2 1229 99 35M = 1401 207 TACCTAATTGGTACAATGGACAATATTCTGATGAT 1<<<<<<<<<<<<<<<4<-:<+6<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--B7_591:7:116:814:89 99 chr2 1231 99 36M = 1408 213 CCTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<<<<<<<<<<<<<<<<<<:<<<<;<<;<<66< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:169:714:644 163 chr2 1231 99 35M = 1437 241 CCTAATTGGTACAATGTACAATATTCTGATGATGG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<;< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:73:420:812 99 chr2 1232 66 35M = 1414 217 CTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<1<<<<::1<7<:<96<9<:<<:4<70:11< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:17:1179:393 99 chr2 1232 99 35M = 1412 215 CTAATTGGTACAATGTACAATATTCTGATGATGGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<:<<:4< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:118:829:36 99 chr2 1233 99 35M = 1417 219 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<<<<<<<:<2<<<<<<:<<<<<<<<<<<<71;< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:2:125:875:553 147 chr2 1233 99 36M = 1075 -194 TAATTGGTACAATGTACAATATTCTGATGATGGTTA -;<;:;<<;6<<<<<<6<;<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_32:4:7:282:424 99 chr2 1233 83 35M = 1397 199 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<3<<<9<<<<3<<<<<9<<<9,<;;9;&*;3,. MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:447:488 163 chr2 1233 99 35M = 1412 214 TAATTGGTACAATGTACAATATTCTGATGATGGTT <<<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:7:66:891:294 83 chr2 1233 99 35M = 1057 -211 TAATTGGTACAATGTACAATATTCTGATGATGGTT :<<5;;<<<4<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS56_57:8:72:44:435 99 chr2 1235 76 35M = 1392 192 ATTGGTACAATGTACAATATTCTGATGATGGTTAA <<<<<<<<<<<2;<;<<;<<<;<<8<82<;22<8& MF:i:18 Aq:i:0 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS139_19:4:18:1335:1514 147 chr2 1235 99 40M = 1063 -212 ATTGGTACAATGTACAATATTCTGATGATGGTTACACTAA ::/::<<;<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:7:72:1288:1211 147 chr2 1235 84 35M = 1052 -218 ATTGGTACAATGTACAATATTCTGATGATGGTTAC <);<:<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:200:263:280 83 chr2 1236 99 35M = 1078 -193 TTGGTACAATGTACAATATTCTGATGATGGTTACA )<<<8<:<<<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:5:68:440:424 147 chr2 1237 99 35M = 1060 -212 TGGTACAATGTACAATATTCTGATGATGGTTACAC <<2<<<<<<<<9<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:6:255:441:47 147 chr2 1237 99 35M = 1072 -200 TGGTACAATGTACAATATTCTGATGATGGTTACAC ;;7<;:<<<<<<<<<<;<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:174:557:872 163 chr2 1237 99 35M = 1423 221 TGGTACAATGTACAATATTCTGATGATGGTTACAC <<<<<<<<<<<<<:<<<<<<<7<<;<<6:<<2117 MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS51_64:3:255:45:399 163 chr2 1238 99 35M = 1404 201 GGTACAATGTACAATATTCTGATGATGGTTACACT <<3<8<<8<0<<;<<<0<<<</+8<611<<;71;7 MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:2:264:157:150 147 chr2 1238 30 35M = 1054 -219 GGAAAAATGGACAAGATTCTGATGAGGGTTACACT .3%:+<<*;*<2<<1<1*,*<<7<<+<<<&<<<<< MF:i:130 Aq:i:30 NM:i:3 UQ:i:35 H0:i:0 H1:i:0
--EAS139_19:5:95:944:247 99 chr2 1238 99 40M = 1424 226 GGTACAATGTACAATATTCTGATGATGGTTACACTAAAAG <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<:;::: MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_105:2:301:161:195 147 chr2 1239 75 35M = 1076 -198 GTACAATGTACAATATTCTGATGATGGTTACACTA ''6%6<6<<<4<<<<<<<<)<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:2:141:7:963 83 chr2 1240 85 36M = 1061 -215 TACAATGTACAATATTCTGATGATGGTTACACTAAA 95+<<9<<5<;;<<;<<;'<<<<<;<<<7<9<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_39:6:76:282:1668 99 chr2 1240 99 35M = 1401 196 TACAATGTACAATATTCTGATGATGGTTACACTAA <<<<<<<<<<<<<<<<<<;<<;<<<<<<;<;<<<8 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:64:199:1288 147 chr2 1240 77 35M = 1079 -196 TACAATGTACAATATTCTGATGATGGTTACACTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:49:911:980 163 chr2 1241 99 35M = 1434 228 ACAATGTACAATATTCTGATGATGGTTACACTAAA <<<<<<<<<<;<<<<<<<8<<<<;<;<<88-<;33 MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:66:1046:167 147 chr2 1241 99 35M = 1060 -216 ACAATGTACAATATTCTGATGATGGTTACACTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:5:303:542:924 83 chr2 1242 76 35M = 1083 -194 CAATGTACAATATTCTGATGATGGTTACACTAAAA +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS114_45:2:79:554:354 147 chr2 1242 63 35M = 1082 -195 CAATGTACAATATTCTGATGATGGTTACACTAAAA 98988;7;;;;:;;;;;;;;;;:;;;:;;;;;9;; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:248:122:558 163 chr2 1243 99 35M = 1436 228 AATGTACAATATTCTGATGATGGTTACACTAAAAG <<<<:<<<<<<<<<<<<<;<<<<:<6:4<<::6:6 MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:7:109:22:383 83 chr2 1244 99 35M = 1071 -208 ATGTACAATATTCTGATGATGGTTACACTAAAAGC <;9;<8<<<<<<;<<<<<<<<<<<<;<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:43:1229:1855 83 chr2 1244 99 35M = 1074 -205 ATGTACAATATTCTGATGATGGTTACACTAAAAGC 8<<<<;8<<<;;5<<28<<<<<<<<<<<<7;;<<; MF:i:18 Aq:i:48 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:2:74:656:272 83 chr2 1245 99 35M = 1088 -192 TGTACAATATTCTGATGATGGTTACACTAAAAGCC ;;;</<<<<<5;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS56_65:7:118:775:467 83 chr2 1245 99 35M = 1075 -205 TGTACAATATTCTGATGATGGTTACACTAAAAGCC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--B7_593:7:15:244:876 99 chr2 1246 43 36M = 1440 230 GTACAATATTCTGATGATGGTTACACTAAAAGCCCA <<<<<<;<<<<<<<<;<<;;;<<<<<:<<<9;<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:63:28:1549 163 chr2 1247 77 35M = 1439 227 TACAATATTCTGATGATGGTTACACTAAAAGCCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<7;<<<<7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:310:800:761 83 chr2 1249 99 35M = 1055 -229 CAATATTCTGATGATGGTTACACTAAAAGCCCATA 1<<:<:<:<<<<:<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:14:978:1296 83 chr2 1249 90 35M = 1104 -180 CAATATTCTGATGATGGTTACACTAAAAGCCCATA 77177;9;2:;;:;;(;;9;<;;;;:;;;:7;<<; MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:8:26:242:35 147 chr2 1251 99 35M = 1084 -202 ATATTTTGATGATGGTTACACTAAAAGCCCATACT <<<77!!7<;<<<;;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:2 UQ:i:0 H0:i:1 H1:i:8
--EAS114_45:7:6:758:988 83 chr2 1253 99 35M = 1087 -201 ATTCTGATGATGGTTACACTAAAAGCCCATACTTT 3-7*73;;399:9;9;7<-(<;;<;;:;9::;;7; MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:315:412:921 99 chr2 1254 99 35M = 1424 205 TTCTGATGATGGTTACACTACAAGCCCATACTGTA <;<;<<<<<<<;<<<<<<<<8<<<;<<:<<;;+<8 MF:i:18 Aq:i:45 NM:i:2 UQ:i:33 H0:i:0 H1:i:1
--EAS114_30:3:215:840:760 163 chr2 1256 99 35M = 1416 195 CTGATGATGGTTACACTAAAAGCCCATACTTTCCT <<<<<<<<<<<<<<<;<<<88<+<<:<;3585,+: MF:i:18 Aq:i:66 NM:i:1 UQ:i:11 H0:i:1 H1:i:0
--EAS1_95:5:284:212:932 147 chr2 1257 10 35M = 1063 -229 TGATGATGGTTACGCTAAAAGTCCATGCTTTACTG 82%<8:<-:<<:**:<-<<8<)/2/<:/<<<<<<< MF:i:18 Aq:i:0 NM:i:3 UQ:i:42 H0:i:0 H1:i:0
--EAS1_97:4:290:121:79 163 chr2 1257 99 35M = 1420 198 TGATGATGGTTACACTAAAAGCCCATACTTTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<9<<<7;<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:1:88:54:900 83 chr2 1257 68 35M = 1069 -223 TGATGATGGTTACACTAAAAGCCCATACTTCACTG ============;=================;9=== MF:i:18 Aq:i:19 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS188_7:3:100:735:530 83 chr2 1257 99 35M = 1058 -234 TGATGATGGTTACACTAAAAGCCCATACTTTACTG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:32:562:1695 147 chr2 1258 76 35M = 1085 -208 GATGATGGTTACACTAAAAGCCCATACTTTACTGC :5:::<88/<:<<<<<<<<<7<9<<&<959<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:173:627:465 163 chr2 1260 99 36M = 1444 220 TGATGGTTACACTAAAAGCCCATACTTTACTGCTAC <<<<<<<<<<<<<<<<<<<<<<<;<<<<<2;;4;;7 MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS1_95:1:77:589:741 83 chr2 1263 99 35M = 1078 -220 TGGTTACACTAAAAGCCCATACTTTACTGCTACTC 8=;;==606;========================= MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:8:27:228:31 147 chr2 1264 99 35M = 1082 -217 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA 99;;;<<<<<<:<<;<;<<;<<<<;<<;<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:54:695:952 147 chr2 1264 99 35M = 1076 -223 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA 277%<9<4)<<<<<<<<<;<<<<<<<<<<<<<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:6:300:622:86 83 chr2 1264 99 35M = 1102 -197 GGTTACACTAAAAGCCCATACTTTACTGCTACTCA <:<<<:<6;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:71:62:254 163 chr2 1264 99 35M = 1438 209 GGTTACACTAAAAGCCCATACTTTCCTGCTACTCA <<<<<<7<<<<7<<<<<3<<<<<<&<<.<<::<:% MF:i:18 Aq:i:43 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS114_28:1:168:609:646 99 chr2 1264 99 36M = 1436 208 GGTTACACTAAAAGCCCATACTTTACTGCTACTCAA <<<<<<<<<<<;<<<<<:<8<<<<;<<<<<4<<<9< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:84:92:1246 163 chr2 1265 99 35M = 1437 207 GTTACACTAAAAGCCCATACTTTACTGCTACTCAA <<<<<<<<<<<<<<<<5<:<<5<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:3:310:193:629 83 chr2 1267 99 36M = 1103 -200 TACACTAAAAGCCCATACTTTACTGCTACTCAATAT 9<9<6;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:111:379:700 73 chr2 1268 0 35M = 1268 0 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT 7<<:<<<<02<<6&<</<<</+9/98*<966/3/< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:111:379:700 133 chr2 1268 0 * = 1268 0 CGCACTGGCAATATTTGTGTGTTTACTTTTTTGCA :1+&;;6;:;918;);;):,19.9:).):::.&3( MF:i:192
--EAS114_30:6:137:741:866 163 chr2 1268 99 35M = 1429 196 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT <<<<8<<;;;<<<<;<<<;;;<;4<<8;<<;%<8; MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:7:23:1126:1886 147 chr2 1268 99 35M = 1094 -209 ACACTAAAAGCCCATACTTTACTGCTACTCAATAT 5*.:.5<<::<<<<<<<<:5<<<<<<<<<<:2<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:21:423:169 99 chr2 1270 99 35M = 1468 233 ACTAAAAGCCCATACTTTACTGCTACTCAATATAT <<<<<;<<<<<<;<<<<<;;<<<<<<<<9+:5<;; MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:110:984:98 147 chr2 1270 99 36M = 1092 -214 ACTAAAACCCCATACTTTACTGCTACTCAATATATC :81<<<<+;;8<+<8<<<<<;<<<8;<<<<<<<<8; MF:i:18 Aq:i:70 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS219_FC30151:5:54:1351:910 99 chr2 1270 99 35M = 1448 213 ACTAAAAGCCCATACTTTACTGCTACTCAATATAT <<<<<<8<<<<<<<<<<<<<<<<<<<<<<18<<:< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:2:237:855:581 147 chr2 1271 87 35M = 1105 -201 CTAAACGCCCATACTTTACTGCTACTCAATATATC /+<<<&)2;66;/;;+<;;3133<3<3;9;<999< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_59:8:80:542:549 163 chr2 1271 99 35M = 1443 207 CTAAAAGCCCATACTTTACTGCTACTCAATATATC <<<<<<<<;<<<<<<<<:<<<<-<;;<;7<;3;9; MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:7:1347:375 163 chr2 1271 99 35M = 1436 200 CTAAAAGCCCATACTTTACTGCTACTCAATATATC ;;;;;;;;;;;;;;;;;;;;9;;;8;;;;;97777 MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:191:540:493 99 chr2 1273 99 35M = 1432 194 AAAAGCCCATACTTTACTGCTACTCAATATATCCA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_81:7:324:472:791 147 chr2 1274 89 35M = 1110 -199 AAAGCCAATACTTTACTGCTACTCAATATATCCAT <<.)5*&;;11<<<,5<33:-<<6<<<<:<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS220_1:8:83:1456:1854 83 chr2 1275 99 35M = 1117 -193 AAGCCCATACTTTACTGCTACTCAATATATCCATG <<67<:<8<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:290:247:509 163 chr2 1276 99 35M = 1450 209 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<<<<<<<<<4<<<<<<92<;;;<;96;19 MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:90:629:652 99 chr2 1276 99 35M = 1456 215 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<<<<<<<<<<<<<<<<<:<;<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:39:1671:1928 163 chr2 1276 99 35M = 1453 212 AGCCCATACTTTACTGCTACTCAATATATCCATGT <<<<<<<;<<<<;<<<<<4<<<;3<<<;<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:128:584:952 83 chr2 1277 99 35M = 1101 -211 GCCCATACTTTACTGCTACTCAATATATCCATGTA 7<;9;0:<<<:<<:<<<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:61 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:28:979:519 163 chr2 1278 99 35M = 1439 196 CCCATACTTTACTGCTACTCAATATATCCATGTAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;9: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:7:219:40:833 83 chr2 1278 99 35M = 1094 -219 CCCATACTTTACTGCTACTCAATATATCCATGTAA <<*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:289:207:323 163 chr2 1279 99 35M = 1462 218 CCATACTTTACTGCTACTCAATATATCCATGTAAC <<<:<<<<<:<<<<<<<<<<;<<899<<13)939; MF:i:18 Aq:i:41 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:45:758:616 163 chr2 1280 99 35M = 1473 228 CATACTTTACTGCTACTCAATATATCCATGTAACA <<<<<<<<<<<<<<<<<<<<<<<<<6<<<<<<;;< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:42:804:114 163 chr2 1281 99 35M = 1452 206 ATACTTTACTGCTACTCAATATATCCATGTAACAA <<<<<<<<<<<<<<<<<<<<<<<<<<:<:<;;<;; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:61:1885:163 83 chr2 1281 99 40M = 1128 -193 ATACTTTACTGCTACTCAATATATCCATGTAACAAATCTG ;:;;;;<<8<<:<<:<;<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:79 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:282:962:46 99 chr2 1282 99 35M = 1437 190 TACTTTACTGCTACTCAATATATCCATGTAACAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:6:143:620:158 83 chr2 1283 99 35M = 1107 -211 ACTTTACTGCTACTCAATATATCCATGTAACAAAT <4;<;<;<;6<<7<;<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:3:50:312:219 83 chr2 1288 99 35M = 1146 -177 ACTGCTACTCAATATATCCATGTAACAAATCTGCG <,;83:<::6<<<<<<<;:<;<<<<;<<<<<<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_93:5:256:444:399 83 chr2 1289 99 35M = 1133 -191 CTGCTACTCAATATATCCATGTAACAAATCTGCGC ;+549<:<.<<<<<<<;<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:1:17:595:863 83 chr2 1289 89 35M = 1139 -185 AAGCTACTCAATATATCCATGTAACAAATCTGCGC ))55))+2&<<,:5<,0657<<<<:<:<:<<<<<< MF:i:18 Aq:i:33 NM:i:2 UQ:i:16 H0:i:1 H1:i:0
--EAS1_105:6:23:885:274 147 chr2 1289 99 35M = 1089 -235 CTACTACTCAATATATCCATGTAACAAATCTGCGC 2+*27==;;==<<.;:<=<=<============== MF:i:18 Aq:i:51 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--EAS54_61:8:4:173:814 83 chr2 1289 99 35M = 1111 -213 CTGCTACTCAATATATCCATGTAACAAATCTGCGC <<;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:263:557:988 147 chr2 1289 84 35M = 1108 -216 CTGCTACTCAATATATCCATGTAACAAATCTGCGC 1-41:<15+<<<<<<599<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:18 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:2:326:153:231 163 chr2 1290 43 35M = 1477 222 TGCTACTCAATATATCCATGTAACAAATCTGCGCT <<<<<<<<<9<<<<<<<<<,<<<<<<8<<8.;.;4 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:4:98:862:154 83 chr2 1290 99 35M = 1116 -209 TGCTACTCAATATATCCATGTAACAAATCTGCGCT 856:;7<:<<9<<<9<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:2:6:529:366 147 chr2 1291 99 35M = 1103 -223 GCTACTCAATATATCCATGTAACAAATCTGCGCTT 9;8;8<:<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:299:336:613 147 chr2 1293 99 35M = 1145 -183 TACTCAATATATCCATGTAACAAATCTGCGCTTGT 1;4(+<<5<4<1<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:3
--B7_597:2:42:28:552 83 chr2 1294 99 35M = 1131 -198 ACTCAATATATCCATGTAACAAATCTGCGCTTGTA </8:<<:<<<;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS114_39:3:55:464:146 147 chr2 1295 99 35M = 1114 -216 CTCAATATATCCATGTAACAAATCTGCGCTTGTAC ;(;;;;<<<<;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:2
--EAS54_67:6:109:953:668 99 chr2 1297 99 35M = 1485 223 CAATATATCCATGTAACAAATCTGCGCTTGTACTT ;<<<<;<<<<<<<<<<<<<<<<<<<<<<<<8<;<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:1
--EAS139_19:1:82:946:392 163 chr2 1297 99 40M = 1493 236 CAATATATCCATGTAACAAATCTGCGCTTGTACTTCAAAA <<<<<<<<<<<<<<<<<<<<<<<<<8<<<8<<8<<:4488 MF:i:18 Aq:i:74 NM:i:1 UQ:i:19 H0:i:1 H1:i:0
--EAS114_28:3:308:509:948 147 chr2 1298 99 36M = 1123 -211 AATATATCCATGTAACAAATCTGCGCTTGTACTTCT ;;+;;;.8<<;;;<<<<<<<<<<<<<8<<<<<;<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:174:753:617 147 chr2 1299 75 35M = 1136 -198 ATATATCCATGTAACAAATCTGCGCTTGTACTTCT <;<;<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:3:26:1867:162 83 chr2 1299 70 35M = 1137 -197 ATATATCCATGTAACAAATCTGCGCTTGTACTTCT 97999:;<<9;;<:<<;;;<;;<<<<<<<;;<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:2:162:257:203 83 chr2 1301 99 35M = 1114 -222 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA <;<;:<<;<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:62:841:1994 121 chr2 1301 70 35M = 1301 0 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAA 87878;;6:;;:<<<<:<:;;;<;<<<;<;;<;<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:5:62:841:1994 181 chr2 1301 0 * = 1301 0 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MF:i:192
--EAS139_19:7:44:1807:833 99 chr2 1301 99 40M = 1449 188 ATATCCATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<<<<<<<<<<<<<<<<<<;<;<<<;<<9<<<<<89;;;: MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:7:280:607:113 163 chr2 1303 99 35M = 1468 200 ATCCATGTAACAAATCTGCGCTTGTACTTCTAAAT ===================;===;=====<=7=9: MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:260:147:818 163 chr2 1303 82 35M = 1497 229 ATCCATGTAACAAATCTGCGCTTTTACTTCTAAAT <<<<<<3<<<<<;<<<<)<1<<<&<7<<<;<4/9< MF:i:18 Aq:i:41 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS54_71:7:194:867:616 99 chr2 1303 99 34M = 1481 213 ATCCATGTAACAAATCTGCGCTTGTACTTCTATT <8<<<<<<<<<<<8<<4<<<<<<8<<3<<5<&(+ MF:i:18 Aq:i:67 NM:i:2 UQ:i:23 H0:i:1 H1:i:0
--EAS139_19:7:85:262:751 83 chr2 1305 99 40M = 1105 -240 CCATGTAACAAATCTGCGCTTGTACTTCTAAATCTATAAC 22;99;<<8<<<<<<<;<;<<<<<;<<;<<<<<<<<<<<+ MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_81:6:35:186:412 147 chr2 1306 99 35M = 1139 -202 CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<4:6<;<&<:4<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:8:46:1528:799 147 chr2 1306 96 35M = 1109 -232 CATGTAACAAATCTGCGCTTGTACTTCTAAATCTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:5:124:978:501 163 chr2 1307 99 36M = 1499 228 ATGTAACAAATCTGCGCTTGTACTTCTAAATCTATA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:88:866:774 163 chr2 1307 99 35M = 1478 206 ATGTAACAAATCTGCTCTTGTACTTCTAAATCTAT <<<;<<<<<;<<<<<<<<<<<<<<<<<68<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_1:6:4:1131:104 163 chr2 1307 99 35M = 1487 215 ATGTAACAAATCTGCGCTTGTACTTCTAAATCTAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<:: MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:6:178:342:866 83 chr2 1311 72 35M = 1155 -191 AACAAATCTGCGCTTGTACTTCTAAATCTATAAAA <<9<<<&;;<<<<77<;<<<5;:<<<:<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:1:119:880:781 147 chr2 1312 99 35M = 1157 -190 ACAAATCTGCGCTTGTACTTCTAAATCTATAACAA ;8<<;<<<<:<84<<<<:<<<<<<<<<<<<<5<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--B7_591:2:46:220:58 99 chr2 1313 99 36M = 1483 206 CAAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA <<<<<<<<<<<<<<<<<<<<<<9<<<<<<<<<<:<; MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:2:47:591:698 147 chr2 1313 99 35M = 1146 -202 CAAATCTGCGCTTGTACTTCTAAATCTATAACAAA 7;;;;:<<:<:<<<<<7<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:1:115:226:443 147 chr2 1314 99 35M = 1137 -212 AAATCTGCGCTTGTACTTCTAAATCTATAAAAAAA <<;;<;<<<<<<<<<<<<:<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:198:59:675 83 chr2 1315 99 35M = 1150 -200 AATCTGCGCTTGTACTTCTAAATCTATAACAAAAT <<<<<4<4<:<<<;7<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS221_3:2:76:1729:813 163 chr2 1317 99 35M = 1506 224 TCTGCGCTTGTACTTCTAAATCTATAAAAAAATTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:147:360:141 99 chr2 1319 47 35M = 1501 218 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA <<<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<7 MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_95:7:155:530:532 83 chr2 1319 99 35M = 1128 -226 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA :<<<><<8<<<<<><<<<<><<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS51_62:4:308:614:911 99 chr2 1319 90 35M = 1493 209 TGCGCTTGTACTTCTAAATCTATAACAAAATTAAA <<<<<<<<<<<<<<<<<<<<<<<<<<<;;<<<<8< MF:i:18 Aq:i:43 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS54_65:3:155:541:234 83 chr2 1319 99 35M = 1151 -203 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 78;<7<<<<<<<<<<<<<<;<<<<<<<<<<;<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:175:289:351 147 chr2 1319 99 35M = 1144 -210 TGCGCTTGTACTTCTAAATCTATAAAAAAATTAAA 9;;:+<<<<<;<<:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:283:186:707 83 chr2 1321 99 36M = 1154 -203 CGCTTGTACTTCTAAATCTATAACAAAATTAAAATT 889;<7;<7<<7<<<<<7<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_105:3:308:66:538 147 chr2 1321 99 35M = 1138 -218 CGCTTGTACTTCTAAATCTATAACAAAATTAAAAT 996999;<9;<:<<<<<:<<7<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_108:5:11:555:330 163 chr2 1321 99 35M = 1492 206 CGCTTGTACTTCTAAATCTATAAAAAAATTAAAAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<4<;< MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:7:84:411:336 73 chr2 1322 75 35M * 0 0 GCTTGTACTTCTAAATCTATAAAAAAATTAAAATT <<<;<<<;<<<<<<<<<<<<:<<;<<<<<<;8<;< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:5:52:1278:1478 163 chr2 1322 47 35M = 1513 226 GCTTGTACTTCTAAATCTATAACAAAATTAAAATT <<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<9<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_53:3:101:809:776 147 chr2 1326 99 35M = 1160 -201 GTACTTCTAAATCTATAAAAAAATTAAAATTTAAC <<<-<;7;<<<<:;<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS192_3:3:221:881:916 147 chr2 1327 96 35M = 1168 -194 TAATTCTAAATCTAGAACAAAATTAAAATTTAACA 44%-4(5<;9/,:<68:1<:8<:<<84;<<<<<;< MF:i:18 Aq:i:24 NM:i:3 UQ:i:41 H0:i:0 H1:i:0
--EAS1_105:1:28:745:352 147 chr2 1329 99 35M = 1159 -205 CTTCTAAATCTATAACAAAATTAAAATTTAACAAA 4;;*;<<<;;<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS114_45:2:23:1754:796 99 chr2 1329 99 35M = 1488 194 CTTCTAAATCTATAAAAAAATTAAAATTTAACAAA ;<<;<;<;<;<;<<;;;;;<<<<;;<<<<<97999 MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:96:419:327 147 chr2 1331 99 35M = 1149 -217 TCTAAATCTATAACAAAATTAAAATTTAACAAAAG ;1<<<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS1_97:4:274:287:423 163 chr2 1332 75 35M = 1515 218 CTAAATCTATAAAAAAATTAAAATTTAACAAAAGT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:7:35:392:2042 83 chr2 1332 99 35M = 1168 -199 ATAAATCTATAAAAAAATTAAAATTTAACAAAAGT +<<<<</<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS54_65:2:94:356:809 83 chr2 1334 99 35M = 1151 -218 AAATCTATAACAAAATTAAAATTTAACAAAAGTAA <<<<3<<<<;;<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:1 UQ:i:26 H0:i:0 H1:i:1
--EAS114_30:7:319:11:255 83 chr2 1337 92 35M = 1179 -193 TCTATAAAAAAATTAAAATTTAACAAAAGTAAATA ;8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;<<< MF:i:18 Aq:i:17 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:7:35:538:1882 83 chr2 1337 98 35M = 1160 -212 TCTATAACAAAATTAAAATTTAACAAAAGTAAATA 73797;;3<;;<6;;<<<;8:;:;<;:<:;<<;;; MF:i:18 Aq:i:43 NM:i:1 UQ:i:18 H0:i:0 H1:i:1
--EAS51_66:1:64:182:741 153 chr2 1338 10 35M * 0 0 AAAAAAACAAATTAAACTCTAACAAAAGTAAATAA (+;1&(9*%0<*(*&<*5,/+<,&<&<<6<<<<<< MF:i:32 Aq:i:10 NM:i:6 UQ:i:63 H0:i:0 H1:i:0
--EAS54_61:4:86:660:932 147 chr2 1338 99 35M = 1154 -219 ATATAAAAAAATTAAAATTTAACAAAAGTAAATAA &<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:71 NM:i:1 UQ:i:5 H0:i:1 H1:i:0
--EAS56_53:8:122:430:882 147 chr2 1338 99 35M = 1147 -226 CTATAAAAAAATTAAAATTTAACAAAAGTAAATAA 0<<:<<<<<<<:3<<<<<<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:99:557:427 83 chr2 1342 99 35M = 1186 -191 AACAAAATTAAAATTTAACAAAAGTAAATAAAACA <<-<<<<9<<<<<:<<<<9<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:1 UQ:i:12 H0:i:1 H1:i:0
--B7_593:5:299:743:762 83 chr2 1345 99 36M = 1173 -208 AAAATTAAAATTTAACAAAAGTAAATAAAACACATA ;<<<1<<<<<+<;<;7<<;<<<<<<<<<;<<;;<<7 MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:303:428:326 99 chr2 1345 74 35M = 1515 205 AAAATTAAAATTTAACAAAAGTAAATAAAACACAT <<<<<<<<<<<<<<<<<<<<<<<<<<;<<<<<<<; MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:4:192:714:341 83 chr2 1346 99 35M = 1170 -211 AAATTAAAATTTAACAAAAGTAAATAAAACACATA <<<3;<<<<9:<<</<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:1:189:876:833 83 chr2 1349 99 36M = 1173 -212 TTAAAATTTAACAAAAGTAAATAAAACACATAGCTA 7;<<<<:;;<</<<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:7:37:79:581 163 chr2 1349 68 35M = 1533 219 TTAAAATTTAAAAAAAGTAAATAAAACACATAGCT <>4<>>>>;>>&>->9>9;4>->>>>,4>9>,<1> MF:i:18 Aq:i:27 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS139_19:2:82:154:1333 99 chr2 1349 77 40M = 1511 202 TTAAAATTTAACAAAAGTAAATAAAACACACAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;<;;:;: MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:1 H1:i:0
--EAS188_7:1:290:286:763 99 chr2 1349 75 35M = 1515 201 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<7<<<<<<<<<<<<<<<8<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:3:248:1491 73 chr2 1349 99 35M * 0 0 TTAAAATTTAACAAAAGTAAATAAAACACATAGCT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:8:< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:3:6:1064:1805 99 chr2 1350 99 35M = 1502 187 TAAAATTTAACAAAAGTAAATAAAACACATAGCTA <<<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_595:6:137:811:130 83 chr2 1351 99 35M = 1175 -211 AAAATTTAACAAAAGTAAATAAAACACATAGCTAA <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:155:809:543 83 chr2 1352 99 35M = 1156 -231 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<+0<<<9<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_63:3:41:468:459 99 chr2 1352 75 35M = 1513 196 AAATTTAACAAAAGTAAATAAAACACATAGCTAAA <<<<<<<<<<<<<<<<<<<<<;<<<<<<<<<<;;7 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:4:31:622:216 73 chr2 1354 99 35M * 0 0 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<<8<<96<7 MF:i:18 Aq:i:70 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:8:105:854:975 163 chr2 1354 71 35M = 1523 202 ATTTAACAAAAGTAAATAAAACACATAGCTAAAAC <<<<<<<<<<<<<<<<<<<<<<<<<<<7:<;;;;5 MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:26:749:174 147 chr2 1357 78 35M = 1183 -209 TAACAAAAGTAAATAAAACACATAGCTAAAACTAA (<<)<<<<6<<<<<<<<<<&:<3<<<6<<<)<:<< MF:i:18 Aq:i:11 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:6:21:553:57 147 chr2 1358 99 35M = 1197 -196 AACAAAAGTAAATAAAACACATAGCTAAAACTAAA <<+<<<<<<<<<;<<<<8<<<<<<8<<<<<;<<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:2:128:629:484 83 chr2 1359 96 35M = 1185 -209 AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA :(::<</*;<<99<<<-<;<<<<4<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:1 UQ:i:7 H0:i:1 H1:i:0
--EAS1_108:2:85:580:481 83 chr2 1359 99 35M = 1167 -227 AAAAAAGTAAATAAAACACATAGCTAAAACTAAAA =)====77========8=3====3=========== MF:i:18 Aq:i:71 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--B7_589:8:139:727:808 83 chr2 1363 99 35M = 1195 -203 AAGTAAATAAAACACATAGCTAAAACTAAAAAAGC <<;<<<<<<<<<;<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:2:22:471:500 83 chr2 1365 99 35M = 1200 -200 GTAAATAAAACACATAGCTAAAACTAAAAAAGCAA =9===0====;=77<==8;====;=========== MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_103:7:112:578:782 147 chr2 1366 89 35M = 1183 -218 AAAATAAAACACATAGCTAAAACTAAAAAAGCAAA +<<<%<<<<6<;<<<<6:<<<<:<<<<<<<<<<<< MF:i:18 Aq:i:20 NM:i:1 UQ:i:10 H0:i:1 H1:i:0
--EAS221_3:4:81:687:1379 83 chr2 1366 99 35M = 1210 -191 TAAATAAAACACATAGCTAAAACTAAAAAAGCAAA <<<<<<<<<<<:<<<<:<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_65:3:320:20:250 99 chr2 1367 77 35M = 1532 200 AAATAAAACACATAGCTAAAACTAAAAAAGCAAAA <<<<<<<<<<<<<<<<<;<<<<<<<<<;+:<;<<3 MF:i:18 Aq:i:6 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:5:312:985:871 83 chr2 1369 99 35M = 1212 -192 ATAAAACACATAGCTAAAACTAAAAAAGCAAAAAC <8<<<<.<.<<<<:<<<<<.<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:6:12:484:836 83 chr2 1372 99 35M = 1197 -210 AAACACATAGCTAAAACTAAAAAAGCAAAAACAAA <<<<</<4<<&7<<<<;<<<<<<<<<<<<<1<<<< MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:176:402:458 83 chr2 1376 99 36M = 1210 -202 AAATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA </<+<4&;<<<<7<<<<<<<<;<<<<<<<<<<<<<< MF:i:18 Aq:i:70 NM:i:1 UQ:i:14 H0:i:1 H1:i:0
--EAS139_11:7:50:1229:1313 163 chr2 1376 77 35M = 1528 187 ACATAGCTAAAACTAAAAAAGCAAAAACAAAAACT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_65:4:124:367:72 83 chr2 1377 99 35M = 1175 -237 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA ,<<<8,<<<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:5:267:170:250 83 chr2 1377 99 35M = 1189 -223 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA -<;<5-:<<<<;<<<<<<<;;<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS220_1:6:24:105:1046 147 chr2 1377 99 35M = 1184 -228 CATAGCTAAAACTAAAAAAGCAAAAACAAAAACTA +<<<</<<<<<.<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:4:38:557:1441 83 chr2 1381 99 35M = 1212 -204 GATAAAAATAAAAAAGCAAAAACAAAAACTATGCT <&<<<<<,<<<<<<<<8<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:45 NM:i:2 UQ:i:16 H0:i:0 H1:i:1
--EAS188_7:7:67:719:786 83 chr2 1383 43 35M = 1218 -200 TAAAAAAAAAAAAGCAAAAACAAAAACTATGCTAA $<<;<-1<<<8<<*&<;<;,<<3<<<<33<<<33< MF:i:18 Aq:i:13 NM:i:2 UQ:i:28 H0:i:1 H1:i:0
--EAS114_39:2:5:1219:137 147 chr2 1384 99 35M = 1209 -210 AAAACTAAAAAAGCAAAAACAAAAACTATGCTAAG <<<<:<<<<<<<<<<<<<<<<<<<<<<<<<<:<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:7:68:242:834 83 chr2 1386 99 36M = 1200 -222 AAATAAAAAAGCAAAAACAAAAACTATGCTAAGTAT <<68<<<<<<<8<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:1 UQ:i:21 H0:i:1 H1:i:0
--EAS51_66:3:166:532:438 147 chr2 1386 99 35M = 1194 -227 AACTAAAAAAGCAAAAACAAAAACTATGCTAAGTA <<&7<<<<<<<+<<<<<:<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:4:139:989:144 83 chr2 1387 99 35M = 1201 -221 ACTAAAAAAGCAAAAACAAAAACTATGCTAAGTAT <&<<<<<<<<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:3:81:12:1231 83 chr2 1391 99 35M = 1228 -198 AAAAAGCAAAAACAAAAACTATGCTAAGTATTGGT <<<<<<<7<<<<<<<5<'<6/<<<5<<<<<<2<<< MF:i:18 Aq:i:71 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_57:8:72:44:435 147 chr2 1392 76 35M = 1235 -192 AAAAGCAAAAACAAAAACTATGCTAAGTATTGGTA <<<<;7;<<<<;<<<<<<<<<<;<<<;<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_95:2:211:954:174 147 chr2 1393 99 35M = 1207 -221 AAAGAAAAAACAAAAACTATGCTAAGTATTGGTAA ====*=====6======================== MF:i:18 Aq:i:75 NM:i:1 UQ:i:9 H0:i:1 H1:i:0
--B7_595:7:149:123:265 83 chr2 1395 99 35M = 1213 -217 AGCAAAAACAAAAACTATGCTAAGTATTGGTAAAG <;&<<<<<:<<<<<<<<<<;<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_32:4:7:282:424 147 chr2 1397 83 35M = 1233 -199 CAAAAACAAAAACTATGCTAAGTATTGTTAAAGAT 1<<<<<9<<<<<31<77;;;;7<3<<2+;<3<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:10 H0:i:0 H1:i:1
--B7_593:2:68:140:542 147 chr2 1398 95 36M = 1217 -217 AAAAACAAAAACTATGCTAAGTATTGGTAAAGATGT ;;<<;7<<<<<<:<<<:<<<:<<<<<<<<<<<<<<< MF:i:18 Aq:i:19 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_39:6:76:282:1668 147 chr2 1401 99 35M = 1240 -196 AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG <<<<<:<<<8<8<<<<<::<<<<7<<<<<<2<<<8 MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:4:41:519:609 83 chr2 1401 99 35M = 1229 -207 AACAAAAACTATGCTAAGTATTGGTAAAGATGTGG <4;<;<<<<<<<<;4:<<;<<<<<<<<<<<;<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_26:4:100:238:596 83 chr2 1403 56 35M = 1220 -218 CAAAAACTATTCTAAGTATTGGTAAAGATGTGGGG 4<<<<;<3<3&<3<1<5<31<<3<<<<<<2<<;<, MF:i:18 Aq:i:17 NM:i:1 UQ:i:5 H0:i:0 H1:i:1
--EAS51_64:3:255:45:399 83 chr2 1404 99 35M = 1238 -201 AAAAACTATGCTAAGTATTGGTAAAGATGTGGGGA <5<5<4$;;7/<<<177&7;<<<<<<;<<4<<<<< MF:i:18 Aq:i:57 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:6:43:47:279 83 chr2 1405 99 35M = 1206 -234 AAAACTATGCTAAGTATTGGTAAAGATGTGGGGAA <:<<79<<<19<<<1<<9<<+<<<<<3<3<<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_78:7:215:516:299 147 chr2 1406 99 35M = 1226 -215 AAGCTATGCTAAGTATTGGTAAAGATGTGGGGAAA ;;))7<8:855<<4<;:<<87<<<7<<;<<<*3<< MF:i:18 Aq:i:64 NM:i:1 UQ:i:8 H0:i:1 H1:i:0
--B7_591:7:116:814:89 147 chr2 1408 99 36M = 1231 -213 ACTATGCTAAGTATTGGTAAAGATGTGGGGAAAAAA :38<;<;<<<<;<<<<<<<<<<<<<;<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_610:7:34:144:868 83 chr2 1412 76 35M = 1226 -221 AGCTAAGGAATGGGAAAGGTGTGGGGAAAAAAGTA &9+&7<&&0&<6<.0<<7<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:76 NM:i:4 UQ:i:50 H0:i:0 H1:i:0
--EAS51_62:7:312:236:655 83 chr2 1412 99 35M = 1222 -225 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<8;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:6:17:1179:393 147 chr2 1412 99 35M = 1232 -215 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS188_7:6:107:447:488 83 chr2 1412 99 35M = 1233 -214 TGCTAAGTATTGGTAAAGATGTGGGGAAAAAAGTA <<3<<<<<<6<<<<<<<<<<<<<<<<7<<<<<<<< MF:i:18 Aq:i:53 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:6:73:420:812 147 chr2 1414 66 35M = 1232 -217 CTAAGTATTGGTAAAGATGTGGGGAAAAAAGTAAA 5'<<<,<&,<<,<<<<<7<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:3:215:840:760 83 chr2 1416 99 35M = 1256 -195 AAGTATTGGTAAAGATGTGGGGAAAAAAGTAAACT <<<8<::<;;<<<:<7<7<;;;<<<<<<<<<<;<< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_589:8:118:829:36 147 chr2 1417 99 35M = 1233 -219 AGTATTGGTAAAGATGTGGGGAAAAAAGTAAACTC <8<<;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:4:290:121:79 83 chr2 1420 99 35M = 1257 -198 ATTGGTAAAGATGTGGGGAAAAAAGTAAACTCTCA <1<<:<<<<<<<;<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:8:174:557:872 83 chr2 1423 99 35M = 1237 -221 GGTAAAGATGTGGGGAAAAAAGTAAACTCTCAAAT .77<:<9<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:2:315:412:921 147 chr2 1424 99 35M = 1254 -205 GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATA 4-<79;<<<4:;:<<<<<<<<4<<<38<<;<<<<< MF:i:18 Aq:i:45 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:5:95:944:247 147 chr2 1424 99 40M = 1238 -226 GTAAAGATGTGGGGAAAAAAGTAAACTCTCAAATATTGCT :7::;<<<<<;;<<<<<<<<<<<<<<;<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_30:6:137:741:866 83 chr2 1429 99 35M = 1268 -196 GATGAGGGGAAAAAAGTAAACTCTCAAATATTGCT <;0:%<:9<<<:<<<<;<<:<<;0;<<<<<::<<6 MF:i:18 Aq:i:70 NM:i:1 UQ:i:4 H0:i:1 H1:i:0
--EAS188_7:6:191:540:493 147 chr2 1432 99 35M = 1273 -194 GTGGGGAAAAAAGTAAACTCTCAAATATTGCTAGT <<9<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:1:49:911:980 83 chr2 1434 99 35M = 1241 -228 GGGGAAAAAAGTAAACTCTCAAATATTGCTAGTGG 44:7<<<<<<<<<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:62 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:1:248:122:558 83 chr2 1436 99 35M = 1243 -228 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA <;<<<<<<<<<<<;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:52 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:1:168:609:646 147 chr2 1436 99 36M = 1264 -208 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ;;<<<<=======;;:;======;==<========= MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:4:7:1347:375 83 chr2 1436 99 35M = 1271 -200 GGAAAAAAGTAAACTCTCAAATATTGCTAGTGGGA 47999<<<;;;;;;:5;:;<;;<;;;;;<;;;;;< MF:i:18 Aq:i:66 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:282:962:46 147 chr2 1437 99 35M = 1282 -190 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG 69<<<<<:<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_73:5:169:714:644 83 chr2 1437 99 35M = 1231 -241 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG ;<<<<<<;<<<:<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_11:1:84:92:1246 83 chr2 1437 99 35M = 1265 -207 GAAAAAAGTAAACTCTCAAATATTGCTAGTGGGAG <<<<<<<<<<<<<<<8<<<<<<5<<<<<<<<<<<< MF:i:18 Aq:i:78 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_34:7:71:62:254 83 chr2 1438 99 35M = 1264 -209 AAAAAAGTAAACTCTCAAATATTGCTAGTGGGAGT <<<<<<;8<<<<;<:<<<<<<<;<<;<<<<<<<<< MF:i:18 Aq:i:43 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_97:7:28:979:519 83 chr2 1439 99 35M = 1278 -196 AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA <<<<<6<<<<<<<<<<<<<<<8<<<<<<<<6<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_1:1:63:28:1549 83 chr2 1439 77 35M = 1247 -227 AAAAAGTAAACTCTCAAATATTGCTAGTGGGAGTA <<<<<<<<<:<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_593:7:15:244:876 147 chr2 1440 43 36M = 1246 -230 AAAAGTAAACTCTCAAATATTGCTAGTGTGAGTATA ;<<<7<<<<<.2<-<<<<<<<<<:<<<<<<<<<2<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:27 H0:i:0 H1:i:1
--EAS56_59:8:80:542:549 83 chr2 1443 99 35M = 1271 -207 AGTAAACTCTCAAATATTGCTAGTGGGAGTATAAA =9====7=;=======;;==;========<===== MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_28:3:173:627:465 83 chr2 1444 99 36M = 1260 -220 GTAAACTCTCAAATATTGCTAGTGGGAGTATAAATT :<<<<;<;<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:51 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS219_FC30151:5:54:1351:910 147 chr2 1448 99 35M = 1270 -213 ACTCTCAAATATTGCTAGTGGGAGTATAAATTGTT <7<7;;<<<<<;<<;;<<;<<<<<<<<<<<<<<;< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS139_19:7:44:1807:833 147 chr2 1449 99 40M = 1301 -188 CTCTCAAATATTGCTAGTGGGAGTATAAATTGTTTTCCAC :6:9:<<<6<88<;<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:5:290:247:509 83 chr2 1450 99 35M = 1276 -209 TCTCAAATATTGCTAGTGGGAGTATAAATTGTTTT 49';<<<<<8;<;;<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS112_32:7:42:804:114 83 chr2 1452 99 35M = 1281 -206 TCAAATATTGCTAGTGGGAGTATAAATTGTTTTCC ;9<<;<<<<<<;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS218_4:3:39:1671:1928 83 chr2 1453 99 35M = 1276 -212 CAAATATTGCTAGTGGGAGTATAAATTGTTTTCCA <<<<9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_59:5:90:629:652 147 chr2 1456 99 35M = 1276 -215 ATATTGCTAGTGGGAGTATAAATTGTTTTCCACTT <:<7::<:<<<<<8<<<<<<<<<<<<<<<<<<<7< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_66:1:289:207:323 83 chr2 1462 99 35M = 1279 -218 CTAGTGGGAGTATAAATTGATTTCCACTTTGGAAA &</<7<<:<7::<<<<+3<-7<<:<7<<<<<<<<< MF:i:18 Aq:i:41 NM:i:1 UQ:i:12 H0:i:0 H1:i:1
--EAS1_95:7:280:607:113 83 chr2 1468 99 35M = 1303 -200 GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT 18<-<<<<<<<<<<<<<8<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:72 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_99:3:21:423:169 147 chr2 1468 99 35M = 1270 -233 GGAGTATAAATTGTTTTCCACTTTGGAAAACAATT ;376;0<<<<99<<<<<<-;<4<<<<<<<<<;<<< MF:i:18 Aq:i:68 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS56_61:3:45:758:616 83 chr2 1473 99 35M = 1280 -228 ATAAATTGTTTTCCACTTTGGAAAACAATTTGGTA <<;<:<<<<<<<<<;<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:54 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_64:2:326:153:231 83 chr2 1477 43 35M = 1290 -222 ATTGTTTTCAACTTTGGAAAACAATTTGGTAATTT ::6=68=<*$;*=========6============= MF:i:18 Aq:i:0 NM:i:1 UQ:i:3 H0:i:0 H1:i:1
--EAS192_3:3:88:866:774 83 chr2 1478 99 35M = 1307 -206 TTGTTTTCCACTTTGGAAAACAATTTGGTAATTTC <<<;<<<<:<<<<<:<8<<<<<<<<<<8<<<<<<< MF:i:18 Aq:i:47 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_71:7:194:867:616 147 chr2 1481 99 35M = 1303 -213 TTTTCCACTTTGGAAAACAATTTGGTAATTTCGTT 38:;;:<:<<<<;<<<<<<<<<<;<<<<<<<<<<< MF:i:18 Aq:i:67 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_591:2:46:220:58 147 chr2 1483 99 36M = 1313 -206 TTCCACTTTGGAAAACAATTTGGTAATTTCGTTTTT 98<<<2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:75 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS54_67:6:109:953:668 147 chr2 1485 99 35M = 1297 -223 CCACTTTGGAAAACAATTTGGTAATTTCGTTTTTT <:)9<<<<<<<<8:<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:30 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_1:6:4:1131:104 83 chr2 1487 99 35M = 1307 -215 ACTTTGGAAAACAATTTGGTAATTTCGTTTTTTTT 61;;;<<<<<<<<<;:<<<:<<;<<<<;<<<<<<< MF:i:18 Aq:i:73 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS114_45:2:23:1754:796 147 chr2 1488 99 35M = 1329 -194 CTTTGGAAAACAATTTGGTAATTTCGTTTTTTTTT 88897;;;;:;:;;;;;;;;;;;;;;;;;;;;;;; MF:i:18 Aq:i:69 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS1_108:5:11:555:330 83 chr2 1492 99 35M = 1321 -206 GGAAAACAATTTGGTAATTTCGTTTTTTTTTTTTT 6;6;9766+<<<<9:2=<===6============= MF:i:18 Aq:i:56 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:4:308:614:911 147 chr2 1493 90 35M = 1319 -209 AAAAACAATTTGGTAATTTAGTTTTTTTTTTTTTC %<<<;:<::<6,<<<<<<:<:<<<<<<<<<<<<<< MF:i:18 Aq:i:43 NM:i:2 UQ:i:31 H0:i:0 H1:i:1
--EAS139_19:1:82:946:392 83 chr2 1493 99 40M = 1297 -236 GAAAACAATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTC :;:;:,::<:;<<<;;<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:74 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS51_62:2:260:147:818 83 chr2 1497 82 35M = 1303 -229 AAAATTTGGTAATTTAGTTTTTTTTTTTTTCTTTT 6.=..++==6=76==&===========99====== MF:i:18 Aq:i:41 NM:i:2 UQ:i:18 H0:i:0 H1:i:1
--B7_591:5:124:978:501 83 chr2 1499 99 36M = 1307 -228 AATTTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTC <9<;<<::<;<<;<4<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:77 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--B7_597:8:147:360:141 147 chr2 1501 47 13M1D22M = 1319 -218 TTTGGTAATTTAGTTTTTTTTTTTTCTTTTCTCTT <86<<<<73<7<<<<<<<<<<<<<<<<<<<<<<<< MF:i:130 Aq:i:47 NM:i:1 UQ:i:27 H0:i:0 H1:i:0
--EAS114_39:3:6:1064:1805 147 chr2 1502 99 35M = 1350 -187 TTGGTAATTTCGTTTTTTTTTTTTTCTTTTCTCTT ;88<;<;;<<;;<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:76 NM:i:0 UQ:i:0 H0:i:1 H1:i:0
--EAS221_3:2:76:1729:813 83 chr2 1506 99 35M = 1317 -224 TAATTTCGTTTTTTTTTTTTTCTTTTCTCTTTTTT <+6<<<&1<<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:36 NM:i:0 UQ:i:0 H0:i:2 H1:i:0
--EAS54_65:6:326:71:741 153 chr2 1509 0 35M * 0 0 TCTCGTTTTTTTTTCTTTCTTTTCTCTTTTTTTTT !!<66<<<<<<<<<&<<7&<<<<:<*<<<<<<<<1 MF:i:32 Aq:i:0 NM:i:2 UQ:i:22 H0:i:1 H1:i:12
--EAS112_34:6:145:144:263 73 chr2 1509 0 35M * 0 0 TTTCGTTTTTTTTTTTTTTTTTTCCCCTTTCTTTT <<<<<<<<<<<<<<<<+4+4&+&(&&*2&8&&&)& MF:i:32 Aq:i:0 NM:i:4 UQ:i:29 H0:i:0 H1:i:0
--EAS1_105:1:329:407:872 73 chr2 1510 0 35M * 0 0 TTCGTTTTTTTTTTTTTTTTTTCCCTTTTTTTTTT <<<<<<<<<<<<<<<<<<6;<<&4::<++<(&;<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:46 H0:i:0 H1:i:0
--EAS139_19:2:82:154:1333 147 chr2 1511 77 40M = 1349 -202 TTTTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTT :5'::<<<;<<<<<<</3<<<&4&7<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS56_63:3:41:468:459 147 chr2 1513 0 35M = 1352 -196 TTTTTTTTTTTTTTTTTTTCTTTTTTTTTTTTTTT +;<<<<<<<<<<<;&<<;;88&<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS114_28:6:11:151:750 153 chr2 1513 5 36M * 0 0 GTTTTTATTTTTTTCCTCTCTCTTTTTTTTTTTTTT :'1:%4;4<<<+;6;&9+6;/<<<<<<<<<<<<<<< MF:i:32 Aq:i:5 NM:i:3 UQ:i:41 H0:i:0 H1:i:3
--EAS139_11:5:52:1278:1478 83 chr2 1513 47 35M = 1322 -226 GTTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTT .8::<<<<<<<;<<<<<;<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:9 H1:i:85
--B7_591:2:309:798:997 153 chr2 1514 0 36M * 0 0 TTTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 466;<<744077+&7097&%&4<9<<<9<<<::<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:5 H0:i:12 H1:i:85
--EAS1_93:6:218:144:794 121 chr2 1514 0 35M = 1514 0 TTTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT ;92/;5:<6)+<5)67</9<&<&<<<:<<<57<<< MF:i:64 Aq:i:0 NM:i:0 UQ:i:0 H0:i:22 H1:i:85
--EAS1_93:6:218:144:794 181 chr2 1514 0 * = 1514 0 GGGTGCATTGCTATGTTGCGGTCGCTTTGCCTCCT ++(3:&)5<9035<3):-<53<+&&-+)<<&)&<6 MF:i:192
--EAS1_97:6:222:305:337 153 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTTTTTTCCCTTTTTTTTTTTTTT ;;;;;<<';<<<<*;<<<78;7<7<;<<<<<<<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:32 H0:i:0 H1:i:37
--EAS1_105:3:7:35:528 89 chr2 1514 0 35M * 0 0 TTTTTTTTTTGTTCTTTACTCTTTTTTTTTTTTTT <<<<<<<<<<5<<<(<<%<<-8<<<<<<<<<8<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:24 H0:i:0 H1:i:0
--EAS54_65:2:182:924:833 137 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTATTTGCGCTTTTTTTTTTTTTT <<<<<<<<<<<<<)7<<)3/:07<<9<9<<==<7< MF:i:32 Aq:i:0 NM:i:3 UQ:i:30 H0:i:0 H1:i:0
--EAS54_81:8:78:735:536 153 chr2 1514 0 35M * 0 0 TTTTTTTTTTTTTCATTTCTCTTTTTTTTTTTTTT ;9<<<<<<<.7<9'%1<<)2::<<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:4 H0:i:0 H1:i:15
--EAS56_59:5:232:336:46 137 chr2 1514 0 35M * 0 0 ATTTTTTTTTTTTCTTTTCTCTTGTTTCTTTTTTT +<<<<<<<<<<<<6<<<<;<6<<&&<,3<<<<3,, MF:i:32 Aq:i:0 NM:i:3 UQ:i:50 H0:i:0 H1:i:0
--EAS188_4:5:308:552:77 89 chr2 1514 0 35M * 0 0 TTTTCTTTTTTTTCTTTTCTCTTTTTTTTTTTTTT 1;-<%<;8<<<<<&<5-<58:5:<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:1 UQ:i:4 H0:i:30 H1:i:85
--B7_597:5:125:957:753 137 chr2 1515 0 35M * 0 0 TTTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTT <8<<<;<8;8//++(,(+++&++(/+008880;;/ MF:i:32 Aq:i:0 NM:i:2 UQ:i:14 H0:i:0 H1:i:1
--EAS1_97:4:274:287:423 83 chr2 1515 0 35M = 1332 -218 TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 7<<<<9<<9<<<.<<<<90-<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:12 H1:i:85
--EAS54_71:8:234:21:950 89 chr2 1515 0 33M * 0 0 TTTTTTTTTTTTCTCCTCTCTTTTTTTTTTTTT <<<<<<<<<&<;2;&-<,<+;<<<7<<<;<;<; MF:i:32 Aq:i:0 NM:i:2 UQ:i:17 H0:i:0 H1:i:7
--EAS56_61:6:256:67:461 117 chr2 1515 0 * = 1515 0 TCATGTTTGTGTCTTTCTATGCATTTTTTTTTTTT !!7181!63:6-:!-163(-1%-18<<4<<<<<<< MF:i:192
--EAS56_61:6:256:67:461 185 chr2 1515 0 35M = 1515 0 TTGTTTTTTCTTCTTTTCTCTTTTTTTTTTTTTTT *.%53.:)1+9;3397;1795507+335;.&51)5 MF:i:64 Aq:i:0 NM:i:2 UQ:i:14 H0:i:2 H1:i:85
--EAS56_65:8:317:83:500 153 chr2 1515 0 35M * 0 0 TTTTTTTTTTTTCTTTTCTCCTTTTTTTTTTGTTT ;;;;;<<<<<<<3<<<)-;31<<)97<;9<<:<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:41 H0:i:0 H1:i:0
--EAS114_30:2:303:428:326 147 chr2 1515 0 35M = 1345 -205 TTTTTTTTTTTTTTTTTCTCTTTTTTTTTTTTTTT 4<;<<;<;<4<<8;;;;.8+;<<;<8<;<;<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:11 H1:i:85
--EAS188_7:1:290:286:763 147 chr2 1515 75 35M = 1349 -201 TTTTTTTTTTTTCTTTTCTCTTTTTTTTTTTTTTT <<<<;<<<<<<<&<<<<&77<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:29 H1:i:85
--B7_591:7:89:67:709 89 chr2 1516 0 36M * 0 0 TTTTTTTTTTTGTCTTCTCTTTTTTTTTTTTTTTTT :7:::9:7:<<7<'<<477<<<<<<<<<:<<<<<:< MF:i:32 Aq:i:0 NM:i:2 UQ:i:28 H0:i:0 H1:i:17
--EAS56_65:3:47:64:359 89 chr2 1516 0 35M * 0 0 TTTTTTTTTTTCTCTCCTCTTTTTTTTTTTTTTTT <<<6<<<<<<<4<4</9<4@<<;<<<<<<<<<<<< MF:i:32 Aq:i:0 NM:i:2 UQ:i:33 H0:i:0 H1:i:6
--EAS56_65:4:296:78:421 121 chr2 1518 0 35M = 1518 0 TCTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTT !!<<<:<<<<..<::<<<<<<<<<<<<<<<<<<<< MF:i:64 Aq:i:0 NM:i:1 UQ:i:4 H0:i:85 H1:i:85
--EAS56_65:4:296:78:421 181 chr2 1518 0 * = 1518 0 TGTTGGTGTTCGTTTTTTCTCCTGTTTCTTTTTCT <<*<4<<<;:<0<<<<<<<<+;<9<<1<<;<<<+: MF:i:192
--EAS1_95:4:238:124:196 89 chr2 1519 0 35M * 0 0 TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT <0<9.<5.5<<<<9<1<<5<<85<5<<<9<:<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS54_65:7:56:57:985 117 chr2 1519 0 * = 1519 0 TTCTGTCTTCTCTCCTGTCTTCTTTTCTCTTCTTT <9'<.<7<<2<<;77<7<<<<7<7<<<<7<<<2<< MF:i:192
--EAS54_65:7:56:57:985 185 chr2 1519 0 35M = 1519 0 TTTTTTCTCTTTTCTCTTTTTTTTTTTTTTTTTTT 666666*6&1666+64666666666&266666666 MF:i:64 Aq:i:0 NM:i:1 UQ:i:9 H0:i:85 H1:i:85
--EAS56_61:3:5:45:441 89 chr2 1519 0 35M * 0 0 TTTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTT ;;58:<:<(:<<11<&<1<<;<<<<><<<<<<<<< MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:82 H1:i:85
--B7_589:6:33:356:636 73 chr2 1520 0 35M * 0 0 TTTTTTTCTTTTCTCTTTTTTTTTTTTTTTTTTTT <<<<<<<8;<<<<<<<<<<<<<7<<<<<<<;;3&3 MF:i:32 Aq:i:0 NM:i:0 UQ:i:0 H0:i:14 H1:i:85
--EAS114_45:6:86:859:1779 137 chr2 1520 0 35M * 0 0 TTTTTTTCATTTCTCTTTTTTTTTTTTTTTTTTTT ;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;)7699 MF:i:32 Aq:i:0 NM:i:1 UQ:i:26 H0:i:0 H1:i:15
--EAS54_71:8:105:854:975 83 chr2 1523 71 33M = 1354 -202 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTG <<<<;<:<<;<&<;<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:0 UQ:i:0 H0:i:85 H1:i:85
--EAS51_62:4:187:907:145 153 chr2 1524 28 35M * 0 0 TTTCTTCTCTCTCTTTTTTTTTTTTTTTATTGCAT <<<+;;,6<<<<6<<<<<<<<<<<<<<<<<<<<<< MF:i:32 Aq:i:28 NM:i:3 UQ:i:59 H0:i:0 H1:i:0
--EAS54_71:4:284:269:882 73 chr2 1524 0 34M * 0 0 TTTCTTTTCTCTTTTTTTTTTTTTTGTTTTTGCA <;<<<<<8<7<8;<<<;<7<<<<<;272;73&&) MF:i:32 Aq:i:0 NM:i:1 UQ:i:17 H0:i:0 H1:i:85
--EAS56_63:4:141:9:811 137 chr2 1524 10 35M * 0 0 TTTCTTTTCTCCTTTTTTTTTTTTTTTTTCTACAT <<<;<<<<<<<;<;<:<<<;<<<<<<<<..));;. MF:i:32 Aq:i:0 NM:i:3 UQ:i:47 H0:i:2 H1:i:27
--EAS114_30:6:277:397:932 73 chr2 1524 0 35M * 0 0 TTTCTTTTCACTTTTTTTTTTTTTTTTTTTTACTT <<<<<<<<<<<<<<<<<<<<<<<<<<<<:8(,0%( MF:i:32 Aq:i:0 NM:i:3 UQ:i:42 H0:i:2 H1:i:85
--EAS139_11:7:50:1229:1313 83 chr2 1528 77 35M = 1376 -187 TTTTTTCTTTTTTTTTTTTTTTTTTTTGCATGCCA <<<<,<&<7<<<<<<<<<<<<<<<<<<<<<<<<<< MF:i:18 Aq:i:0 NM:i:1 UQ:i:11 H0:i:3 H1:i:7
--EAS54_65:3:320:20:250 147 chr2 1532 77 35M = 1367 -200 TTTTTTTTTTTTTTTTTTTTTTTGCATGCCAGAAA +'''/<<<<7:;+<;::<<<;;<<<<<<<<<<<<< MF:i:18 Aq:i:6 NM:i:2 UQ:i:24 H0:i:1 H1:i:2
--EAS114_26:7:37:79:581 83 chr2 1533 68 35M = 1349 -219 TTTTTTTTTTTTTTTTTTTTTTTCATGCCAGAAAA 3,,,===6===<===<;=====-============ MF:i:18 Aq:i:27 NM:i:2 UQ:i:23 H0:i:0 H1:i:1
---- python-pysam.orig/tests/pysam_data/example_user_header.sam
-+++ /dev/null
-@@ -1,8 +0,0 @@
--@HD VN:1.0
--@SQ SN:chr1 LN:1575
--@SQ SN:chr2 LN:1584
--@x1 A:2 B:5
--@x2 A:4 B:5
--@x3 A:6 B:5
--read_28833_29006_6945 99 chr1 33 20 10M1D25M = 200 167 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< NM:i:1 RG:Z:L1
--read_28701_28881_323b 147 chr2 88 30 35M = 500 412 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 RG:Z:L2
---- python-pysam.orig/tests/pysam_data/Makefile
-+++ python-pysam/tests/pysam_data/Makefile
-@@ -14,7 +14,6 @@
- $(BAM) $(BAI) \
- $(CRAM) $(CRAI) \
- example_bai.bam \
-- rg_with_tab.bam \
- ex2_truncated.bam \
- empty.bam empty.bam.bai \
- explicit_index.bam explicit_index.cram \
---- python-pysam.orig/pysam/alternatives.py.obsolete
-+++ python-pysam/pysam/alternatives.py.obsolete
-@@ -12,7 +12,6 @@
- int bam_merge(int argc, char *argv[])
- int bam_index(int argc, char *argv[])
- int bam_sort(int argc, char *argv[])
-- int bam_tview_main(int argc, char *argv[])
- int bam_mating(int argc, char *argv[])
- int bam_rmdup(int argc, char *argv[])
- int bam_rmdupse(int argc, char *argv[])
---- python-pysam.orig/tests/AlignmentFile_test.py
-+++ python-pysam/tests/AlignmentFile_test.py
-@@ -1382,19 +1382,19 @@
- os.unlink(tmpfilename)
-
-
--class TestDeNovoConstructionUserTags(TestDeNovoConstruction):
--
-- '''test de novo construction with a header that contains lower-case tags.'''
--
-- header = {'HD': {'VN': '1.0'},
-- 'SQ': [{'LN': 1575, 'SN': 'chr1'},
-- {'LN': 1584, 'SN': 'chr2'}],
-- 'x1': {'A': 2, 'B': 5},
-- 'x3': {'A': 6, 'B': 5},
-- 'x2': {'A': 4, 'B': 5}}
--
-- bamfile = os.path.join(BAM_DATADIR, "example_user_header.bam")
-- samfile = os.path.join(BAM_DATADIR, "example_user_header.sam")
-+# class TestDeNovoConstructionUserTags(TestDeNovoConstruction):
-+#
-+# '''test de novo construction with a header that contains lower-case tags.'''
-+#
-+# header = {'HD': {'VN': '1.0'},
-+# 'SQ': [{'LN': 1575, 'SN': 'chr1'},
-+# {'LN': 1584, 'SN': 'chr2'}],
-+# 'x1': {'A': 2, 'B': 5},
-+# 'x3': {'A': 6, 'B': 5},
-+# 'x2': {'A': 4, 'B': 5}}
-+#
-+# bamfile = os.path.join(BAM_DATADIR, "example_user_header.bam")
-+# samfile = os.path.join(BAM_DATADIR, "example_user_header.sam")
-
-
- class TestEmptyHeader(unittest.TestCase):
---- python-pysam.orig/tests/samtools_test.py
-+++ python-pysam/tests/samtools_test.py
-@@ -78,7 +78,7 @@
- # ("view -bT ex1.fa -o %(out)s_ex1.view2 ex1.sam",
- "sort ex1.bam -o %(out)s_ex1.sort.bam",
- "mpileup ex1.bam > %(out)s_ex1.pileup",
-- "depth ex1.bam > %(out)s_ex1.depth",
-+ #"depth ex1.bam > %(out)s_ex1.depth",
- # TODO: issues with file naming
- # "faidx ex1.fa; %(out)s_ex1.fa.fai",
- "index ex1.bam %(out)s_ex1.bam.fai",
-@@ -100,8 +100,8 @@
- "cat -o %(out)s_ex1.cat.bam ex1.bam ex1.bam",
- "targetcut ex1.bam > %(out)s_ex1.targetcut",
- "phase ex1.bam > %(out)s_ex1.phase",
-- "import ex1.fa.fai ex1.sam.gz %(out)s_ex1.bam",
-- "bam2fq ex1.bam > %(out)s_ex1.bam2fq",
-+ #"view -bt ex1.fa.fai -o %(out)s_ex1.bam ex1.sam.gz",
-+ #"bam2fq ex1.bam > %(out)s_ex1.bam2fq",
- # TODO: not the same
- # "pad2unpad -T ex1.fa ex2.bam > %(out)s_ex2.unpad",
- # TODO: command line option problem
skip_test_remote.patch
-#spelling
-#hts1.10
-#samtools_v1.10_full
-# samtools_v1.10
-#bcftools_v1.10_full
clean_less
skip-test-on-32-bit.patch
+++ /dev/null
-From: Michael R. Crusoe <michael.crusoe@gmail.com>
-Subject: Fix spelling typos, courtesy of lintian
---- a/bcftools/filter.c
-+++ b/bcftools/filter.c
-@@ -1053,7 +1053,7 @@ static void filters_set_nmissing(filter_
- }
- static int func_npass(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
-- if ( nstack==0 ) error("Error parsing the expresion\n");
-+ if ( nstack==0 ) error("Error parsing the expression\n");
- token_t *tok = stack[nstack - 1];
- if ( !tok->nsamples ) error("The function %s works with FORMAT fields\n", rtok->tag);
-
---- a/bcftools/filter.c.pysam.c
-+++ b/bcftools/filter.c.pysam.c
-@@ -1055,7 +1055,7 @@ static void filters_set_nmissing(filter_
- }
- static int func_npass(filter_t *flt, bcf1_t *line, token_t *rtok, token_t **stack, int nstack)
- {
-- if ( nstack==0 ) error("Error parsing the expresion\n");
-+ if ( nstack==0 ) error("Error parsing the expression\n");
- token_t *tok = stack[nstack - 1];
- if ( !tok->nsamples ) error("The function %s works with FORMAT fields\n", rtok->tag);
-
---- a/pysam/libcalignedsegment.pyx
-+++ b/pysam/libcalignedsegment.pyx
-@@ -2242,7 +2242,7 @@ cdef class AlignedSegment:
- *value*.
-
- An existing value of the same *tag* will be overwritten unless
-- *replace* is set to False. This is usually not recommened as a
-+ *replace* is set to False. This is usually not recommended as a
- tag may only appear once in the optional alignment section.
-
- If *value* is None, the tag will be deleted.
---- a/pysam/libcalignmentfile.pyx
-+++ b/pysam/libcalignmentfile.pyx
-@@ -1029,7 +1029,7 @@ cdef class AlignmentFile(HTSFile):
-
- See :meth:`~pysam.HTSFile.parse_region` for more information
- on how genomic regions can be specified. :term:`reference` and
-- `end` are also accepted for backward compatiblity as synonyms
-+ `end` are also accepted for backward compatibility as synonyms
- for :term:`contig` and `stop`, respectively.
-
- Without a `contig` or `region` all mapped reads in the file
-@@ -1212,7 +1212,7 @@ cdef class AlignmentFile(HTSFile):
- """perform a :term:`pileup` within a :term:`region`. The region is
- specified by :term:`contig`, `start` and `stop` (using
- 0-based indexing). :term:`reference` and `end` are also accepted for
-- backward compatiblity as synonyms for :term:`contig` and `stop`,
-+ backward compatibility as synonyms for :term:`contig` and `stop`,
- respectively. Alternatively, a samtools 'region' string
- can be supplied.
-
-@@ -1354,7 +1354,7 @@ cdef class AlignmentFile(HTSFile):
-
- The region is specified by :term:`contig`, `start` and `stop`.
- :term:`reference` and `end` are also accepted for backward
-- compatiblity as synonyms for :term:`contig` and `stop`,
-+ compatibility as synonyms for :term:`contig` and `stop`,
- respectively. Alternatively, a :term:`samtools` :term:`region`
- string can be supplied.
-
-@@ -1458,7 +1458,7 @@ cdef class AlignmentFile(HTSFile):
-
- The region is specified by :term:`contig`, `start` and `stop`.
- :term:`reference` and `end` are also accepted for backward
-- compatiblity as synonyms for :term:`contig` and `stop`,
-+ compatibility as synonyms for :term:`contig` and `stop`,
- respectively. Alternatively, a :term:`samtools` :term:`region`
- string can be supplied. The coverage is computed per-base [ACGT].
-
---- a/pysam/libchtslib.pxd
-+++ b/pysam/libchtslib.pxd
-@@ -2511,7 +2511,7 @@ cdef extern from "htslib/cram.h" nogil:
- # 2 if the file is a stream and thus unseekable
- # 1 if the file contains an EOF block
- # 0 if the file does not contain an EOF block
-- # -1 if an error occured whilst reading the file or we could not seek back to where we were
-+ # -1 if an error occurred whilst reading the file or we could not seek back to where we were
- #
- #
- int cram_check_EOF(cram_fd *fd)
---- a/pysam/libchtslib.pyx
-+++ b/pysam/libchtslib.pyx
-@@ -585,7 +585,7 @@ cdef class HTSFile(object):
- rval = hts_opt_apply(self.htsfile, opts)
- if rval != 0:
- hts_opt_free(opts)
-- raise RuntimeError('An error occured while applying the requested format options')
-+ raise RuntimeError('An error occurred while applying the requested format options')
- hts_opt_free(opts)
-
- def parse_region(self, contig=None, start=None, stop=None,
-@@ -595,7 +595,7 @@ cdef class HTSFile(object):
- either be specified by :term:`contig`, `start` and
- `stop`. `start` and `stop` denote 0-based, half-open
- intervals. :term:`reference` and `end` are also accepted for
-- backward compatiblity as synonyms for :term:`contig` and
-+ backward compatibility as synonyms for :term:`contig` and
- `stop`, respectively.
-
- Alternatively, a samtools :term:`region` string can be
---- a/pysam/libcutils.pyx
-+++ b/pysam/libcutils.pyx
-@@ -179,7 +179,7 @@ cpdef parse_region(contig=None,
- `end`. `start` and `end` denote 0-based, half-open intervals.
-
- :term:`reference` and `end` are also accepted for backward
-- compatiblity as synonyms for :term:`contig` and `stop`,
-+ compatibility as synonyms for :term:`contig` and `stop`,
- respectively.
-
- Alternatively, a samtools :term:`region` string can be supplied.